Visual Basic for Applications (VBA): Dokumenten-Manager

Der Dokumenten-Manager erleichtert die Verwaltung von LIEFERSCHEINEN, RECHNUNGEN und GESCHÄFTSBRIEFEN. Die einzelnen Rubriken können Sie Ihren eigenen Bedürfnissen anpassen oder auch um eigene Rubriken erweitern. Zur Auswahl der Rubriken dienen drei OptionButton. Wird eine Rubrik gewechselt, dann erscheinen im Listenfeld DATEIEN unterhalb der Rubriken, die Dateien der entsprechenden Rubrik. Für jede Rubrik wird ein Verzeichnis benötigt, in das zur jeweiligen Rubrik gehörende Dokumente abgelegt sind. In unserem Beispiel heißen die VerzeichnisseC:DOKSRECHNUNGEN, C:DOKSBRIEFE GESCHÄFTLICH und  C:DOKSLIEFERSCHEINE.

Das Hauptprogramm des Dokumenten-Managers sieht sehr bescheiden aus. Es werden nur einige Standardeinstellungen durchgeführt und das Dialogfeld DOKUMENTENMANAGER aufgerufen.

Sub DokManager()

‚ Verwaltet Dokumente aus bestimmten Rubriken

DokumentenManager.CmdButtonOpen.Default = True

DokumentenManager.OptionRechnung.Value = 1

DokumentenManager.FileBox.ListIndex = 0

DokumentenManager.Show

End Sub

Das Hauptprogramm des Dokumenten-Managers

Die Prozedur zum Öffnen eines Dokuments wird als Click-Ereignis der Schaltfläche ÖFFNEN programmiert. Dabei wird das Dialogfeld – wie auch beim Befehl ABBRECHEN – geschlossen, da es nach dem Öffnen eines Dokuments nicht mehr benötigt wird. Mit dem Befehl Unload wird es nicht nur geschlossen, sondern auch aus dem Speicher entfernt, was den Resourcen unter Windows zu Gute kommt.

Private Sub CmdButtonOpen_Click()

Unload DokumentenManager ‚Dialog aus dem Speicher entfernen

If OptionRechnung.Value Then

Documents.Open FileName:=“C:DoksRechnungen“ + VBAProgramme.Dateiliste(FileBox.ListIndex + 1)

End If

If OptionLiefer.Value Then

Documents.Open FileName:=“C:DoksLieferscheine“ + VBAProgramme.Dateiliste(FileBox.ListIndex + 1)

End If

If OptionBriefeG.Value Then

Documents.Open FileName:=“C:DoksBriefe geschäftlich“ + VBAProgramme.Dateiliste(FileBox.ListIndex + 1)

End If

End Sub

Das Click-Ereignis für die Schaltfläche ÖFFNEN.

Vor dem Öffnen eines Dokuments muß festgestellt werden, welcher Rubrik das Dokument zu entnehmen ist. Das geschieht durch drei If-Abfragen der Eigenschaft Value eines jeden OptionButton. Der Wert Value ist True, falls eine Rubrik ausgewählt ist oder False, falls die Rubrik nicht ausgewählt ist. Innerhalb der If-Abfrage wird dann das jeweilige Dokument über den Befehl Open aus demDocuments-Objekt geladen.

In den meisten Windows-Anwendungen werden Dateien geöffnet, wenn Sie einen Doppelklick auf den Dateinamen ausführen. Diese Funktionalität enthält auch unser Dokumenten-Manager. Führen Sie einen Doppelklick auf den Dateinamen aus, dann wird ein entsprechendes Ereignis ausgelöst auf das reagiert werden kann. Dies geschieht in unserem Programm in der Prozedur Private Sub FileBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean). Der übergebene Parameter hat keine weitere Bedeutung. Das Ereignis entspricht genau dem Click-Ereignis der SchaltflächeÖFFNEN, da auch hier ebenfalls ein Dokument geöffnet wird. Deshalb wird die Prozedur CmdButtonOpen_Click aufgerufen, die entsprechendes veranlaßt.

Private Sub FileBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

Call CmdButtonOpen_Click

End Sub

