VBA: Dateien in Ordnern und Unterordnern suchen
Schritt-für-Schritt-Anleitung
Um mit VBA in einem bestimmten Verzeichnis sowie dessen Unterordnern nach Excel-Dateien zu suchen, kannst Du den nachfolgenden Code verwenden. Dieser Code geht davon aus, dass die Identifikationsnummern in Spalte A beginnen und dass die Ergebnisse (Hyperlinks und Pfade) in den Spalten B und C ausgegeben werden.
- Öffne das Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).
- Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > "Einfügen" > "Modul").
- Kopiere den folgenden Code in das Modul:
Option Explicit
Sub Start()
Dim strFolder As String, ArFileFilter() As String
Dim nCount As Long, lngFileCount As Long
Dim ArrayData() As Variant, ArrayFile() As String, sFile As String
strFolder = "G:\VBA\" 'Ordner angeben
With Tabelle1 'Tabelle anpassen
.Range("B2:C" & .Rows.Count).Clear 'Daten Spalte B und C löschen
nCount = .Cells(.Rows.Count, 1).End(xlUp).Row
If nCount < 2 Then Exit Sub 'keine Daten in Tabelle
ArrayData = .Range("A2:A" & nCount).Value
strFolder = IIf(Right$(strFolder, 1) = "\", strFolder, strFolder & "\")
For nCount = 1 To UBound(ArrayData)
If ArrayData(nCount, 1) <> "" Then
ArFileFilter = Array(ArrayData(nCount, 1) & "*.*") 'Filter für die Suche
FindFiles ArrayFile, strFolder, lngFileCount, ArFileFilter, True
If lngFileCount > 0 Then
sFile = ArrayFile(0) 'nur erste gefundene Datei listen
ArrayData(nCount, 1) = "=HYPERLINK(""" & sFile & """,""" & Right$(sFile, Len(sFile) - InStrRev(sFile, "\")) & """)" 'Hyperlink erstellen
ArrayData(nCount, 2) = sFile 'kompletter Pfad
lngFileCount = 0
Else
ArrayData(nCount, 1) = "nix gefunden"
End If
End If
Next nCount
.Range("B2").Resize(UBound(ArrayData), 2).FormulaR1C1 = ArrayData
End With
Erase ArrayData
End Sub
'Unterprozeduren für die Dateisuche hier einfügen
- Ändere den
strFolder
-Pfad, um den gewünschten Ordner anzugeben.
- Führe das Makro aus, um die Suche zu starten.
Häufige Fehler und Lösungen
Alternative Methoden
Eine einfache Methode, um Dateien in einem Ordner und dessen Unterordnern zu suchen, ist die Verwendung der Windows-Suchfunktion oder spezialisierter Software. VBA eignet sich jedoch gut, wenn Du diese Funktionalität direkt in Excel benötigst.
Praktische Beispiele
Wenn Du einen Ordner mit den folgenden Dateien hast:
123 ProduktABC.xls
456 ProduktXYZ.xls
Und die Identifikationsnummern in den Zellen A2 bis A3 stehen, wird das Makro die Hyperlinks zu den entsprechenden Dateien in den Zellen B2 und C2 ausgeben.
Tipps für Profis
- Verwende die
.Value2
-Eigenschaft, um sicherzustellen, dass der Code auf die Werte der Zellen zugreift und nicht auf die Formate.
- Optimiere den Code, indem Du Fehlerbehandlungen einfügst, um unerwartete Probleme besser zu handhaben.
FAQ: Häufige Fragen
1. Kann ich das Makro anpassen, um nach anderen Dateitypen zu suchen?
Ja, ändere einfach den Filter in der Zeile ArFileFilter = Array(ArrayData(nCount, 1) & "*.*")
zu dem gewünschten Dateiformat, z.B. & "*.xlsx"
.
2. Wie kann ich sicherstellen, dass das Makro auch in anderen Excel-Versionen funktioniert?
Achte darauf, dass die verwendeten Funktionen in der jeweiligen Excel-Version unterstützt werden. VBA ist weitgehend kompatibel, jedoch können einige Funktionen in älteren Versionen nicht vorhanden sein.