Visual Basic for Applications (VBA): Datei-Manager für zuletzt geöffnete Dokumente

In sehr vielen Fällen werden Sie auf Dokumente zurückgreifen, die Sie bereits einmal bearbeitet haben. Normalerweise werden Sie die Dokumente aus dem Menü DATEI auswählen. Möchten Sie aber ein Dokument aus der LISTE DER ZULETZT GEÖFFNETEN DATEIEN streichen, dann ist dies nicht so ohne weiteres möglich. Sie bewerkstelligen dies über das Menü EXTRAS und den Befehl OPTIONENim Dialogfeld OPTIONEN > Registerkarte ALLGEMEIN indem Sie den Befehl LISTE ZULETZT GEÖFFNETER DATEIEN auf Null setzen. Der Nachteil dieser Methode besteht darin, daß alle Dateien aus der Liste entfernt werden.

Der hier vorgestellte Datei-Manager für zuletzt geöffnete Dokumente kann die gestellte Aufgabe ohne weiteres erfüllen. Darüber hinaus kann er auch noch die maximale Anzahl der Dokumente, die in der Liste gespeichert werden sollen, verändern und er öffnet natürlich auch ein ausgewähltes Dokument.

Der Datei-Manager besteht aus einem kleinen Hauptprogramm und einer USER-FORM die das abgebildete Dialogfeld enthält. Werfen wir zuerst einen Blick auf das Hauptprogramm:

Sub LastFilesDialog()

‚ Verwaltet die zuletzt geöffneten Dateien

If RecentFiles.Count > 0 Then

For i = 1 To RecentFiles.Count

Dateiliste(i) = RecentFiles.Item(i)

Pathliste(i) = RecentFiles(i).Path

RecentFilesDialog.LRFilesListBox.AddItem Dateiliste(i)

Next

RecentFilesDialog.LRFilesListBox.ListIndex = 0

RecentFilesDialog.CmdButtonOpen.Enabled = True

RecentFilesDialog.CmdButtonOpen.Default = True

RecentFilesDialog.CmdButtonDelFile.Enabled = True

Else

RecentFilesDialog.CmdButtonClose.Default = True

End If

RecentFilesDialog.AmountOfFiles.Text = Str(RecentFiles.Maximum)

RecentFilesDialog.Show

End Sub

Hauptprogramm des kleinen Datei-Managers.

Das Programm stellt zuerst fest, ob sich überhaupt Dateien in der LISTE DER ZULETZT GEÖFFNETEN DATEIEN befinden. Das geschieht über den Befehl RecentFiles.Count. Die EigenschaftCount enthält die Anzahl der Dateien die sich in der Liste befinden, ist diese größer Null – was eigentlich üblich ist – dann werden zuerst die einzelnen Dateinamen in der Variablen Dateilistegespeichert. Der Pfad einer jeden Datei wird in der Variablen Pathliste gespeichert. Beide Variablen wurden als globale Variablen am Anfang des Moduls deklariert.

Public Pathliste(1 To 9) As String   ‚Array der Pfade

Public Dateiliste(1 To 64) As String ‚Array der zuletzt geöffneten Dateien

Variablendeklaration am Anfang des Moduls.

Die Variablen Dateiliste und Pathliste sind als Datenfelder deklariert, d. h. sie nehmen von einem Datentyp mehrere Einträge entgegen. Der Vorteil von Datenfeldern liegt in der Tatsache begründet, daß mehrere Daten unter einer Variablen erreichbar sind. In der Pathliste können max. neun Pfade gespeichert werden, da die LISTE DER ZULETZT GESPEICHERTEN DATEIEN auch nicht mehr als neun Einträge entgegen nimmt. Die Variable Dateiliste kann mehr Einträge entgegen nehmen, da sie für den Einsatz im nächsten VBA-Programm ebenfalls vorgesehen ist.

Die einzelnen Dateinamen werden dann über den Befehl RecentFiles­Dialog.LRFilesListBox.AddItem Dateiliste(i) einem Listenfeld zugewiesen. Wir wollen diesen Befehl nun in seine Bestandteile auflösen. Im ersten Teil steht der Name des Dialogfelds, das das Listenfeld enthält. In unserem Fall heißt das Dialogfeld RecentFilesDialog. Danach folgt der Name des Listenfeldes, hierLRFilesListBox. Die Methode AddItem fügt dem Listenfeld den Eintrag hinzu, der der gesamten Anweisung folgt. Hier wird der Liste ein Dateiname aus dem Datenfeld Dateiliste hinzugefügt. Diese Prozedur wird solange wiederholt, bis alle Dateinamen aus der LISTE DER ZULETZT GESPEICHERTEN DATEIEN ausgelesen und in der Dateiliste aufgenommen sind.

