Mit ein bisschen VBA kann man in Visio leicht die Ordnerstruktur visualisieren lassen:
Dazu benötigen Sie einige globale Variablen für die Zeilen- und Spaltennummern, die Visio-Datei, das zuletzt erstellte Shape und den Namen des Verzeichnisses:
Dim dblEbene As Double
Dim dblZeile As Double
Dim blnNeueZeile As Boolean
Dim vsDatei As Document
Dim vsSeite As Page
Dim strVerzeichnis As String
Dim vsRechteck As Shape
Der Ordner wird ausgewählt, eine neue Datei erstellt und auf die erste Seite zugegriffen. Das rekursive Programm wird aufgerufen.
Sub ListeVerzeichnisAuf()
 Dim fso As FileSystemObject
 Dim fsoVerzeichnis1 As Folder
 Set fso = New FileSystemObject
 strVerzeichnis = VerzeichnisAuswählen(„Bitte Verzeichnis auswählen!“)
 If strVerzeichnis = „“ Then
 MsgBox „Es wurde kein Verzeichnis ausgewählt“
 Else
 Set fsoVerzeichnis1 = fso.GetFolder(strVerzeichnis)
 Set vsDatei = Application.Documents.Add(„“)
 Set vsSeite = vsDatei.Pages(1)
 dblEbene = 0: dblZeile = 11
 blnNeueZeile = False
 ZeigeVerzeichnis fsoVerzeichnis1
Das eigentliche Programm generiert Rechtecke, die an die entsprechende Position gesetzt und mit dem Verzeichnisnamen beschriftet werden.
Sub ZeigeVerzeichnis(ByVal fsoVerzeichnis1 As Folder)
 Dim fsoVerzeichnis2 As Folder
 dblEbene = dblEbene + 1.5
 For Each fsoVerzeichnis2 In fsoVerzeichnis1.SubFolders
 Set vsRechteck = vsSeite.DrawRectangle( _
 dblEbene, dblZeile, dblEbene + 1.5, dblZeile – 0.5)
 vsRechteck.Text = „\“ & fsoVerzeichnis2.Name
 blnNeueZeile = False
 ZeigeVerzeichnis fsoVerzeichnis2
 Next
 dblEbene = dblEbene – 1.5
 If dblEbene = 1.5 Then
 dblZeile = dblZeile – 0.25
 End If
 ‚ — trenne die Hauptverzeichnisse voneinander
 If blnNeueZeile = False Then
 dblZeile = dblZeile – 0.5
 blnNeueZeile = True
 End If
 ‚ — nur das erste Mal eine Zeile tiefer
End Sub
Nach Beendigung wird die Seite an die benötigte Größe angepasst und der Name des ausgewählten Verzeichnisses in ein Überschriften-Shape geschrieben.
 vsSeite.AutoSizeDrawing
 Set vsRechteck = vsSeite.DrawRectangle( _
 vsSeite.PageSheet.Cells(„PageWidth“).Result(„in“) / 2 – 3, _
 vsSeite.PageSheet.Cells(„PageHeight“).Result(„in“) – 1, _
 vsSeite.PageSheet.Cells(„PageWidth“).Result(„in“) / 2 + 3, _
 vsSeite.PageSheet.Cells(„PageHeight“).Result(„in“) + 0)
 vsRechteck.Text = strVerzeichnis
 strVerzeichnis = „“
 ActiveWindow.DeselectAll
