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

Frage Entwicklung VB for Applications

Mitglied: miniversum

miniversum (Level 3) - Jetzt verbinden

07.04.2008, aktualisiert 08.04.2008, 26874 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 ...

Microsoft Office
Kreuztabelle Access + VBA Code
Frage von Dr.CornwallisMicrosoft Office7 Kommentare

Hallo zusammen, ich habe eine Kreuztabelle aus einer Query erzeugt, aus dieser entsteht wiederum ein Bericht, nun habe ich ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless9 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...