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

Abbildung 1: Das interaktive Testformular.

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.

âś• Newsletter

Newsletter