Frage

Ich habe eine Access-vba-Anwendung, die auch Word-vba verwendet.Während die Anwendung auf meinem lokalen Computer ausgeführt wird, funktioniert sie einwandfrei.Sobald es auf andere verschoben wurde (dieselben Versionen von Access und Word), stürzt es ab, wenn es um den VBA-Teil von Word geht.Befehle wie Dokument.öffnen oder .saveas2 schlägt fehl: Method 'SaveAs2' of object failed beispielsweise.

Mir ist auch aufgefallen, dass Bibliotheken, auf die ich in der Anwendung verwiesen habe, von jedem anderen Endbenutzer benötigt werden.Ich bin es gewohnt, nur mit den Bibliotheken zu kompilieren und ab diesem Zeitpunkt sind sie immer in der enthalten.Glas/.exe / etc, aber es scheint, wenn Sie die Anwendung auf die Computer anderer verschieben, wird immer versucht, sie neu zu kompilieren?

Ich kenne mich mit VBA nicht gut aus, daher spekuliere ich, dass meine fehlgeschlagenen Word-VBA-Funktionen auf einen Referenzierungsfehler zurückzuführen sind, irgendwelche anderen Ideen?

War es hilfreich?

Lösung

Die "Bibliotheken", auf die VBA verweisen kann, sind tatsächlich COM-Objekte, normalerweise als DLL-Dateien verpackt.Sie sind Objekte, die zur Laufzeit dynamisch instanziiert werden (falls dies nicht bereits der Fall ist), wenn sie angefordert werden.Sie werden von Windows in den Speicher geladen und Ihr Programm verwendet den COM-Standard, um mit ihnen zu interagieren, Methoden aufzurufen und Eigenschaften abzurufen oder festzulegen (Interprozesskommunikation).Es gibt im Allgemeinen zwei Möglichkeiten, mit ihnen zu interagieren:frühe Bindung und späte Bindung.

Bei der frühen Bindung fügen Sie einen Verweis auf die Bibliothek hinzu, während Sie noch Code schreiben, wodurch die VBA-IDE die automatische Vervollständigung und einige Fehlerprüfungen zur Kompilierungszeit bereitstellen kann.Sie instanziieren Objekte mit dem Schlüsselwort "new" und indem Sie den Objektnamen direkt eingeben.Für eine frühe Bindung müssen Sie jedoch eine bestimmte DLL und möglicherweise eine bestimmte Version der Schnittstelle auswählen.Dies kann zu Problemen führen, wenn Sie auf eine bestimmte Schnittstellenversion verweisen, die einer Ihrer Benutzer nicht hat.

Bei der späten Bindung instanziieren Sie Objekte mit CreateObject oder GetObject und fordern sie namentlich von Windows an.Windows wird suchen Sie den Namen nach oben und geben Sie einen Verweis auf das Objekt zurück.Die Variablen in Ihrem Code sind einfach Objekte und das Aufrufen von Methoden ist etwas gefährlich, da der Compiler es Ihnen ermöglicht, einen beliebigen Methodennamen einzugeben und keine Warnungen zur Kompilierungszeit bereitstellt.Dies hat den Vorteil, dass der Code unabhängig von der Version des Benutzers funktioniert, solange Sie gut etablierte Methoden aufrufen und nichts Neues oder Veraltetes.

Was den Fehler betrifft, den Sie erhalten, möchten Sie möglicherweise die Version von Office auf den Benutzercomputern überprüfen - SaveAs2 wurde in Office 2010 hinzugefügt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top