Verweise mittels VBA
Geizhals » Forum » Programmierung » Verweise mittels VBA (8 Beiträge, 158 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Verweise mittels VBA
14.09.2009, 10:55:50
Ich habe eine Excel-Datei mit einigen Makros.
Da dieses Excel an eine große Zahl von Personen geschickt wird, möchte ich mittels VBA schon sichersteleln, dass gewisse Verweise gesetzt sind, dmit es funktioniert.

Ich hab jetzt mittels google schon etliche Seiten gefunden, wo das Thema behandelt wird.
Ich z.B. schon eine Funktion geschrieben, die die vorhandenenVerweise sichert:

Public Sub VerweiseSichern(Optional DateiName)
Dim F As Integer
    Worksheets("Parameter").Activate
    F = 1
    For i = 1 To ActiveWorkbook.VBProject.References.Count
        Cells(F, 3) = ActiveWorkbook.VBProject.References(i).Name
        Cells(F, 4) = ActiveWorkbook.VBProject.References(i).GUID
        Cells(F, 5) = ActiveWorkbook.VBProject.References(i).Major
        Cells(F, 6) = ActiveWorkbook.VBProject.References(i).Minor
        
        F = F + 1
    Next i
End Sub


Nun wollt eich mittels AddFromGuid dieVerweise aktivieren:
Public Sub VerweiseHerstellen(Optional DateiName)
Dim F As Integer
    Worksheets("Parameter").Activate
    F = 1
    For i = 1 To 6
        Application.VBE.ActiveVBProject.References.AddFromGuid Cells(i, 4), Cells(i, 5), Cells(i, 6)
    Next i
End Sub

Leider bekomme ich da immer eine Fehlermeldung Objektbibliothek nicht registriert.
Habs auch schon mit ....  ThisWorkbook.VBProject.References.AddFromGuid ...
probiert.

Hab das ganze aufgrund folgender Seiten aufgebaut:
http://www.ms-office-forum.net/forum/archive/index.php/index.php?t-241513.html
und
http://www.excelthoughts.com/2005/06/removing-broken-references-and-adding.html

Was muss ich da noch berücksichtigen, dass aber nirgends steht?

Danke

PS: Ich verwende OFfice 2003

emefge
Infosauger
_____________________________________________________________________________

Weil die Lichtgeschwindigkeit höher als die Schallgeschwindigkeit ist, hält man viele Leute für helle Köpfe bis man sie reden hört.

"Bekomme ich bei Ihnen so einen ganz kleinen Lötkolben zum CPU reparieren?"

Wieso Realität? Ich hab doch verdammt noch mal was Besseres zu tun!



14.09.2009, 10:57 Uhr - Editiert von Infosauger, alte Version: hier
Antworten PM Übersicht Chronologisch
 
Melden nicht möglich
.
Re: Verweise mittels VBA
14.09.2009, 20:57:31
Also die Refefenzen sind doch Teil der Arbeitsmappe (Workbook) und werden mit dieser mitgespeichert. Daher kann man eine Excel-datei mit Makros in der Regel auch an Kollegen weitergeben, ohne dass man sich um deren Verweise kümmern muss.

ABER: Das ganze funktioniert natürlich nur dann, wenn auf dem Zielgerät die den Referenzen zugrundeliegenden Anwendungskomponenten auch installiert sind bzw. die benötigten COM-Objekte registriert sind. Wenn dies nicht der Fall ist bzw. eventuell Versionskonflikte vorliegen, dann funktioniert es nicht (weder mit early- noch mit late-binding).

Kleines Beispiel:

Ihr habt In Eurer Firma auf allen Geräten Lotus Notes installiert. Du schreibst nun ein kleines Excel-Makro, das auf Basis von Daten auf einem Excel-Sheet automatisiert Mails versendet. Während der Durchführung Deines Excel-Makros arbeitet aber nicht nur Excel sondern im Hintergrund auch diverse Lotus-Notes-Programmkomponenten.

In Deinem Makro hast Du entweder eine entsprechende Referenz auf die "Lotus Notes Automation Classes" (bzw. Domino-Irgendwas) gesetzt oder Du verwendest Late-Binding (CreateObject usw.). In beiden Fällen solte Deine Excel-Datei inklusive Makro auf Geräten von Kollegen die ebenfalls Notes in kompatibler Version haben eigentlich problemlos laufen ohne an den Verweisen herumfummeln zu müssen.

Gibst Du die Datei aber an einen Kollegen, der kein Notes auf seinem Rechner installiert hat, dann gibt es natürlich Ärger. Es genügt dann aber auch nicht, einfach die Verweise per Skript hineinzumanipulieren. Die Notes-Komponenten sind dann ja trotzdem noch nicht vorhanden. Daher erhältst Du dann so Meldungen wie "Objektbibliothek nicht registriert".

d.h. Bei Unsicherheit über die Software-Ausstattung der Zielgeräte müsstest Du eigentlich die korrekte Installation der von Deinem Makro benötigten Komponenten prüfen und bei Bedarf z.B. eine silient Installation anstossen bzw. eine Fehlermeldung ausgeben.

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
...
Re(3): Verweise mittels VBA
17.09.2009, 19:26:44
Hmm, also dann kann ich mir eigentlich nur eine defekte Installation der MS-Forms-Komponente vorstellen. Google wirft zum Thema "Microsoft Forms" ja einiges an Problemen aus, die in diese Richtung gehen.

z.B.
http://www.pc-special.net/windows-xp-f5/fehlermeldung-microsoft-forms-t20416.html
http://www.digital-inn.de/ms-excel/20802-microsoft-forms-probleme.html

Interessant wären vielleicht folgende Fragen:
a) Tritt das Problem auf allen Geräten auf oder nur auf einzelnen?
b) Tritt auf einem Problemgerät das Problem nur in Zusammenhang mit MS-Forms auf oder auch mit anderen Referenzen (z.B. "Microsoft Scripting Runtime")?
c) Kann man auf einem Problemgerät händisch diese Referenz setzen oder erhält man dabei auch Fehler?

Falls da wirklich etwas kaputt ist, dann müsste das natürlich erst repariert werden. Falls aber alles okay ist, dann sollte das imho auch so unproblematisch laufen wie ich in meinem obigen Posting erwähnt habe. Ich bin leider momentan technisch ein bisschen eingeschränkt und kann das konkrete Verhalten daher in den nächsten Tagen auch nicht experimentell ermitteln.

Wenn es jedenfalls wirklich grundsätzlich so wäre, dass man für "portable" Excel-Dateien die benötigten Referenzen per Code am Zielgerät setzen muss, dann müssten entsprechende Code-Konstrukte (ähnlich den Zeilen in Deinem Eröffnungs-Posting) eigentlich in fast allen Excel-VBA-Skripts enthalten sein.


Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung