Ich entschuldige mich im Voraus für die Newbie Frage - die meisten meiner VBA-Erfahrung ist in Excel oder Word zu Excel. In diesem Fall gehe ich von Excel zu Word. Ich versuche, einige Daten aus einigen Word-Formularen zu erfassen und in einer Excel-Datei zu speichern.Excel VBA zum Öffnen mehrerer Word-Dateien in einer Schleife
Gerade jetzt, mein Code funktioniert für das erste Dokument in dem Ordner, aber nach, dass er die Schläuche nach oben mit einem Automatisierungsfehler „der Server eine Ausnahme ausgelöst hat“ (Goo!)
Hier ist mein Code:
Dim objWordApp As Object
strCurFileName = Dir(strFilePath)
Set objWordApp = CreateObject("word.application")
objWordApp.Visible = True
Do While strCurFileName <> ""
objWordApp.documents.Open strFilePath & strCurFileName
objWordApp.activedocument.Unprotect password:="testcode"
{EXCEL PROCESSING HERE}
strCurFileName = Dir
objWordApp.activedocument.Close 0
Loop
objWordApp.Quit
Set objWordApp = Nothing
Ich stelle fest, dass der Code funktioniert, wenn ich die App beenden und das Objekt = nichts innerhalb der Schleife festlegen. Aber so, wie es jetzt ist, bombardiert es die zweite Datei im Ordner in der Zeile "objWordApp.documents.Open strFilePath & strCurFileName".
Kann ich Word-Dokumente in einer Schleife öffnen und schließen, ohne das Objekt immer wieder neu erstellen zu müssen? Es ist wirklich langsam, wenn ich es so mache.
Danke für die Hilfe - ich mag Ihren Weg viel besser. Leider bekomme ich das gleiche Ergebnis. Das Programm stirbt das zweite Mal durch die Schleife auf der Linie, die lautet:
Set objWordDoc = objWordApp.Documents.Open(objFile.Path)
Der Fehler, die ich bekommen ist:
Laufzeitfehler -2147417851 (80010105) Automation Error der Server hat eine Ausnahme.
Ich habe versucht, Ihren Code auf normalen Word-Dokumenten (nicht diejenigen, die ich verarbeite) und es hat gut funktioniert. Die Dokumente, die ich ausführe, haben Formularfelder und Makros - nicht sicher, ob das einen Unterschied macht. Ich habe die Makrosicherheit in Word auf "niedrig" und "sehr hoch" festgelegt, um sicherzustellen, dass die anderen Makros nicht stören.
Ich kann es einfach nicht herausfinden, warum es für das erste Dokument funktioniert und dann nicht das nächste. Ich habe sogar den ersten Arzt geklont, aber das machte keinen Unterschied.
Immer noch kein Glück. Das Einzige, was ich zur Arbeit bringen kann, ist, wenn ich die Objekte komplett lösche und sie jedes Mal neu erstelle, wenn ich eine Datei öffnen möchte.
Set objFolder = FSO.GetFolder(strFilePath)
For Each objFile In objFolder.Files
Set objWordApp = CreateObject("word.application")
objWordApp.Visible = True
If Right(objFile.Name, 4) = ".doc" Then
Set objWordDoc = objWordApp.documents.Open(Filename:=objFile.Path, ConfirmConversions:=False, _
ReadOnly:=True, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto)
[Process DOC]
objWordDoc.Close 0, 1
End If
Set objWordDoc = Nothing
objWordApp.Quit
Set objWordApp = Nothing
Next
Ich bin mir nicht sicher, warum das funktioniert und warum es nicht anders geht. Wenn ich diesen Weg gehen muss, kann ich - es scheint nur sehr langsam und ineffizient. Ist das eine schlechte Idee?
Was meinst du mit "Bomben"? irgendeine Fehlermeldung? – shahkalpesh