Per VBA Code Verweis im VBA-Editor in Excel kontrollieren und ggf. hinzufügen
Hallo
Ich schreibe hier ein Programm unter VBA in Excel 2003.
Dieses Programm benötigt eine externe dll die man im VBA Editor über "Extras" -> "Verweise..." hinzufügen und aktivieren muß.
Da diese dll standardmäsig nicht hinzugefügt ist würde ich gerne beim Start des Programms dies überprüfen und ggf. diese dll bei den Verweisen hinzufügen. Eben das was man manuell tun würde per VBA Code realisieren.
Leider funktioniert dies nicht. Ich bin bei meiner Suche schon auf die Möglichkeit gestosen das vielleicht so zu machen das ich mit:
Fals nicht würde ich die dann per
Ich erghalte aber schon nach der ersten Zeile die fehlermeldung das die Methode VBE für das Objekt _Application zu einem Fehler führt.
Wie bekomem ich das also hin das das so funktioniert bzw. gibt es andere Möglichkeiten meine Idee umzusetzen? Der Pfad meiner dll ist immer der gleiche.
Gruß
miniversum
Ich schreibe hier ein Programm unter VBA in Excel 2003.
Dieses Programm benötigt eine externe dll die man im VBA Editor über "Extras" -> "Verweise..." hinzufügen und aktivieren muß.
Da diese dll standardmäsig nicht hinzugefügt ist würde ich gerne beim Start des Programms dies überprüfen und ggf. diese dll bei den Verweisen hinzufügen. Eben das was man manuell tun würde per VBA Code realisieren.
Leider funktioniert dies nicht. Ich bin bei meiner Suche schon auf die Möglichkeit gestosen das vielleicht so zu machen das ich mit:
Application.VBE.VBProjects.Item("Projektname").References.Count
dann alle Verweise durchgehe und schaue ob diese Aktiviert sind.Fals nicht würde ich die dann per
Application.VBE.VBProjects.Item("Projektname").References.AddFromFile "c:\WINDOWS\system32\meine.dll"
hinzufügen.Ich erghalte aber schon nach der ersten Zeile die fehlermeldung das die Methode VBE für das Objekt _Application zu einem Fehler führt.
Wie bekomem ich das also hin das das so funktioniert bzw. gibt es andere Möglichkeiten meine Idee umzusetzen? Der Pfad meiner dll ist immer der gleiche.
Gruß
miniversum
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84847
Url: https://administrator.de/contentid/84847
Ausgedruckt am: 03.12.2024 um 17:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo miniversum,
leider konnte ich Deinen Fehler nicht reproduzieren.
Leichter erhältst Du den Verweis auf die Reference-Auflistung des VBA-Projektes der Arbeitsmappe über
BTW: mit
Prüfen könntest Du z.B. indem Du versuchst eine bestimmte Referenz als Reference-Objekt aus der References-Auflistung zu referenzieren *puh :
was dann den Laufzeitfehler 9 auslöst wenn "XYZ" nicht als Referenz im Pojekt vorliegt. Mit
könntest Du dann weiterhin überprüfen ob zwar die Referenz vorhanden ist, aber "kaputt". Das ist dann der Fall wenn eine Referenz anhand der GUID nicht in der Registry gefunden werden kann (COM-Komponente nicht in der original gesetzten Version au dem Rechner vorhanden/registriert).
Am besten Du läufst einfach alle Referenzen durch und siehst dann weiter:
Hoffe das ich Dir mit diesm Ansatz etwas weiterhelfen konnte.
BG, Felix -mrdemeanor- Bahrenburg
leider konnte ich Deinen Fehler nicht reproduzieren.
- Hast Du das Office SP3 installiert?
- Unter Extras|Makro|Sicherheit... unter dem Reiter "Vertrauenswürdige Herausgeber" die Option "Zugriff auf Visual Basic Projekt vertrauen" gesetzt?
- Ist der "Projektname" in Deinem Code korrekt? Standardmäßig heißt das Projekt "VBAProject".
Leichter erhältst Du den Verweis auf die Reference-Auflistung des VBA-Projektes der Arbeitsmappe über
ThisWorkbook.VBProject.References
BTW: mit
Application.VBE.VBProjects.Item("Projektname").References.Count
bekommst Du halt nur die Anzahl der Referenzen...prüfen tust Du damit nichts.Prüfen könntest Du z.B. indem Du versuchst eine bestimmte Referenz als Reference-Objekt aus der References-Auflistung zu referenzieren *puh :
Dim ref As VBIDE.Reference
Set ref = ThisWorkbook.VBProject.References.Item("XYZ")
Dim ref As VBIDE.Reference
Set ref = ThisWorkbook.VBProject.References.Item("XYZ").IsBroken
Am besten Du läufst einfach alle Referenzen durch und siehst dann weiter:
On Error GoTo ErrHandler
Dim ref As VBIDE.Reference
Dim XYZISINREFERENCES As Boolean
Dim RefPathXYZ As String
XYZISINREFERENCES = False
For Each ref In ThisWorkbook.VBProject.References
Select Case ref.Name 'Besser wäre anhand der GUID zu prüfen
Case "XYZ"
XYZISINREFERENCES = True
If ref.IsBroken Then
RefPathXYZ = "Pfad zu Deiner Komponente"
'Besser vorher prüfen ob COM auf Computer, ggfls. installieren/registrieren
'Am besten in Funktion auslagern
ThisWorkbook.VBProject.References.AddFromFile FullPath
End If
End Select
Next ref
If Not XYZISINREFERENCES Then
'Referenz war überhaupt nicht gesetzt
'Besser vorher prüfen ob COM auf Computer, ggfls. installieren/registrieren
'Am besten in Funktion auslagern (s.o.)
ThisWorkbook.VBProject.References.AddFromFile RefPathXYZ
End If
ErrHandler:
Select Case Err.Number
Case 0 'Erfolgreich
Case 47 'Fehler beim laden einer DLL(Versuch Referenz hinzuzufügen)
'Installieren/registrieren und in Projekt hinzufügen (am besten auch in Funktion ausgelagert)
Case Else
'Standard Error Handler aufrufen bzw. auf Fehler lokal reagieren
End Select
Hoffe das ich Dir mit diesm Ansatz etwas weiterhelfen konnte.
BG, Felix -mrdemeanor- Bahrenburg
Hallo miniversum,
also verstehe ich das jetzt richtig? *g
Wenn dem so ist wäre es für mich logischer diese Referenz beim Laden des Add-Ins selbst zu überprüfen und ggfls. zu setzen. Also im Workbook_Open Event des ThisWorkbook´s im Add-In.
Möglich wäre dies auch wenn das Add-In "installiert" wird, also unter (Excel)Extras|AddIns hinzugefügt wird: Workbook_AddinInstall.
Aber zurüch zu Deinem eigtl. Problem: Leider kriege ich es einfach nicht fertig den Fehler zu reproduzieren! Die in Deinem ersten Post beschriebene Zuweisung der neuen Referenz funktioniert bei mir tadellos.
Vllt. einfach mal unter (Excel)Extras-AddIns Dein Add-In rausnehmen, alle Excel Instanzen beenden, neu starten, Add-In neu setzen...
BG, Felix -misterdemeanor-
also verstehe ich das jetzt richtig? *g
- Du hast ein Add-In welches selbst eine Referenz auf eine dll benötigt
- Nun willst Du in irgendeiner Arbeitsmappe dieses Add-In verwenden
- Aus dieser Arbeitsmappe heraus willst Du auf die Referenzen des Add-Ins zugreifen um besagte unregistrierbare dll hinzuzufügen
Wenn dem so ist wäre es für mich logischer diese Referenz beim Laden des Add-Ins selbst zu überprüfen und ggfls. zu setzen. Also im Workbook_Open Event des ThisWorkbook´s im Add-In.
Möglich wäre dies auch wenn das Add-In "installiert" wird, also unter (Excel)Extras|AddIns hinzugefügt wird: Workbook_AddinInstall.
Mit ThisWorkbook kann ich nicht arbeiten weil ich nicht die Verweise des aktuellen Workbook
kontrollieren will sondern die eines add-Ins was als xla Datei hinzugefügt wird.
innerhalb des Add-Ins kannst Du das ja.kontrollieren will sondern die eines add-Ins was als xla Datei hinzugefügt wird.
Aber zurüch zu Deinem eigtl. Problem: Leider kriege ich es einfach nicht fertig den Fehler zu reproduzieren! Die in Deinem ersten Post beschriebene Zuweisung der neuen Referenz funktioniert bei mir tadellos.
Vllt. einfach mal unter (Excel)Extras-AddIns Dein Add-In rausnehmen, alle Excel Instanzen beenden, neu starten, Add-In neu setzen...
BG, Felix -misterdemeanor-