Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Probleme mit dynamischem Laden von Verweisen

Probleme mit dynamischem Laden von Verweisen
23.03.2015 14:43:34
Verweisen
Hallo,
leider ist meine VBA-Erfahrung nicht so groß, deshalb stehe ich vor einem Problem:
Ich habe eine TLB-Datei die ich als Verweis in mein Makro einbinde. Dann habe ich eine Public-Variable (mit WithEvents) vom Typ einer Klasse aus dem TLB-Verweis.
Nun da ich nicht weiß, wo die TLB auf dem System liegt, habe ich mir den Pfad ausgelesen und möchte diese gerne dynamisch einbinden. Das soll angeblich mit Application.VBE.ActiveVBProject.References und AddFromFile "PFAD" funktionieren.
Leider komme ich bis dahin nicht, da meine globale Variable die Klasse nicht kennt, da die in dem TLB-Verweis implementiert ist.
Der Fehler kommt direkt beim Start bei der globalen Variable. Ich möchte auch, dass das Makro autom. startet, deshalb ist es im Event Workbook_Open.

Public WithEvents eOClass As cExcelWrapper 'Variant?
Private Sub Workbook_Open()
Dim sProgPath As String
sProgPath = "PFAD ZU DER TLB" 'dynamisch ausgelsen
'erste Gehversuche ein Verweis einzubinden
Dim bibl As Object
Set bibl = Application.VBE.ActiveVBProject.References
bilb.AddFromFile sProgPath
End Sub

Meine Frage, was soll ich machen, dass das klappt? Das blöde ist, dass ich die Events brauche, die aus der Klasse kommen.
Ich hoffe ich habe es einfach ausgedrückt.
Danke schon mal!
Gruß
Lukas

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit dynamischem Laden von Verweisen
23.03.2015 15:35:48
Verweisen
Hallo,
warum packst du das Ganze nicht in eine eigene Klasse die erst initialisiert wird nachdem der Verweis geladen wurde? Wenn du die Klasse im Workbook-Open-Event initialisieren musst, dann pack diese Routine in eine Prozedur in einem Standardmodul und rufe diese mit der OnTime-Methode entkoppelt vom Open-Event auf.
Gruß
Nepumuk

AW: Probleme mit dynamischem Laden von Verweisen
23.03.2015 16:24:26
Verweisen
Hallo Nepumuk,
meinst du das so, dass ich diese Public-Variable in eine eigene Klasse packen soll und diese erst initialisiere, nach dem die Bibliothek geladen wurde?
Warum die OnTime-Methode?
Ich habe testweise das mit der Klasse ausprobiert, nur die halt im Workbook_Open initialisiert. Die Com-Klasse aus der TLB muss ich aber global in der neuen Klasse deklarieren und dadurch komme ich nicht mal in das Workbook-Open-Event rein, es kommt direkt "Benutzerdefinierter Typ nicht definiert".
Sorry wenn ich das nicht alles sofort verstehe, ich habe zuletzt im Jahr 2006 mit VB und VBA was gemacht, bin also bisschen eingerostet.
Gruß
Lukas

Anzeige
AW: Probleme mit dynamischem Laden von Verweisen
23.03.2015 16:31:34
Verweisen
Hallo,
OnTime-Methode zum entkoppeln der Prozeduren. Excel kompiliert beim Öffnen der Mappe alles was irgendwie zusammenhängt. Call ist so ein Zusammenhang. Sprich das komplette Modul in der sich eine Prozedur befindet die du im Open-Event per Call aufrufst wird kompiliert.
Jetzt klarer?
Gruß
Nepumuk

AW: Probleme mit dynamischem Laden von Verweisen
24.03.2015 10:13:31
Verweisen
Hallo Nepumuk,
es hat geklappt und ich habe es verstanden, vielen Dank für die Hilfe!
Gruß
Lukas

