Ich habe ein Programm geschrieben, das Skype ausführt und Nachrichten mit Informationen sendet, wenn es fertig ist. Ich muss eine Referenz für hinzufügen Skype4COM.dll
, um eine Nachricht über Skype zu senden. Wir haben ungefähr ein Dutzend Computer in einem Netzwerk und einen gemeinsam genutzten Dateiserver (unter anderem). Alle anderen Computer müssen dieses Programm ausführen können. Ich hatte gehofft, die Referenz nicht von Hand einrichten zu können. Ich hatte geplant, die Referenz an einem freigegebenen Speicherort abzulegen und programmgesteuert hinzuzufügen, wenn das Programm ausgeführt wurde.
Ich kann anscheinend nicht herausfinden, wie man mit VBA programmgesteuert eine Referenz zu Excel 2007 hinzufügt. Ich weiß, wie es manuell geht: Öffnen VBE --> Tools --> References --> browse --_> File Location and Name
. Aber das ist für meine Zwecke nicht sehr nützlich. Ich weiß, dass es in Access Vb.net Möglichkeiten gibt, dies zu tun, und ähnlicher Code tauchte immer wieder auf, aber ich bin mir nicht sicher, ob ich ihn verstehe oder ob er relevant ist:
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
Bisher muss ich in den vorgestellten Lösungen, um die Referenz programmgesteuert hinzuzufügen, eine Referenz von Hand hinzufügen und das Trust Center ändern - das ist mehr als nur das Hinzufügen der Referenz. Obwohl ich denke, wenn ich die vorgeschlagenen Lösungen durchführe, kann ich zukünftige Referenzen programmgesteuert hinzufügen. Das macht es wahrscheinlich die Mühe wert.
Alle weiteren Gedanken wären toll.
Antworten:
Auslassen
Es gibt zwei Möglichkeiten, Ihren Projekten Referenzen über VBA hinzuzufügen
1) Verwenden der GUID
2) Direkte Referenzierung der DLL.
Lassen Sie mich beide behandeln.
Aber zuerst sind dies 3 Dinge, um die Sie sich kümmern müssen
a) Makros sollten aktiviert sein
b) Stellen Sie in den Sicherheitseinstellungen sicher, dass "Zugriff auf Visual Basic-Projekt vertrauen" aktiviert ist
c) Sie haben manuell einen Verweis auf das Objekt "Microsoft Visual Basic für Anwendungserweiterbarkeit" festgelegt
Weg 1 (mit GUID)
Normalerweise vermeide ich diesen Weg, da ich in der Registrierung nach der GUID suchen muss ... was ich LOL hasse. Mehr zur GUID hier .
Thema: Hinzufügen einer VBA-Referenzbibliothek über Code
Link : http://www.vbaexpress.com/kb/getarticle.php?kb_id=267
Weg 2 (Direkter Verweis auf die DLL)
Dieser Code fügt einen Verweis auf hinzu
Microsoft VBScript Regular Expressions 5.5
Hinweis : Ich habe keine Fehlerbehandlung hinzugefügt. Es wird empfohlen, dass Sie es in Ihrem eigentlichen Code verwenden :)
BEARBEITEN Geschlagen von
mischab1
:)quelle
Dim chkRef As Reference
zuDim chkRef As VBIDE.Reference
{420B2830-E718-11CF-893D-00A0C9054228}
. Sie können andere GUIDs herausfinden, indem Sie sie manuell hinzufügen, dann jeweils durchlaufenRef
ThisWorkbook.VBProject.References
undDebug.Print Ref.Name, Ref.Guid
Es gibt zwei Möglichkeiten, Referenzen mit VBA hinzuzufügen.
.AddFromGuid(Guid, Major, Minor)
und.AddFromFile(Filename)
. Welches am besten ist, hängt davon ab, auf was Sie einen Verweis hinzufügen möchten. Ich verwende es fast immer,.AddFromFile
weil die Dinge, auf die ich verweise, andere Excel VBA-Projekte sind und nicht in der Windows-Registrierung enthalten sind.Der angezeigte Beispielcode fügt einen Verweis auf die Arbeitsmappe hinzu, in der sich der Code befindet. Ich sehe im Allgemeinen keinen Grund dafür, da der Code in 90% der Fälle, bevor Sie den Verweis hinzufügen können, bereits nicht kompiliert werden konnte weil die Referenz fehlt. (Und wenn die Kompilierung nicht fehlgeschlagen ist, verwenden Sie wahrscheinlich die späte Bindung und müssen keine Referenz hinzufügen.)
Wenn Sie Probleme haben, den Code auszuführen, gibt es zwei mögliche Probleme.
Abgesehen davon könnte ich eine genauere Antwort geben, wenn Sie etwas klarer darüber sein können, was Ihre Frage ist oder was Sie versuchen, was nicht funktioniert.
quelle
Durchsuchen Sie die Registrierung nach Guids oder verwenden Sie Pfade. Welche Methode ist am besten geeignet? Wenn das Durchsuchen der Registrierung nicht mehr erforderlich ist, ist es dann nicht die bessere Möglichkeit, Guids zu verwenden? Office wird nicht immer im selben Verzeichnis installiert. Der Installationspfad kann manuell geändert werden. Auch die Versionsnummer ist Teil des Pfades. Ich hätte nie vorhersagen können, dass Microsoft vor der Einführung von 64-Bit-Prozessoren jemals '(x86)' zu 'Programme' hinzufügen würde. Wenn möglich, würde ich versuchen, die Verwendung eines Pfades zu vermeiden.
Der folgende Code leitet sich aus der Antwort von Siddharth Rout ab und bietet eine zusätzliche Funktion zum Auflisten aller Referenzen, die in der aktiven Arbeitsmappe verwendet werden. Was passiert, wenn ich meine Arbeitsmappe in einer späteren Version von Excel öffne? Funktioniert die Arbeitsmappe weiterhin, ohne den VBA-Code anzupassen? Ich habe bereits überprüft, ob die Anleitungen für Office 2003 und 2010 identisch sind. Hoffen wir, dass Microsoft in zukünftigen Versionen keine Richtlinien ändert.
Die Argumente 0,0 (von .AddFromGuid) sollten die neueste Version einer Referenz verwenden (die ich nicht testen konnte).
Was sind deine Gedanken? Natürlich können wir die Zukunft nicht vorhersagen, aber was können wir tun, um unsere Codeversion zu beweisen?
Der obige Code benötigt keinen Verweis mehr auf das Objekt "Microsoft Visual Basic für Anwendungserweiterbarkeit".
quelle
Hier erfahren Sie, wie Sie die Guid programmgesteuert abrufen können! Sie können diese Guids / Dateipfade mit der obigen Antwort verwenden, um die Referenz hinzuzufügen!
Referenz: http://www.vbaexpress.com/kb/getarticle.php?kb_id=278
Hier ist derselbe Code, der jedoch auf dem Terminal gedruckt wird, wenn Sie der Ausgabe kein Arbeitsblatt zuweisen möchten.
quelle