Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per VBA Code Verweis im VBA-Editor in Excel kontrollieren und ggf. hinzufügen

Frage Entwicklung VB for Applications

Mitglied: miniversum

miniversum (Level 3) - Jetzt verbinden

07.04.2008, aktualisiert 08.04.2008, 25588 Aufrufe, 4 Kommentare

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:
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
Mitglied: misterdemeanor
07.04.2008 um 14:38 Uhr
Hallo miniversum,

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
01.
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 :
01.
Dim ref As VBIDE.Reference 
02.
    Set ref = ThisWorkbook.VBProject.References.Item("XYZ")
was dann den Laufzeitfehler 9 auslöst wenn "XYZ" nicht als Referenz im Pojekt vorliegt. Mit
01.
Dim ref As VBIDE.Reference 
02.
    Set ref = ThisWorkbook.VBProject.References.Item("XYZ").IsBroken
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:
01.
On Error GoTo ErrHandler 
02.
  Dim ref As VBIDE.Reference 
03.
  Dim XYZISINREFERENCES As Boolean 
04.
  Dim RefPathXYZ As String 
05.
  XYZISINREFERENCES = False 
06.
 
07.
    For Each ref In ThisWorkbook.VBProject.References 
08.
      Select Case ref.Name 'Besser wäre anhand der GUID zu prüfen 
09.
        Case "XYZ" 
10.
          XYZISINREFERENCES = True 
11.
          If ref.IsBroken Then 
12.
            RefPathXYZ = "Pfad zu Deiner Komponente" 
13.
            'Besser vorher prüfen ob COM auf Computer, ggfls. installieren/registrieren 
14.
              'Am besten in Funktion auslagern 
15.
            ThisWorkbook.VBProject.References.AddFromFile FullPath 
16.
          End If 
17.
      End Select 
18.
    Next ref 
19.
     
20.
    If Not XYZISINREFERENCES Then 
21.
      'Referenz war überhaupt nicht gesetzt 
22.
        'Besser vorher prüfen ob COM auf Computer, ggfls. installieren/registrieren 
23.
          'Am besten in Funktion auslagern (s.o.) 
24.
      ThisWorkbook.VBProject.References.AddFromFile RefPathXYZ 
25.
    End If 
26.
ErrHandler: 
27.
  Select Case Err.Number 
28.
    Case 0 'Erfolgreich 
29.
    Case 47 'Fehler beim laden einer DLL(Versuch Referenz hinzuzufügen) 
30.
      'Installieren/registrieren und in Projekt hinzufügen (am besten auch in Funktion ausgelagert) 
31.
    Case Else 
32.
      'Standard Error Handler aufrufen bzw. auf Fehler lokal reagieren 
33.
  End Select
Hoffe das ich Dir mit diesm Ansatz etwas weiterhelfen konnte.

BG, Felix -mrdemeanor- Bahrenburg
Bitte warten ..
Mitglied: miniversum
07.04.2008 um 18:08 Uhr
*sp3 ist installiert.
*diese Option war nicht an, aber manuel gehts ja dennoch auch ohne?
*ja der projektname stimmt.

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.
Ich beschreibs mal ausführlicher:
Auf dem PC läuft ein add-in was ich geschrieben habe. Dieses Add-in benötigt verschiedene activeX Komponenten und dlls. Das Ganze funktioniert auch wunderbar, allerdings sind manuelle Einstellungen notwendig. Vor kurzem war das der Fall das ich nicht da war und der PC aufdem das ganze lief "abschmierte" darum muße alles auf einen andern PC aufgespielt und eingerichtet werden, was die Kollegen unternahmen.
Draufkopieren und als add-in hinzufügen ging noch. Aber welche Verweise gebraucht wurden und so.. da mußte ich dann extra hinkommen. Drum bin ich jetzt dabei diese ganzen manuellen Dinge automatisch durchführen zu lassen damit es beim nächsten mal besser geht.

Nun weiter:
mirist klar das ich mit
Application.VBE.VBProjects.Item("Projektname").References.Count
nur die anzahl der referenzen bekomme. der nächste Schritt wäre ja wie geschrieben dan gewesen das ganze in einer schleife durchzugehen udn jede Referenz zu prüfen ob sie die gesuchte ist.
Da die dll nicht registriert werden kann (kommt ne Fehlermeldung) sondern als Verweis eingebunden werden muss hab ich also keine andere Möglichkeit.
Bitte warten ..
Mitglied: misterdemeanor
07.04.2008 um 23:00 Uhr
Hallo miniversum,

also verstehe ich das jetzt richtig? *g

  1. Du hast ein Add-In welches selbst eine Referenz auf eine dll benötigt
  2. Nun willst Du in irgendeiner Arbeitsmappe dieses Add-In verwenden
  3. 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.

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-
Bitte warten ..
Mitglied: miniversum
08.04.2008 um 17:48 Uhr
Danke für die Hilfe.
Inzwischen habe ich das alles nochmal auf einem neuen "nackten" Test-PC neu traufgemacht und dort geht es... Keine ahnugn was die da gemacht hatten als sie es draufgespielt haben.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
gelöst Ganztägier Outlooktermin per VBA aus Excel versenden (8)

Frage von Piotor04 zum Thema Outlook & Mail ...

VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...