Aktuelle Seite:
/vba/vbpfilebrowser.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXPGetestet unter Win2000  
VBA-Code verfügbar: ja
Beispiel anzeigen
Makro/Datei speichern
Print

In diesem Beispiel soll gezeigt werden, wie sich ein einfacher Dateibrowser realisieren lässt.

das größte Problem dabei ist, die Dateien von den Ordnern zu unterscheiden und bei Auswahl eines Ordners in diesen zu wechseln.

Dazu werden nacheinander alle Einträge im angegebenen Ordner mit dem Befehl Dir durchlaufen und das Dateiattribut des Eintrages ausgewertet. Zusätzlich existieren in jedem Verzeichnis die beiden Einträge "." und " .." zum erneuten Einlesen der Einträge bzw. zum Wechseln in den übergeordneten Ordner, die berücksichtigt werden müssen.

Im nachstehenden Ausschnitt werden Dateinamen im Ordner direkt und Ordner selber mit vorgestelltem "+"-Zeichen in eine Listbox eingetragen.

sFileName = Dir(sOpenFolder, vbDirectory)
Do While sFileName <> ""    ' Schleife beginnen.  
  ' Aktuelles und übergeordnetes Verzeichnis ignorieren.  
  If sFileName = "." Or sFileName = ".." Then 
      lbxFiles.AddItem
      lbxFiles.List(lbxFiles.ListCount - 1, 0) = sFileName
      lbxFiles.List(lbxFiles.ListCount - 1, 2) = sFileName
  Else 
  '  Ordnereinträge auswerten  
    If (GetAttr(sOpenFolder & sFileName) And vbDirectory) = vbDirectory Then 
      lbxFiles.AddItem
      lbxFiles.List(lbxFiles.ListCount - 1, 0) = "+ " & sFileName
      lbxFiles.List(lbxFiles.ListCount - 1, 2) = sFileName
     Else 
      lbxFiles.AddItem
      lbxFiles.List(lbxFiles.ListCount - 1, 0) = sFileName
      lbxFiles.List(lbxFiles.ListCount - 1, 2) = sFileName
    End If 
    iFiles = iFiles + 1
    Me.Caption = "Anzahl Dateien: " & iFiles
  End If 
  sFileName = Dir    ' Nächsten Eintrag abrufen.  
Loop 

Das Verhalten, wenn auf einen Eintrag (Datei oder Ordner) mit der Maus geklickt wird, wird im MouseUp-Ereignis der Listbox festgelegt.

Einfacher wäre auf den ersten Blick dieses Verhalten im Click-Ereignis der Listbox unterzubringen, aber das Click-Ereignis wertet einen Eintrag wohl erst nach Änderung der Markierung erneut aus. So wird ein wiederholtes Wechseln in den übergeordneten Ordner über den Eintrag " .." nicht ausgewertet, wenn nicht zwischendurch ein anderer Eintrag ausgewählt wird.

Mit folgendem Code wird der markierte Eintrag ausgewertet, indem obige Routine erneut für den ausgewählten Eintrag durchlaufen wird:

Private Sub lbxFiles_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  
Dim strFile As String
strFile = ReadFolder(lbxFiles.Tag & lbxFiles.List(lbxFiles.ListIndex, 2))
End Sub 

Prinzipiell erhält man damit ein Gerüst zum Einlesen von Ordnern und Anzeige der Einträge.

Allerdings besitzt diese Lösung noch ein paar Schönheitsflecken:
So wird u.a. bei der Navigation durch die Ordnerstruktur ein immer länger werdender Pfad zum aktuellen Verzeichnis erzeugt, vor allem wenn in übergeordnete Ordner zurückgewechselt wird:

C:\Temp\UV1\..\UV2\UUV2\..\Datei.txt 

Um diese Pfadangaben auf einen direkten Pfad zu kürzen, kann auf das API PathCanonicalize zurückgegriffen werden, das genau diese Pfade auf einen direkten Pfad vom obersten Ordner aus korrigiert.

Das bereitgestellte Beispiel umfasst noch folgende Funktionen:

  • Auswahl des Startordners
  • Anzeige des aktuellen Ordner-/Dateipfades
  • Anzeige der Datteiattribute (AHSR)
  • Anzeige der Dateigröße
  • Datum des letzten Zugriffs
  • Starten einer Datei mit dem zugewiesenen Programm

Dieses Beispiel stellt keinen vollstädnigen Dateimanager dar, sondern soll eine Grundlage für eigene Erweiterungen liefern!


 www.chf-online.de/vba/vbpfilebrowser.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)