Dateien und Ordner in MS Access – die große Funktions-Toolbox (ohne Verweise)
Dateien lesen und schreiben, Ordner anlegen, kopieren, verschieben, prüfen – immer wieder. Dieses Modul bündelt rund 70 Aufgaben in klar benannten, einheitlichen Funktionen (File* / Folder* / Path*): reines Late-Binding, 32/64-Bit, stilles Fehlerverhalten und UTF-8. Nur ein Modul importieren – fertig.
Wer mit VBA und Access arbeitet, kennt es: Dateien lesen und schreiben, Ordner anlegen, kopieren, verschieben, prüfen ob etwas existiert oder beschreibbar ist – immer wieder aufs Neue. Dieses Modul bündelt all diese Aufgaben in klar benannten, einheitlichen Funktionen, die sich elegant kombinieren lassen.
Was macht sie besonders?
Ein durchgängiges Namens- und Rückgabeschema (File* / Folder* / Path*), reines Late-Binding (keine Verweise nötig, 32/64-Bit), stilles Fehlerverhalten (definierter Fehlerwert statt Dialoge) und UTF-8-fähiges Lesen und Schreiben. Jede Funktion ist kommentiert und prüft ihre Eingaben.
Rückgabe- und Fehlerkonvention: Aktionen (Create/Write/Delete/Copy/Move) liefern Boolean (Fehler = False), String-Abfragen "", Zahl-Abfragen -1, Listen ein leeres Array. Fehler sind standardmäßig still; mit FilesFolderVerbose True werden echte Fehler über die zentrale ErrBox angezeigt.
Gruppe A – Pfad-Zerlegung (reiner String, kein Plattenzugriff)
| Funktion | Beschreibung | Signatur |
|---|---|---|
FileName | Dateiname inkl. Endung, z. B. „report.txt”. | FileName(sPath) → String |
FileBaseName | Dateiname ohne Endung, z. B. „report”. | FileBaseName(sPath) → String |
FileSuffix | Endung klein, ohne Punkt, z. B. „txt”. | FileSuffix(sPath) → String |
FileFolder | Übergeordneter Ordner, ohne Backslash am Ende. | FileFolder(sPath) → String |
FileExtChange | Endung tauschen (report.txt → report.pdf). | FileExtChange(sPath, sNewExt) → String |
PathCombine | Ordner und Name mit genau einem Backslash verbinden. | PathCombine(sFolder, sName) → String |
PathDrive | Laufwerk („C:“) oder UNC-Wurzel. | PathDrive(sPath) → String |
PathIsAbsolute | Ist der Pfad absolut (Laufwerk oder UNC)? | PathIsAbsolute(sPath) → Boolean |
PathNormalize | Bereinigt Trenner, doppelte Backslashes, löst ./.. auf. | PathNormalize(sPath) → String |
Gruppe B – Datei-Operationen (Plattenzugriff)
| Funktion | Beschreibung | Signatur |
|---|---|---|
FileExists | Prüft, ob eine Datei vorhanden ist. | FileExists(sPath) → Boolean |
FileCreate | Legt eine leere Datei an. | FileCreate(sPath, [bolOverwrite=False]) → Boolean |
FileRead | Liest den gesamten Inhalt einer Textdatei. | FileRead(sPath, [sCharset="UTF-8"]) → String |
FileReadLines | Liest die Datei als Array einzelner Zeilen. | FileReadLines(sPath, [sCharset="UTF-8"]) → Variant |
FileWrite | Schreibt Text (UTF-8 mit BOM). | FileWrite(sPath, sContent, [bolOverwrite=True], [sCharset="UTF-8"]) → Boolean |
FileWriteUtf8 | Schreibt UTF-8, BOM optional – ideal für sauberes HTML. | FileWriteUtf8(sPath, sContent, [bolBom=False], [bolOverwrite=True]) → Boolean |
FileWriteLines | Schreibt ein Array zeilenweise. | FileWriteLines(sPath, vLines, [bolOverwrite=True], [sCharset="UTF-8"]) → Boolean |
FileAppend | Hängt Text encoding-sicher an. | FileAppend(sPath, sContent, [sCharset="UTF-8"]) → Boolean |
FileDelete | Löscht endgültig (am Papierkorb vorbei). | FileDelete(sPath) → Boolean |
FileCopy | Kopiert eine Datei. | FileCopy(sSource, sDest, [bolOverwrite=False]) → Boolean |
FileMove | Verschiebt oder benennt um. | FileMove(sSource, sDest) → Boolean |
FileSize | Größe in Bytes (> 2 GB → -1). | FileSize(sPath) → Long |
FileDateModified | Datum „zuletzt geändert”. | FileDateModified(sPath) → Date |
FileCanRead | Echter Lesetest. | FileCanRead(sPath) → Boolean |
FileCanWrite | Echter Schreibtest (ohne Inhaltsänderung). | FileCanWrite(sPath) → Boolean |
FileSetReadOnly | Setzt/entfernt das ReadOnly-Attribut. | FileSetReadOnly(sPath, bolReadOnly) → Boolean |
FileBackup | Zeitgestempelte Sicherungskopie, liefert den Pfad. | FileBackup(sPath) → String |
FileTrash | In den Papierkorb (SHFileOperation). | FileTrash(sPath) → Boolean |
FileIsLocked | Ist die Datei von einem anderen Prozess gesperrt? | FileIsLocked(sPath) → Boolean |
FileWait | Wartet bis Datei existiert und entsperrt ist. | FileWait(sPath, [lngTimeoutMs=5000], [bolUntilUnlocked=True]) → Boolean |
FileTouch | Anlegen oder nur Änderungsdatum aktualisieren. | FileTouch(sPath) → Boolean |
FileLineCount | Zählt die Zeilen. | FileLineCount(sPath) → Long |
FilesEqual | Vergleicht zwei Dateien (Größe, dann Byte für Byte). | FilesEqual(sPathA, sPathB) → Boolean |
FileReplaceInText | Ersetzt Text in einer Datei. | FileReplaceInText(sPath, sOld, sNew) → Boolean |
FileSizeFormat | Formatiert Bytes lesbar, z. B. „1,4 MB”. | FileSizeFormat(dblBytes, [iDecimals=1]) → String |
LogWrite | Hängt eine Logzeile an (Zeitstempel + Level + Nachricht), Text oder CSV. | LogWrite(sPath, sMessage, [eLevel=logINFO], [bolCsv=False]) → Boolean |
Gruppe C – Ordner-Operationen (Plattenzugriff)
| Funktion | Beschreibung | Signatur |
|---|---|---|
FolderExists | Prüft, ob ein Ordner vorhanden ist. | FolderExists(sPath) → Boolean |
FolderCreate | Legt einen Ordner an, inkl. fehlender Zwischenordner. | FolderCreate(sPath) → Boolean |
FolderRead | Liste der Dateien (optional rekursiv), volle Pfade. | FolderRead(sPath, [sPattern="*"], [bolSubfolders=False]) → Variant |
FolderSubfolders | Liste der direkten Unterordner. | FolderSubfolders(sPath) → Variant |
FolderCount | Anzahl Dateien in der obersten Ebene. | FolderCount(sPath, [sPattern="*"]) → Long |
FolderSubfolderCount | Anzahl direkter Unterordner. | FolderSubfolderCount(sPath) → Long |
FolderDelete | Löscht endgültig (ohne Recursive nur wenn leer). | FolderDelete(sPath, [bolRecursive=False]) → Boolean |
FolderTrash | Ordner samt Inhalt in den Papierkorb. | FolderTrash(sPath) → Boolean |
FolderEmpty | Löscht den Inhalt, behält den Ordner. | FolderEmpty(sPath) → Boolean |
FolderSize | Gesamtgröße in Bytes inkl. Unterordner. | FolderSize(sPath) → Long |
FolderDateModified | Datum „zuletzt geändert”. | FolderDateModified(sPath) → Date |
FolderCanRead | Echter Lesetest (enumeriert den Ordner). | FolderCanRead(sPath) → Boolean |
FolderCanWrite | Echter Schreibtest (Testdatei anlegen/löschen). | FolderCanWrite(sPath) → Boolean |
FolderCopy | Kopiert einen Ordner samt Inhalt. | FolderCopy(sSource, sDest, [bolOverwrite=False]) → Boolean |
FolderMove | Verschiebt oder benennt um. | FolderMove(sSource, sDest) → Boolean |
FolderNewestFile | Zuletzt geänderte Datei eines Ordners. | FolderNewestFile(sPath, [sPattern="*"]) → String |
FolderZip | Packt den Ordnerinhalt in eine .zip (Windows-Shell). | FolderZip(sFolder, sZip, [bolOverwrite=False]) → Boolean |
FolderUnzip | Entpackt eine .zip in einen Ordner. | FolderUnzip(sZip, sFolder, [bolOverwrite=False]) → Boolean |
FolderTree | Ordnerbaum mit Verbindungslinien (Explorer-Optik) als String, ins Direktfenster oder in eine Datei. | FolderTree(sPath, [eTarget=treeString], [sFile], [bolFilesToo=True], [bolFileSize=False], [bolAscii=False], [bolSummary=False], [lngMaxDepth=0]) → String |
Gruppe D – Datei UND Ordner kombiniert
| Funktion | Beschreibung | Signatur |
|---|---|---|
PathExists | Existiert der Pfad als Datei ODER Ordner? | PathExists(sPath) → Boolean |
PathType | Liefert „File”, „Folder” oder „“. | PathType(sPath) → String |
PathCopy | Kopiert Datei oder Ordner (je nach Typ). | PathCopy(sSource, sDest, [bolOverwrite=False]) → Boolean |
PathMove | Verschiebt Datei oder Ordner. | PathMove(sSource, sDest) → Boolean |
PathRename | Benennt um (bleibt im selben Ordner). | PathRename(sPath, sNewName) → Boolean |
PathTemp | Eindeutiger, noch nicht existierender TEMP-Pfad. | PathTemp([sSuffix=".tmp"]) → String |
Gruppe E – System-Integration
| Funktion | Beschreibung | Signatur |
|---|---|---|
FileOpen | Öffnet eine Datei mit dem Standardprogramm. | FileOpen(sPath) → Boolean |
FolderOpen | Öffnet einen Ordner im Explorer. | FolderOpen(sPath) → Boolean |
FileShowInFolder | Öffnet den Explorer mit der Datei markiert. | FileShowInFolder(sPath) → Boolean |
Gruppe F – Laufwerke, Spezialordner & Dialoge
| Funktion | Beschreibung | Signatur |
|---|---|---|
DriveExists | Prüft, ob ein Laufwerk vorhanden ist. | DriveExists(sDrive) → Boolean |
DriveFreeSpace | Freier Speicher in Bytes. | DriveFreeSpace(sDrive) → Double |
SpecialFolder | Bekannter Ordner per String (Temp, Desktop, Documents …). | SpecialFolder(sName) → String |
SystemFolder | Bekannter Ordner per Enum – typsicher und umfangreicher. | SystemFolder(eFolder) → String |
FilePicker | Datei-Öffnen-Dialog, liefert die gewählte Datei. | FilePicker([sFilter], [sTitle], [sInitialFolder]) → String |
FileSaveDialog | Windows-Speichern-unter-Dialog (legt die Datei nicht an). | FileSaveDialog([sFilter], [sTitle], [sInitialFolder], [sDefaultName], [sDefaultExt]) → String |
FolderPicker | Ordner-Auswahl-Dialog. | FolderPicker([sTitle], [sInitialFolder]) → String |
Konfiguration & zentrale Meldung
| Funktion | Beschreibung | Signatur |
|---|---|---|
FilesFolderVerbose | Schaltet zwischen Still- und Verbose-Modus (Fehler via ErrBox). | FilesFolderVerbose(bolOn) |
ErrBox | Zentrale Fehleranzeige (intern im Verbose-Modus). | ErrBox(errNo, errDesc, [errMod], [errProc], [errInfo]) |
Aufzählungen (Enums)
eSystemFolder – bekannte Systemordner für SystemFolder(): Benutzerprofil (sfProfile, sfDesktop, sfDocuments, sfDownloads, sfPictures, sfMusic, sfVideos, sfFavorites, sfRecent, sfSendTo), Anwendungsdaten (sfAppData, sfLocalAppData, sfProgramData), Startmenü/geteilt (sfStartMenu, sfPrograms, sfStartup, sfCommonStartMenu, sfCommonDesktop, sfPublic), System (sfWindows, sfSystem, sfProgramFiles, sfProgramFilesX86, sfFonts, sfTemp, sfRecycleBin) und sfApp (Ordner der laufenden Access-DB).
eLogLevel – Schweregrad für LogWrite(): logINFO, logWARN, logFAIL, logSUCCESS, logDONE. Textformat 2026-07-15 14:30:00 [INFO ] Nachricht (Level auf 7 Zeichen aufgefüllt), CSV 2026-07-15 14:30:00;INFO;Nachricht.
Einbindung & Integration
Nur das Modul modHelper_FilesFolder importieren – fertig. Keine Verweise, kein Setup. An genau zwei Stellen nutzt das Modul eine Win32-API (per bedingter Kompilierung #If VBA7 32/64-Bit-sicher, ohne Verweis): SHFileOperation für den Papierkorb (FileTrash/FolderTrash) und GetSaveFileName für den Speichern-unter-Dialog (FileSaveDialog). Die zentrale ErrBox ist enthalten.
Schnelltest: RunTests
Das Modul modHelper_FilesFolder_TESTING ist reine Entwicklungshilfe. RunTests fragt per InputBox einen Basispfad ab, legt darunter eine Test-Struktur an und ruft Abschnitt für Abschnitt jede Funktion auf. Nach jedem Schritt steht das Ergebnis als „Label → Ergebnis” im Direktfenster; erwartete Negativergebnisse sind mit „expected:” markiert. Zum Schluss räumt es nach Rückfrage wieder auf. Wird nicht für den operativen Einsatz benötigt.
Das Testformular frmFilesFolder_TESTING
Neben RunTests gibt es das interaktive Testformular. Es listet alle Funktionen in einer Combobox, legt beim Öffnen automatisch einen Sandbox-Testordner unter %TEMP% an (mit Beispieldateien) und löscht ihn beim Schließen. Zu jeder Funktion zeigt es oben die vollständige Beschreibung (Zweck, Parameter, Rückgabe, Signatur) und führt darunter eine sichere Demo aus. Über das Feld „Run” kann man einen eigenen Aufruf ausführen; bei datenverändernden Funktionen erscheint vorher eine Sicherheitsabfrage. „Show VBE” springt direkt zum Quellcode.
Alle Aufrufe des Formulars arbeiten ausschließlich im Sandbox-Testordner unter %TEMP% – niemals auf echten Daten.
Was man in Produktion wirklich braucht: nur ein Modul, modHelper_FilesFolder. Es enthält alle Funktionen und die ErrBox, arbeitet per Late-Binding – keine Verweise, kein Setup, 32/64-Bit. Nicht nötig (reine Entwicklungshilfen): modHelper_FilesFolder_TESTING, die Klasse clsFilesFolder und das Formular frmFilesFolder_TESTING.
Fazit
Mit diesen Funktionen wird deine Datei- und Ordnerverwaltung in Access schneller, einheitlicher und robuster – weniger Standardcode, weniger Fehlerquellen, bessere Lesbarkeit. Die Beispieldatenbank enthält Modul und Formular, fertig zum Importieren.
Download
Eine große VBA-Toolbox für MS Access mit rund 70 Funktionen rund um Dateien und Ordner – einheitliches Namensschema, Late-Binding, 32/64-Bit, stilles Fehlerverhalten und UTF-8.




