Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: miniversum

miniversum (Level 3) - Jetzt verbinden

07.04.2008, aktualisiert 08.04.2008, 27857 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 ..
Ähnliche Inhalte
VB for Applications
Excel VBA Code
gelöst Frage von specialuserVB for Applications2 Kommentare

Hallo zusammen, Hab hier einen Button in einer Excel mit Makros erstellt. Der Button hat die Funktion aus der ...

Microsoft
Mit VBA-Code ein Verzeichnis erstellen
gelöst Frage von DockMaster-deMicrosoft2 Kommentare

Hallo, ich habe mit MS Access 2010 eine Datenbank und ein Frontend. Daten werden über ein Formular eingegeben. Ich ...

Basic
Formeln in VBA Code einfügen
gelöst Frage von Dett18Basic6 Kommentare

Hallo liebe Excel VBA Gemeinde, ich habe hier eine Buchungsdatei, die mit Daten einer Rechnung gefüllt wird. Da ich ...

VB for Applications

Excel VBA Link hinzufügen funktioniert nur, wenn ich im Code einen Haltepunkt setze

gelöst Frage von YotYotVB for Applications4 Kommentare

Moin! Ich habe in Excel 2010 eine Tabelle mit rund 1200 Zeilen (dynamisch), wo in einer Spalte automatisch Hyperlinks ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 2 TagenAusbildung35 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 4 TagenSpeicherkarten5 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 4 TagenSicherheit1 Kommentar

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 5 TagenHardware4 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Passwortwechsel Zeitpunkt festlegen
Frage von Looser27Windows Userverwaltung27 Kommentare

Guten Morgen liebe Kolleginnen und Kollegen, da es eine Userin in meinem Urlaub geschafft hat, sich vom AD vollständig ...

Windows Server
Probleme im AD am Außenstandort
gelöst Frage von emeriksWindows Server19 Kommentare

Hi, wir haben ein Problem mit AD und GPO am Außenstandort und ich stehe momentan mächtig auf dem Schlauch. ...

Windows 10
Windows 10 Spracherkennung - Eure Meinungen?
Frage von honeybeeWindows 1014 Kommentare

Hallo, wollte heute mal aus Neugier die Spracherkennung unter Windows 10 (Version 1803) ausprobieren und war mehr wie enttäuscht. ...

Switche und Hubs
POE-Switche
gelöst Frage von MiStSwitche und Hubs13 Kommentare

Guten Morgen, ich überlege ob ich in unserem Netzwerk die aktuellen Switche (D-LINK DGS-1210-28) durch PoE-Switche ersetzen soll. Der ...