AW: Probleme mit dynamischem Laden von Verweisen
24.03.2015 12:34:49
Verweisen
Hallo Nepumuk,
das Problem wäre behoben, wenn da nicht das nächste wäre :(
Also folgendes noch mal kurz zusammengefasst:
Ich habe eine TLB-Datei, in dieser befindet sich eine Klasse (cTLB) mit einem Event. Wenn ich die Excel-Datei öffne, kann es sein, dass das Event erst in x Min. aufgerufen wird.
Nun zur meiner derzeitigen Vorgehensweise:
Das Event Workbook_Open lädt mir die TLB-Datei mit meiner cTLB-Klasse. Anschließend rufe ich das OnTime auf.
Beim OnTime rufe ich eine Funktion in einem Modul auf, dass mir eine Klasse (cModul) deklariert und initialisiert. Die Klasse cModul beinhaltet eine Instanz von cTLB mit meinem Event.
Anschließend wird die Funktion im Modul verlassen und die cModul und die darin befindliche cTLB-Klasse sind dann logischer Weise leer. So mit ist das Event auch weg.
Also kam ich auf die "geniale" Idee die cModul-Klasse im Modul als global zu definieren. Aber wie du schon in deinem 2. post gesagt hast, durchläuft VBA ja alles einmal durch und findet auch meine globale cModul-Klasse. In der sagt der dann, dass cTLB nicht vorhanden ist (der Verweis ist ja noch nicht da).
Jetzt bin ich irgendwie weiter, aber doch wieder nicht und wieß nicht mehr weiter.
Hast du noch eine Idee? Oder habe ich was missverstanden?
Gruß
Lukas

Anzeige
AW: Probleme mit dynamischem Laden von Verweisen
24.03.2015 12:50:15
Verweisen
Hallo,
du kannst doch die Variable welche die Klasse beinhaltet als lokale Variable (Private) deklarieren.
Gruß
Nepumuk

AW: Probleme mit dynamischem Laden von Verweisen
24.03.2015 15:36:38
Verweisen
Hallo,
nachdem mein Projekt plötzlich kaputt war, läuft es wieder.
Nun zum Problem:
Ich habe sämtliche Variablen auf Private, nichts ist Public. Es kommt zu der Fehlermeldung "Benutzerdefinierter Typ nicht definiert". Markiert dabei die COM-Klasse deren TLB ich dynamisch lade. Der Debugger steht auf dem Aufruf des Events Workbook_Open.
Das heißt also er springt dort rein, obwohl ich die OnTime-Methode verwende.
Muss ich überhaupt anfangs einen Typen angeben? Wäre ggf. ein Object besser? Nur was ist dann mit den Events die aus der TLB-Klasse kommen?
Gruß
Lukas

Anzeige
AW: Probleme mit dynamischem Laden von Verweisen
24.03.2015 16:42:28
Verweisen
Hallo,
ohne den relevanten Code stochere ich da im Nebel. Lade mal eine Mappe mit genau diesen Codeteilen hoch.
Gruß
Nepumuk

AW: Probleme mit dynamischem Laden von Verweisen
25.03.2015 09:03:07
Verweisen
Moin,
ich habe jetzt eine kleine COM-/TLB-Datei und eine neue Excel-Mappe erstellt, die eine "Hello World"-Meldung ausgibt. Ist im Grunde genommen das selbe was ich z. Z. mache, nur auf das Minimum reduziert. Events in der TLB sind nicht vorhanden. Kann ich aber zum testen einbauen.
Hier ist die Excel-Mappe, die TLB und die DLL. Kannst natürlich auch einen anderen Verweis nehmen.
https://www.herber.de/bbs/user/96619.zip
Vielen Dank shcon mal!!!
Gruß
Lukas

Anzeige
AW: Probleme mit dynamischem Laden von Verweisen
25.03.2015 17:17:54
Verweisen
Hallo,
du musst die Klassenvariable cTLBClass als undefiniertes Objekt deklarieren.
Private cTLBClass As Object ' aaofficeCom.cExcelCom

Zum Editieren des Codes kannst du sie ja umdeklarieren.
Gruß
Nepumuk

AW: Probleme mit dynamischem Laden von Verweisen
25.03.2015 17:22:28
Verweisen
Hallo,
Scheibenkleister das ist ja eine Event-Klasse. Also, Kommando zurück. Da fällt mir nur eines dazu ein:
Die Klasse in ein Addin und das Addin erst laden nachdem der Verweis gesetzt wurde. Das Addin muss wiederum einen Verweis auf die Mappe haben damit die TLB der Mappe im Addin genutzt werden kann.
Gruß
Nepumuk

Anzeige
AW: Probleme mit dynamischem Laden von Verweisen
25.03.2015 17:46:39
Verweisen
Hallo,
danke für die Mühe und den Tipp, ich werde es morgen mal testen.
Gruß
Lukas

AW: Probleme mit dynamischem Laden von Verweisen
27.03.2015 11:01:05
Verweisen
Hallo Nepumuk,
ich habe noch eine kleine Frage zu dem Beispiel das ich dir geschickt habe.
Wie hast du die TLB/DLL registriert? Ich möchte das kleine VBA-Beispiel auf einem anderen Rechner testen (Win 7 32 Bit), kriege aber immer wieder den "Laufzeitfehler "-2147..." Automatisierungsfehler, Das System kann die angegebene Datei nicht finden". Auf meinem Rechner (Win 7 64 Bit) klappt das ja, da das Visual Studio die Registrierung vornimmt. DLL ist auch keine 64-Bit-Library. Ich muss wohl irgendwas falsch machen.
Ich habe die TLB mit regtlibv12 und die DLL mit regasm (beides .NET 4) registriert. Die DLL ist aber eine .NET 2.0, aber das dürfte wahrscheinlich keine Rolle spielen.
Danke!
Gruß
Lukas
PS: Wäre das eigentlich nicht ein neuer Thread?

Anzeige
AW: Probleme mit dynamischem Laden von Verweisen
27.03.2015 14:52:04
Verweisen
Ok, hat sich erledigt. Es fehlte noch das /codebase bei mir.
Danke für alles!!!
Lukas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige