Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Worddateien aus verzeichnis drucken - VBA





Frage

Hallo zusammen, ich möchte aus Excel heraus alle Worddateien drucken, die in einem bestimmten Verzeichnis liegen. Dazu habe ich folgenden Code im I-net gefunden: Sub AlleWordDateienDrucken() With Application.FileSearch .NewSearch .Filename = "*.doc" .LookIn = "c:\test\" .SearchSubFolders = False If .Execute() > 0 Then ReDim strdateien(.FoundFiles.Count) ReDim strZugehOrdner(.FoundFiles.Count) 'Durchläuft alle Dateien, die in dem obigen Verzeichnis vorhanden sind. For i = 1 To .FoundFiles.Count strdateien(i) = .FoundFiles(i) strZugehOrdner(i) = .FoundFiles(i) Do strdateien(i) = Right(strdateien(i), (Len(strdateien(i)) - InStr(strdateien(i), "\"))) Loop While InStr(strdateien(i), "\") > 0 Documents.Open Filename:=strZugehOrdner(i) Application.PrintOut ActiveDocument.Saved = True 'verhindert, dass Speichernachfrage wegen Feldaktualisierung kommt ActiveDocument.Close 'schließt das Dokument nach dem Drucken Next i End If End With End Sub Leider kommt es bei mir zu dem Laufzeitfehler 424 - Object nicht gefunden.... und zwar hier "Documents.Open Filename:=strZugehOrdner(i)" Leider kann ich den Fehler nicht finden....kann mir einer von Euch helfen? Mit freundlichen Grüßen Oliver

Antwort 1 von minibrain

Hi Oliver,

prinzipiell sollte Dein VBA-Skript unter Word funktionieren.
Unter Excel allerdings musst Du Dein Skript noch anpassen.

Du musst Word über die Automatisierungsschnittstelle ansprechen. Im nachfolgenden korrigierten Code habe ich dies über folgende Zeilen gemacht:
Dim WordApp As Object
Set WordApp = CreateObject("Word.Application")

Als Tipp würde ich Dir für die Zukunft die Verwendung von
Option Explicit
ganz oben in jeder VBA-Datei mitgeben. Dann erhältst Du beim Kompilieren bereits einen Hinweis darauf, welche Objekte nicht initialisiert sind. Aber hier nun der korrigierte Code:

Sub AlleWordDateienDrucken()

Dim WordApp As Object
Set WordApp = CreateObject("Word.Application")

With Application.FileSearch
.NewSearch
.Filename = "*.doc"
.LookIn = "e:\test\"
.SearchSubFolders = False
If .Execute() > 0 Then
ReDim strdateien(.FoundFiles.Count)
ReDim strZugehOrdner(.FoundFiles.Count)

'Durchläuft alle Dateien, die in dem obigen Verzeichnis vorhanden sind.
Dim i As Integer

For i = 1 To .FoundFiles.Count

strdateien(i) = .FoundFiles(i)
strZugehOrdner(i) = .FoundFiles(i)
Do
strdateien(i) = Right(strdateien(i), (Len(strdateien(i)) - InStr(strdateien(i), "\")))
Loop While InStr(strdateien(i), "\") > 0

WordApp.Documents.Open Filename:=strZugehOrdner(i)
WordApp.Application.PrintOut
WordApp.ActiveDocument.Saved = True 'verhindert, dass Speichernachfrage wegen Feldaktualisierung kommt
WordApp.ActiveDocument.Close 'schließt das Dokument nach dem Drucken

Next i
End If
End With
End Sub

Antwort 2 von brumm_49

Hallo minibrain,

vielen Dank für Deine Mühe...es fúnzt.

Deinen Tipp mit werde ich in Zukunft beherzigen (Option Explicit). Das erspart doch allerlei an "Kopfschmerzen", wenn man vorher schon sieht, welche Objecte noch nicht initialisiert sind.

Einen schönen Restsonntag wünsche ich Dir.

Mit freundlichen Grüßen
Oliver

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: