Öffnen / Aktivieren von Word-Dokumenten in einem VBA-Makro

9

Ich hoffe, dass ein VB / VBA-Experte mir helfen kann. Folgendes berücksichtigen:     Der Benutzer öffnet ein Dokument in Word 2003, und innerhalb des Makros Normal.dot AutoOpen betrachten wir das aktuelle Dokument. Wenn es durch Klicken auf einen Link auf einer Webseite geöffnet wurde und bestimmte anwendungsspezifische Kriterien erfüllt, schließen Sie die gestreamte "Kopie" und das Quelldokument öffnen (auf einem freigegebenen Laufwerk gefunden, auf das der Benutzer zugreifen kann):

%Vor%

Mein Gedanke war, dass ich Activate aufrufen musste, um sicherzustellen, dass das Originaldokument das ActiveDocument war, aber ich bekomme einen 4160 'Bad file name' Fehler beim .Activate Aufruf. Wenn ich den Aufruf von .Activate auskommentiere, scheint ActiveDocument auf das origDoc-Dokument eingestellt zu sein, selbst wenn bereits andere Dokumente geöffnet waren (ich bin mir nicht sicher, wie die Dokumentensammlung verwaltet wird und wie Word bestimmt was als nächstes ActiveDocument wäre, wenn du das aktuelle ActiveDocument programmatisch schließt)

Wird also beim Aufruf von .Open in einem Dokument das Dokument explizit als ActiveDocument festgelegt? Führt der Aufruf von .Activate für das bereits aktive Dokument zu einem Fehler?

Ich konnte nicht wirklich viel Dokumentation darüber finden, also danke im Voraus für irgendwelche Vorschläge und Einblicke!

    
echoesofspring 01.04.2009, 17:10
quelle

4 Antworten

4

Die einfache Antwort ist ja. Indem Sie das Dokument mit Ihrem Code öffnen, machen Sie es zum aktiven Dokument, das Sie dann in der nächsten Zeile schließen und versuchen, es im nächsten zu aktivieren, was fehlschlägt, weil das Dokument nicht mehr geöffnet ist. VBA scheint im Allgemeinen so zu funktionieren.

Es ist wichtig, mit ActiveDocument vorsichtig zu sein, weil es nicht immer selbstverständlich ist, welche Aktionen im Code oder anderswo ein Dokument "aktiv" machen (ich habe keinen Beweis, aber sogar ein Autosave könnte es tun). Wenn Sie Zweifel haben, sollten Sie besser auf ein Dokument in der Dokumentensammlung verweisen, obwohl dies auch zu Fehlern führen kann, wenn das Dokument nicht mehr geöffnet ist. Sie müssen eventuell auf die Sammlung zurückgreifen, um sicherzugehen, dass das Dokument korrekt ist. in der Tat, offen. Ich stoße viel mit Excel VBA, und Word VBA scheint in dieser Hinsicht identisch funktionieren.

Außerdem ist VBA beim Freigeben von Anwendungsobjekten flockig. Wenn Sie nicht aufpassen, erhalten Sie mehrere WINWORD-Prozesse, die im Task-Manager angezeigt werden können, unabhängig davon, ob Sie sie im Code schließen oder beenden. Der Code, den ich gefunden habe, um dies zu umgehen, besteht darin, den Prozess der Auswahl von END PROCESS im Taskmanager zu simulieren. Es funktioniert, aber es sollte eine bessere Lösung geben.

    
akw 04.12.2013 16:08
quelle
1

Sie haben hier einen Fehler:

%Vor%

Sollte Dokument s sein.

Ja, Sie können das aktive Dokument aktivieren. Nichts passiert dann.

Ja, das geöffnete Dokument wird aktiv. Wenn Sie nicht sicher sind, verwenden Sie Documents.Open(origDoc).Activate .

    
GSerg 01.04.2009 18:36
quelle
1

Sie sollten das ActiveDocument -Objekt nicht an erster Stelle verwenden, es sei denn, es ist absolut unzuverlässig. Der bevorzugte Ansatz wäre dies:

%Vor%     
guillermooo 20.05.2009 09:50
quelle
-1

Achten Sie darauf, dass eine Reihe von Problemen auftreten können:

  1. Wenn Sie das Dokument nach dem Schließen erneut öffnen möchten einmal .... Word / Windows nicht     "Verlasse" den Dateinamen und du erhältst eine ' Datei beschäftigt ' Nachricht oder eine Nachricht über 'erstellen      eine temporäre Kopie '.     Um mit diesem Problem fertig zu werden, musste ich ein ausgeklügeltes System zum Erstellen / Speichern und Entwickeln entwickeln     Aufräumen mehrerer Versionen anderer Dokumente, die ich in meinen Word-Anwendungen öffne / manipuliere     wegen dieser Designfehler in Office Open / Close / Save Methoden.

  2. Verwenden Sie die ReadOnlyRecommended -Eigenschaft, die mit der Option False festgelegt wurde .Open Methode

  3. kann auf das Dokumentobjekt (oben genanntes Dokument) verweisen ernste Fehler, wenn Sie nicht zusichern     dass das doc -Objekt noch existiert, bevor Sie es versuchen und manipulieren. Denk immer daran     Word ist eine "offene" Anwendungsplattform .... und der Benutzer kann Dinge tun, die Sie nicht gezählt haben     auf ... in der letzten Millisekunde oder so. Dieser Rat gilt für jedes andere Objekt oder Eigentum, das Sie verwenden können     möchte in Word manipulieren.

  4. wenn Sie die Documents-Sammlung (oder eine andere) ohne bearbeiten Sicherstellen, dass das Dokument oder ein anderes Objekt immer noch da ist und gültig vor dem Löschen oder Verschieben innerhalb der Sammlung Erhalten Sie ' Stapelüberlauf ' Fehler. Vor allem, wenn Sie es versuchen und Schließen / Löschen von Objekten in einer Sammlung, beginnend mit .item(1) . Sie muss Elemente in einer Sammlung von der letzten löschen und merken dass sich die Sammlungsregeln und Zeiger bei jedem Wechsel ändern .add / .remove / .close Elemente von ihnen.

user2649016 03.08.2013 16:47
quelle

Tags und Links