News

FAQ Word – Mehrere Dokumente mit wenigen Mausklicks ausdrucken

Category:

FAQ, Word

0

Problem

Es gibt immer wieder Situationen, in denen Sie alle in einem Verzeichnis vorhandenen Word-Dokumente ausdrucken möchten. Sei es, um beispielsweise Kopien aller Rechnungen an einen bestimmten Kunden oder mehrere, zu einer Dokumentation gehörende Dokumente in einem Durchgang auszugeben.

Sie können diese Aufgabe über das Dialogfeld Datei-Öffnen oder den Explorer von Windows erledigen, aber wir möchten Ihnen ein kleines Makro vorstellen, mit dem Sie in Zukunft wesentlich schneller zum Ziel kommen werden. Geben Sie dazu das folgende Listing in ein neues Modul der Dokumentvorlage NORMAL.DOT ein:

Lösung

Option Explicit
Private Type BROWSEINFO
hwndOwner As Long
pidlRoot As Long
lpszDisplayName As String
lpszTitle As String
ulFlags As Long
BFFCALLBACK As Long
LPARAM As Long
iImage As Integer
End Type
Private Declare Function SHBrowseForFolder Lib _
„shell32.dll“ (FolderStruct As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList _
Lib „shell32.dll“ (ByVal LPCITEMIDLIST As Long, _
ByVal lpStr As String) As Long
Private Const OFN_ALLOWMULTISELECT = &H200
Private Const OFN_CREATEPROMPT = &H2000
Private Const OFN_ENABLEHOOK = &H20
Private Const OFN_ENABLETEMPLATE = &H40
Private Const OFN_ENABLETEMPLATEHANDLE = &H80
Private Const OFN_EXPLORER = &H80000
Private Const OFN_EXTENSIONDIFFERENT = &H400
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_LONGNAMES = &H200000
Private Const OFN_NOCHANGEDIR = &H8
Private Const OFN_NODEREFERENCELINKS = &H100000
Private Const OFN_NOLONGNAMES = &H40000
Private Const OFN_NONETWORKBUTTON = &H20000
Private Const OFN_NOREADONLYRETURN = &H8000
Private Const OFN_NOTESTFILECREATE = &H10000
Private Const OFN_NOVALIDATE = &H100
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_READONLY = &H1
Private Const OFN_SHAREAWARE = &H4000
Private Const OFN_SHAREFALLTHROUGH = 2
Private Const OFN_SHARENOWARN = 1
Private Const OFN_SHAREWARN = 0
Private Const OFN_SHOWHELP = &H10
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Const BIF_DONTGOBELOWDOMAIN = &H2
Private Const BIF_STATUSTEXT = &H4
Private Const BIF_RETURNFSANCESTORS = &H8
Private Const BIF_BROWSEFORCOMPUTER = &H1000
Private Const BIF_BROWSEFORPRINTER = &H2000
Private Const BIF_BROWSEINCLUDEFILES = &H4000

Function AddSlash$(aPath$)
AddSlash = aPath
If Trim$(aPath) = „“ Then Exit Function
If Right$(aPath, 1) = „\“ Then Exit Function
AddSlash = aPath + „\“
End Function

Sub procVerzeichnisDrucken()
Dim strPath As String
Dim strDOCName As String
Dim dlg As Dialog
Set dlg = Dialogs(wdDialogToolsOptionsFileLocations)
With dlg
.Path = „DOC-Path“
.Update
strPath = .Setting
End With
strPath = OpenFolder(„Verzeichnis drucken:“)
If strPath = „“ Then Exit Sub
strPath = AddSlash(strPath)
strDOCName = Dir$(strPath & „*.doc“)
On Error Resume Next
While strDOCName <> „“
DoEvents
Err = 0
Application.PrintOut FileName:=strPath & strDOCName
If Err <> 0 Then
Beep
If MsgBox(„Das Dokument ‚“ & strDOCName & _
„‚ konnte nicht gedruckt werden.“, _
vbOKCancel + vbExclamation, _
„!!! Problem !!!“) = vbCancel Then
Exit Sub
End If ‚Abbrechen?
End If ‚Err<> 0…
strDOCName = Dir$()
Wend
End Sub
Function OpenFolder(strTitle) As String
Dim BI As BROWSEINFO
Dim R As Long
Dim lpBuffer As String * 254
With BI
.hwndOwner = 0
.lpszDisplayName = lpBuffer
.lpszTitle = strTitle
.ulFlags = 0
.BFFCALLBACK = 0
.LPARAM = 0
End With
R = SHBrowseForFolder(BI)
R = SHGetPathFromIDList(R, lpBuffer)
OpenFolder = Left$(lpBuffer, InStr(lpBuffer, _
Chr(0)) – 1)
End Function

Wenn Sie in Zukunft alle Dokumente aus einem bestimmten Verzeichnis drucken möchten, drücken Sie Alt+F8, um die Makroauswahl aufzurufen. Dort starten Sie das Makro per Doppelklick auf den Eintrag „procVerzeichnisDrucken“.

Das Makro zeigt zunächst eine Ordnerauswahl an, über die Sie das Verzeichnis festlegen, dessen Inhalt ausgedruckt werden soll. Anschließend liest das Makro den Inhalt des Verzeichnisses aus und übergibt jedes darin gefundene Dokument zum Ausdruck an Word. Kann eines der im gewählten Verzeichnis vorhandenen Dokumente nicht ausgedruckt werden, informiert Sie das Makro mit einer kleinen Meldung darüber. Sie können dann auf Ok klicken, um das Dokument zu überspringen oder die Ausführung des Makros mit Abbrechen beenden.

Benötigen Sie diese Funktion häufiger, empfiehlt sich die Einrichtung eines eigenen Menüeintrags wie zum Beispiel Datei-Drucken/Verzeichnis oder Datei-Verzeichnisinhalt drucken. Gehen Sie dazu wie folgt vor:

Klicken Sie mit der rechten Maustaste in die Menüleiste und wählen Sie das Kontextmenü Anpassen an.
Wechseln Sie auf die Registerkarte „Befehle“.
Markieren Sie in der Liste Kategorien den Eintrag „Makros“.
Ziehen Sie den Eintrag des Makros „procVerzeichnisDrucken“ in das Menü Datei hinter den Eintrag Drucken.

Klicken Sie mit der rechten Maustaste auf das neue Symbol und geben Sie im Eigenschaften-Menü als Name zum Beispiel Datei-Verzeichnisinhalt drucken ein.

Klicken Sie im „Anpassen“-Dialog auf Schließen.
In Zukunft können Sie das Makro bei Bedarf über den wie oben erläutert eingerichteten Menüeintrag abrufen.

Für den interessierten Anwender hier noch einige Anmerkungen zur Funktionsweise des Makros:
Sub AlleDOCsAusVerzeichnisDrucken()
strPath = OpenFolder(„Verzeichnis drucken:“)
If strPath = „“ Then Exit Sub

Im ersten Schritt wird über eine API-Funktion des Systems die Ordnerauswahl angezeigt. Wurde kein Ordner gewählt, erfolgt an dieser Stelle die Beendigung des Makros.
strDOCName = Dir$(strPath & „*.doc“)
On Error Resume Next
While strDOCName <> „“

Mit Hilfe der Funktion „Dir$()“ werden in einer Schleife alle Dokumente im ausgewählten Verzeichnis ausgelesen. Liefert die Funktion eine leere Zeichenkette zurück, sind keine weiteren Dokumente vorhanden und die Schleife wird verlassen.
DoEvents
Err = 0
Application.PrintOut FileName:=strPath & strDOCName
If Err <> 0 Then
Beep
If MsgBox(„Das Dokument ‚“ & strDOCName & _
„‚ konnte nicht gedruckt werden.“, _
vbOKCancel + vbExclamation, _
„!!! Problem !!!“) = vbCancel Then
Exit Sub
End If ‚Abbrechen?
End If ‚Err<> 0…

Über den Aufruf von „Application.PrintOut“ schicken wir das Dokument an den Drucker. Kommt es dabei zu einem Fehler, wird eine entsprechende Meldung angezeigt. Ein Klick auf Ok ignoriert den Fehler und führt das Makro weiter aus, ein Klick auf Abbrechen führt an dieser Stelle zum Verlassen des Makros.

strDOCName = Dir$()
Wend
End Sub

Mit der Anweisung „strDOCName = Dir$()“ wird dann die Suche nach weiteren Dokumenten veranlasst. Ist die Rückmeldung eine leere Zeichenkette, so ist die Schleife beendet und das Makro hat seine Aufgabe erfüllt.

 

Tags: ,

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.