Excel-Addin-Funktion aus VB6 ansprechen

Hallo,

ich habe ein VB6-Programm in dem ich eine Exceldatei öffne und mit ihr rechne. Alles klappt wunderbar, außer dass ich nun eine „Analyse“-Add-In-Funktion (brteiljahre) verwende. Im Excel alleine habe ich das Analyse-Add-In eingeschlossen.

Beim VB6-Aufruf passiert das wohl nicht.

Mein Aufruf in VB6 lautet:

excelapp.Workbooks.Open FileName:=exceldateiname, ReadOnly:=True

Die Fehlermeldung zur Laufzeit lautet:
1.) Die Arbeitsmappe enthält Verknüpfungen, die nicht aktualisert werden können…
2.) Quelle: ATPVBADE.XLA Status: Fehler: Der Name ist nicht definiert oder bezieht sich nicht auf einen rechtwinkligen Bereich

Was muss ich in VB6 machen, damit es läuft, oder bleibt mir nur die Selbstprogrammierung von brteiljahre in Excel? Excel ist Excel 2002/Office 10.

Hi Peter,

ich habe ein VB6-Programm in dem ich eine Exceldatei öffne und
mit ihr rechne. Alles klappt wunderbar, außer dass ich nun
eine „Analyse“-Add-In-Funktion (brteiljahre) verwende. Im
Excel alleine habe ich das Analyse-Add-In eingeschlossen.

Beim VB6-Aufruf passiert das wohl nicht.

Verstehe ich nicht, Add-Ins die man in Excel einbindet werden in Excel gespeichert und gelten immer dann wenn Excel gestartet wird.
Zumindest glaubte ich das bis zu deinem Beitrag :smile:
Hast du mehrere Excelversionen auf dem PC?

Mein Aufruf in VB6 lautet:

excelapp.Workbooks.Open FileName:=exceldateiname,
ReadOnly:=True

Die Fehlermeldung zur Laufzeit lautet:
1.) Die Arbeitsmappe enthält Verknüpfungen, die nicht
aktualisert werden können…

*hmmh* wenn du die Datei „ReadOnly“ öffnest weigert sich halt Excel korrekterweise da die Aktualisierungen reinzuschreiben *glaub*

2.) Quelle: ATPVBADE.XLA Status: Fehler: Der Name ist nicht
definiert oder bezieht sich nicht auf einen rechtwinkligen
Bereich

Klasse Fehlermeldung von MS, was hat eine xla mit einem Excelbereich zu tun der von mir aus rund ist.

Nicht getestet (kann hier keine Add-Inns einbinden):

Sub tt()
Dim A, F
For Each A In AddIns
 If A.Name = "ATPVBADE.XLA" And A.Installed = True Then
 F = True
 Exit For
 End If
Next A
If F = False Then AddIns.Add ("ATPVBADE.XLA") 'ggfs Pfad mitangeben
End Sub

Wenn du nun „In Addins“ durch „excelapp.AddIns“ ersetzt usw. könnte das ja klappen.

Was muss ich in VB6 machen, damit es läuft, oder bleibt mir
nur die Selbstprogrammierung von brteiljahre in Excel? Excel
ist Excel 2002/Office 10.

Mit der Selbstprogrammierung wärest du auf der sehr sicheren Seite, gerade wenn die Datei weitergereicht wird.
Und, man muß ja das Rad nicht immer neu erfinden, ich hab zwar keinen blassen Schimmer was brteiljahre für eine Funktion ist, aber irgendeiner wird da schon Code geschrieben haben um ohne Add-In auszukommen.
(Auf Englisch heißt es YEARFRAC falls du im englishcne Sprachraum nach Ersatzcode suchen willst.)

Gruß
Reinhard

Hallo Reinhard,

Hast du mehrere Excelversionen auf dem PC?

Nein

*hmmh* wenn du die Datei „ReadOnly“ öffnest weigert sich halt
Excel korrekterweise da die Aktualisierungen reinzuschreiben