Die auf Next folgende Anweisung RecentFilesDialog.LRFiles­ListBox.ListIndex = 0 stellt den ersten Eintrag des Listenfelds als ausgewähltes Element sicher. Dies ist immer dann sinnvoll, wenn nicht sicher gestellt ist, daß der Anwender auch wirklich einen Eintrag aus der Liste auswählen wird bzw. muß.

Die Anweisung RecentFilesDialog.CmdButtonOpen.Enabled = True schaltet die Schaltfläche ÖFFNEN des Dialogfelds RecentFilesDialog wieder ein. Diese Schaltfläche ist standardmäßig nicht aktiv, da eventuell keine Einträge in der LISTE DER ZULETZT GEÖFFNETEN DATEIEN enthalten sind. Das Programm würde in einem solchen Fall mit einer Laufzeit-Fehlermeldung abbrechen, wenn die Schaltfläche ÖFFNEN betätigt wird, da es ja kein Dokument laden kann. Die Schaltfläche wird außerdem als Standardschaltfläche markiert. Das geschieht über die AnweisungRecentFilesDialog.CmdButtonOpen.Default = True. Eine Standardschaltfläche sollte ein Dialogfeld immer besitzen, da viele Anwender ihre Einstellungen mit der Maus vornehmen und dann ihre Eingaben mit der Ü -Taste bestätigen. In unserem Fall würde dann das ausgewählte Dokument geöffnet.

Die Schaltfläche DATEI AUS DER LISTE ENTFERNEN, wird über die Anweisung RecentFilesDialog.CmdButtonDelFile.Enabled = True ebenfalls aktiviert, da es tatsächlich Dateien in der Liste gibt, die u. U. auch entfernt werden können.

Der Else-Zweig wird nur dann ausgeführt, wenn keine Dateien in der LISTE DER ZULETZT GEÖFFNETEN DATEIEN enthalten ist. Es wird dann die Schaltfläche SCHLIESSE als Standardschaltfläche definiert. Die restlichen Schaltflächen sind in diesem Fall nicht aktiv.

Im Textfeld AmountOfFiles wird die maximale Anzahl der Listeneinträge in der LISTE DER ZULETZT GEÖFFNETEN DATEIEN eingetragen. Die Anweisung dazu lautetRecentFilesDialog.AmountOfFiles.Text = Str(RecentFiles.Maximum). Die Maximalzahl der Einträge kann über die Eigenschaft RecentFiles.Maximum ermittelt werden. Dabei handelt es sich um eine Integerzahl, die zuerst noch in einen String umgewandelt werden muß. Dies bewerkstelligt der Befehl Str.

Die Anzahl kann über den SpinButton verändert werden. Diese wird beim Schließen des Dialogfelds an Word 2000 übergeben.

Die letzte Anweisung im Hauptprogramm ruft das Dialogfeld selber auf. Die vorhergehenden Anweisungen dienten alle lediglich der Initialisierung des Dialogfelds. Beim Erscheinen des Dialogfelds auf dem Bildschirm werden alle Felder und Schaltflächen so eingestellt sein, daß sie dem aktuellen Zustand der LISTE DER ZULETZT GEÖFFNETEN DATEIEN entsprechen. Das bedeutet, falls keine Dateien in der Liste enthalten sind, werden auch einige Schaltflächen nicht aktiv sein. Sind aber Dateien vorhanden, dann sind die entsprechenden Einträge vorhanden und die Schaltflächen aktiv.

Die verschiedenen Schaltflächen und das Listenfeld müssen nun noch mit Code für die einzelnen Ereignisse versehen werden. Ein Ereignis tritt dann ein, wenn der Anwender eine Schaltfläche betätigt oder im Listenfeld einen Doppelklick ausführt. Auf derartige Ereignisse sollte reagiert werden. Auf andere Ereignisse, wie beispielsweise ein Doppelklick auf eine Schaltfläche, muß nicht reagiert werden, da ein derartiges Ereignis zwar durch den Anwender ausgelöst werden kann, aber keineswegs sinnvoll ist.

Befassen wir uns zuerst mit den Schaltflächen. Die Schaltfläche SCHLIESSE entfernt das Dialogfeld nicht nur vom Bildschirm, sondern auch aus dem Speicher. Aufgrund der immer knappen Resourcen unter Windows sollte man dies immer tun. Der Code dafür ist recht kurz wie das folgende Listing zeigt.

Private Sub CmdButtonClose_Click()

Unload RecentFilesDialog ‚Dialog aus dem Speicher entfernen

End Sub