Ein Doppelklick im Listenfeld auf den Dateinamen entspricht dem Click-Ereignis der Schaltfläche ÖFFNEN.

Bei jedem Wechsel der Rubrik müssen die Dateinamen der entsprechenden Rubrik neu eingelesen und im Listenfeld Dateien dargestellt werden. Dazu dient die folgende Prozedur.

Private Sub OptionRechnung_Click()

Dim RechnPath As String

RechnPath = „c:DoksRechnungen“

FileBox.Clear

With Application.FileSearch

.LookIn = RechnPath

.SearchSubFolders = False

.FileName = „*.DOC“

.Execute

For i = 1 To .FoundFiles.Count

VBAProgramme.Dateiliste(i) = Mid(.FoundFiles(i), Len(RechnPath) + 2)

FileBox.AddItem VBAProgramme.Dateiliste(i)

Next i

FileBox.ListIndex = 0

End With

End Sub

Bei einem Wechsel der Rubrik müssen die Dateinamen neu eingelesen und angezeigt werden.

Wir wollen uns dazu die Prozedur Private Sub OptionRechnung_Click() ansehen. Die Prozeduren für LIEFERSCHEINE und GESCHÄFTSBRIEFE sehen identisch aus. Es werden nur die Verzeichnissnamen ausgetauscht.

RechnPath nimmt den String für den Pfad auf der die Rechnungsdokumente enthält. Das Listenfeld muß über den Befehl FileBox.Clear gelöscht werden, da sich die Namen der Dateien ändern. Danach wird der Suchbefehl gestartet. Damit der Suchbefehl auch im richtigen Verzeichnis nachschaut, wird ihm dies über die Eigenschaft LookIn angegeben. Durch die With-Anweisung kann auf die Elemente einer Struktur zugegriffen werden. Der Befehl würde ausgeschrieben so aussehen:

Application.FileSearch.LookIn = RechnPath

Dies ist aber die weniger elegante Art und sollte generell vermieden werden.

Da keine Unterverzeichnisse existieren, wird die entsprechende Eigenschaft auf False eingestellt. Die Art der Dateien, nach denen gesucht werden soll, wird mit *.DOC auf alle vorhandenen Dokumentdateien festgelegt.

Die Methode Execute startet den Suchvorgang. In der folgenden For … Next-Schleife werden die Ergebnisse der Dateiliste und dem DATEIEN-Listenfeld hinzugefügt. Nachdem alle Dateinamen eingetragen sind wird der Index für das Listenfeld auf Null eingestellt.

Die Schaltfläche DRUCKEN erlaubt dem Anwender die ausgewählte Datei auf dem Standarddrucker auszugeben. Dies geschieht über eine sehr einfache Prozedur, die auf das Click-Ereignis der Schaltfläche reagiert.

Private Sub CmdButtonPrint_Click()

Unload DokumentenManager ‚Dialog aus dem Speicher entfernen

If OptionRechnung.Value Then

Documents.Open FileName:=“C:DoksRechnungen“ + VBAProgramme.Dateiliste(FileBox.ListIndex + 1)

End If

If OptionLiefer.Value Then

Documents.Open FileName:=“C:DoksLieferscheine“ + VBAProgramme.Dateiliste(FileBox.ListIndex + 1)

End If

If OptionBriefeG.Value Then

Documents.Open FileName:=“C:DoksBriefe geschäftlich“ + VBAProgramme.Dateiliste(FileBox.ListIndex + 1)

End If

ActiveDocument.PrintOut

Documents.Close (False)

End Sub

Die Druckausgabe hat sehr viel Ähnlichkeit mit der Prozedur Datei öffnen.

Zuerst wird das ausgewählte Dokument geladen. Hier muß wieder der darauf geachtet werden, daß das Dokument aus dem richtigen Verzeichnis und damit aus der richtigen Rubrik genommen wird. Das Dokument wird dann über die Anweisung ActiveDocument.PrintOut auf dem Standarddrucker ausgegeben und über die Anweisung Documents.Close wieder aus dem Speicher und vom Bildschirm entfernt. Der Parameter False gibt an, daß das Dokument keine Änderungen enthält und nicht gespeichert werden soll.