ReadOnly verhindert nur das abspeichern unter gleichem Namen

Nicht getestet (kann hier keine Add-Inns einbinden):

Sub tt()
Dim A, F
For Each A In AddIns
If A.Name = „ATPVBADE.XLA“ And A.Installed = True Then
F = True
Exit For
End If
Next A
If F = False Then AddIns.Add („ATPVBADE.XLA“) 'ggfs Pfad
mitangeben
End Sub

Werd’ ich nochmal ausprobieren. Hatte ich glaube schonmal probiert. Da wurde dann der AddIn-Pfad vor den Befehl geschrieben und es gab eine andere Fehlermeldung. Das mit dem davor-schreiben passt auch irgendwie zur Fehlermeldung mit der fehlenden Verknüpfung.

Und, man muß ja das Rad nicht immer neu erfinden, ich hab zwar
keinen blassen Schimmer was brteiljahre für eine Funktion ist,

brteiljahre ist die Differenz zwischen 2 Terminen in Jahren mit br_uch_teil, wobei halt gewisse Rechenregeln für die Monate gelten (z.B. 2 Jahre und 3 Monate = 2,25).

(Auf Englisch heißt es YEARFRAC falls du im englishcne
Sprachraum nach Ersatzcode suchen willst.)

Danke.

Gruß, Peter

Hallo Reinhard,

hier meine aktuelle Lösung:

Mit

Dim A
For Each A In AddIns
 msgbox(A.Name)
Next A

werden alle Addins angezeigt, auch Atpvba.xla

Die Zelle in Excel, die sonst heisst

=(brteiljahre(DATUM(A18;A17;1);A126)-A127)\*12

wird während des Programmdurchlaufs scheinbar ersetzt durch

=('C:\Programme\Microsoft Office\Office10\MAKRO\ANALYSE\ATPVBADE.XLA'!brteiljahre(DATUM(A18;A17;1);A126)-A127)\*12

(sichtbar im abgebrochenen Programm in der Excel-Zelle)

Nun wird die Fehlermeldung einigermaßen erklärbar, weil er sucht das verknüpfte Programm C:\Programme\Microsoft Office\Office10\MAKRO\ANALYSE\ATPVBADE.XLA, was aber nicht (als Datei?) geöffnet ist.

Meine derzeitige Abhilfe ist, die Addin-Datei in VB6 erstmal so zu öffnen

excelapp.Workbooks.Open(FileName:= \_
 "C:\Programme\Microsoft Office\Office10\MAKRO\ANALYSE\ATPVBADE.XLA"). \_
 RunAutoMacros Which:=xlAutoOpen

Ein Versuch mit

excelapp.AddIns.Add FileName:="C:\Programme\Microsoft Office\Office10\MAKRO\ANALYSE\ATPVBADE.XLA"

hat nicht geklappt.

Da schließt sich jetzt höchstens noch die Frage an, warum die verknüpften Dateien immer geöffnet sein müssen. Früher (in alten Excel-Versionen, oder war’s gar Lotus-123?) war das nicht notwendig. Die Frage ist eigentlich unabhängig von VB6 und betrifft nur Excel. Habe ich da was falsch eingestellt, oder geht das generell nicht mehr?

Gruß, Peter

Blöd seine eigenen Antworten zu schreiben, aber so allgemein stimmt hier meine Aussage nicht:

Da schließt sich jetzt höchstens noch die Frage an, warum die
verknüpften Dateien immer geöffnet sein müssen.

Das betrifft nur einige (m.E. gerade die „wichtigen“) Befehle, z.B. INDIREKT. Die Hilfe sagt dazu:

INDIREKT(Bezug;A1)

Verweist bezug auf eine andere Arbeitsmappe (ein externer Bezug) muss 
diese Arbeitsmappe geöffnet sein. Ist die Quellarbeitsmappe nicht 
geöffnet, gibt die INDIREKT-Funktion den Fehlerwert #BEZUG! zurück. 

So ein ähnliches Problem liegt dann hier wohl auch bei des AddIn-Funktionen vor.