Prozedur, die das Dialogfeld wieder aus dem Speicher entfernt und damit auch vom Bildschirm.

Mit Hilfe der Schaltfläche ÖFFNEN wird das im Listenfeld ausgewählte Dokument in Word geladen und das Dialogfeld ebenfalls geschlossen, sowie aus dem Speicher entfernt.

Private Sub CmdButtonOpen_Click()

Unload RecentFilesDialog ‚Dialog aus dem Speicher entfernen

Documents.Open FileName:=VBAProgramme.PathListe(LRFilesListBox.ListIndex + 1) + „“ + VBAProgramme.Dateiliste(LRFilesListBox.ListIndex + 1)

End Sub

Das ausgewählte Dokument wird geöffnet und das Dialogfeld aus dem Speicher entfernt.

Zum Öffnen einer Datei wird die Methode Open aus der Klasse Documents verwendet. Der Dateiname setzt sich aus den entsprechenden Einträgen in der Pfadliste und Dateiliste zusammen. Dabei wird der Index über die Eigenschaft LRFilesListBox.ListIndex bestimmt. Zu diesem Index muß noch eine Eins addiert werden, da der Index bei Listenfeldern immer bei Null beginnt unser Feld aber bei Eins.

Die Schaltfläche DATEI AUS DER LISTE ENTFERNEN löscht einen Eintrag aus der Liste. Der Eintrag muß nicht nur aus dem Listenfeld, sondern auch aus der Pathliste, Dateiliste und der LISTE DER ZULETZT GEÖFFNETEN DATEIEN entfernt werden. Die folgende Prozedur sorgt dafür:

Private Sub CmdButtonDelFile_Click()

RecentFiles(LRFilesListBox.ListIndex + 1).Delete

LRFilesListBox.Clear

If RecentFiles.Count > 0 Then

For i = 1 To RecentFiles.Count

Dateiliste(i) = RecentFiles.Item(i)

PathListe(i) = RecentFiles(i).Path

RecentFilesDialog.LRFilesListBox.AddItem Dateiliste(i)

Next

RecentFilesDialog.LRFilesListBox.ListIndex = 0

RecentFilesDialog.CmdButtonOpen.Enabled = True

RecentFilesDialog.CmdButtonOpen.Default = True

RecentFilesDialog.CmdButtonDelFile.Enabled = True

Else

RecentFilesDialog.CmdButtonClose.Default = True

End If

End Sub

Entfernen einer Datei aus der Liste der zuletzt geöffneten Dateien.

Die Prozedur entfernt zuerst die Datei aus DER LISTE DER ZULETZT GEÖFFNETEN DATEIEN und löscht danach das gesamte Listenfeld. Im folgenden wird, wie zu Beginn des Programms, die Dateiliste und die Pathliste neu erstellt und dem Listenfeld übergeben.

Die beiden folgenden Prozeduren reagieren auf einen Klick des SpinButtons, dabei muß beim Rauf- und Runterzählen unbedingt auf die Grenzen geachtet werden.

Private Sub LRFSpinButton_SpinDown()

If RecentFiles.Maximum > 0 Then

RecentFiles.Maximum = RecentFiles.Maximum – 1

End If

AmountOfFiles.Text = Str(RecentFiles.Maximum)

End Sub

Private Sub LRFSpinButton_SpinUp()

If RecentFiles.Maximum < 9 Then

RecentFiles.Maximum = RecentFiles.Maximum + 1

End If

AmountOfFiles.Text = Str(RecentFiles.Maximum)

End Sub

Prozeduren, die die maximale Anzahl der zu speichernden Dateien verändern.

Das Maximum darf Null nicht unter- und neun nicht überschreiten. Das wird durch eine entsprechende If-Abfrage abgefangen. Der neue Wert wird nach einer Datentypumwandlung dem Textfeld als neuer Text zugewiesen und damit zur Anzeige gebracht.

Damit sind alle Prozeduren des kleinen Datei-Managers beschrieben. Wie Sie sicher bemerkt haben, ist selbst bei einem derart kleinen Dialogfeld, mit relativ geringem Funktionsumfang, sehr viel Aufwand für die Sicherheit notwendig. Dies ist bei den meisten Projekten so. Sie werden während der Programmierung größerer Projekt weit mehr mit dem Abfangen von Fehlerzuständen zu tun haben, als mit dem eigentlichen Funktionsumfang des Projekts. Der hier vorgestellte kleine Datei-Manager dient in erster Linie als Beispiel für die Programmierung von VBA-Projekten. Sie sollten durch eigene Experimente das Programm noch erweitern. Den auch hier gilt; Übung macht den Meister.

Die mobile Version verlassen