TL;DR —
MkDirerstellt eine Ordnerebene, keinen Pfad.MkDir "C:\A\B\C"lösterror 76aus, wennC:\A\Bnoch nicht existiert, undMkDirauf einen Ordner, der bereits existiert, lösterror 75aus — es ist kein stilles No-op. „Diesen Ordner erstellen“ heißt in Wahrheit „jede fehlende Ebene erstellen, und nur dort, wo sie fehlt“.
Sub MakeReportsFolder()
MkDir "C:\Reports" ' funktioniert nur, wenn C:\ existiert und C:\Reports NICHT
MkDir "C:\Reports\2026\Q1" ' error 76 - der uebergeordnete C:\Reports\2026 existiert noch nicht
End Sub
MkDir sieht aus wie die einfachste Anweisung in VBA — ein Schlüsselwort, ein Pfad. Das Problem ist, dass
sie weit weniger tut, als ihr Name vermuten lässt. Sie erstellt keinen Pfad; sie erstellt ein
einzelnes Verzeichnis, dessen übergeordneter Ordner bereits vorhanden sein muss. Und sie duldet keinen
bereits existierenden Ordner — sie hält mit einem Fehler an. Beide Überraschungen entspringen derselben
Wurzel: MkDir ist eine Ein-Ebenen-Operation, und jede robuste „Ordner erstellen“-Routine ist um diese
Grenze herum gebaut.
Was Sie lernen
- Das mentale Modell —
MkDirlegt eine Ebene an, keinen Pfad - Warum ein verschachtelter Pfad
error 76auslöst und warumFileSystemObject.CreateFolderebenfalls nicht rekursiv arbeitet - Warum
MkDirauf einen bestehenden Ordnererror 75auslöst — und die Prüfung, die daraus ein sicheres „stelle sicher, dass es existiert“ macht - Die existenzgeprüfte Schleife, die einen vollständigen Pfad Ebene für Ebene erstellt
- Warum ein bloßes
MkDir "Reports"unterCurDirlandet, nicht im Ordner Ihrer Arbeitsmappe - Das sichere Muster „Ordner erstellen, falls nicht vorhanden“ für ein unbeaufsichtigtes Makro
Das mentale Modell: MkDir legt eine Ebene an, keinen Pfad
Die zentrale Einsicht ist, dass MkDir einen einzelnen Verzeichniseintrag in einem Ordner erstellt, der
bereits existieren muss. Es ist das genaue Gegenstück dazu, md an einer Eingabeaufforderung mit dem
alten, nicht-rekursiven Verhalten einzutippen: Es fügt einem übergeordneten Ordner ein Kind hinzu und
erwartet, dass dieser übergeordnete Ordner da ist.
MkDir "C:\Reports"— erstelltReportsinC:\. In Ordnung, weilC:\existiert.MkDir "C:\Reports\2026"— erstellt2026inC:\Reports. Funktioniert nur, wennC:\Reportsbereits existiert.MkDir "C:\Reports\2026\Q1"— braucht zuerstC:\Reports\2026, sonst scheitert es.
Sobald Sie MkDir als „füge einem bestehenden übergeordneten Ordner ein Kind hinzu“ sehen, überraschen
beide berühmten Fehler nicht mehr — sie sind nur die zwei Arten, wie diese Annahme verletzt werden kann: Der
übergeordnete Ordner fehlt, oder das Kind ist bereits da.
Error 76: MkDir kann keinen verschachtelten Pfad erstellen (und CreateFolder auch nicht)
Richten Sie MkDir auf einen Pfad, der mehr als eine Ebene tief ist und in dem ein Zwischenordner fehlt,
und es hält an:
MkDir "C:\Reports\2026\Q1" ' error 76 - "Path not found", wenn C:\Reports\2026 fehlt
Die weit verbreitete Abhilfe — „verwenden Sie einfach das FileSystemObject“ — löst das nicht.
CreateFolder ist ebenfalls eine Ein-Ebenen-Operation; es löst „Path not found“ bei einem fehlenden
übergeordneten Ordner aus, genau wie MkDir:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder "C:\Reports\2026\Q1" ' scheitert ebenfalls, wenn C:\Reports\2026 nicht existiert
Keine der beiden eingebauten Varianten erstellt Zwischenordner für Sie. Einen tiefen Pfad aufzubauen ist
daher zwangsläufig eine Schleife: Zerlegen Sie den Pfad am Trennzeichen und erstellen Sie jede Ebene von oben
nach unten, wobei Sie die bereits vorhandenen überspringen. Es gibt in eingebautem VBA keinen einzelnen
Aufruf, der ein mkdir -p erledigt; Sie schreiben ihn. Die Schleife ist ein paar Zeilen (unten), und sobald
Sie sie haben, ist das verschachtelte Erstellen ein gelöstes Problem.
Error 75: MkDir auf einen bestehenden Ordner ist kein No-op
Die zweite Überraschung ist, dass MkDir scheitert, wenn der Ordner bereits existiert — es gelingt nicht
still:
MkDir "C:\Reports" ' erster Lauf: erstellt ihn
MkDir "C:\Reports" ' zweiter Lauf: error 75 - "Path/File access error"
Deshalb stürzt ein Makro, das „einmal funktioniert hat“, bei seinem zweiten Lauf ab. MkDir ist nicht
idempotent, es unbedingt aufzurufen ist also ein Bug. Die Abhilfe ist, zuerst zu prüfen, mit der
ordnerbewussten Form von Dir oder mit FolderExists:
If Dir("C:\Reports", vbDirectory) = "" Then MkDir "C:\Reports" ' nur erstellen, wenn nicht vorhanden
Das vbDirectory-Flag lässt Dir auf Ordner passen, sodass
Dir(path, vbDirectory) = "" „dieser Ordner existiert nicht“ bedeutet. Umschließen Sie MkDir mit diesem
Test, und die Anweisung wird zu einem sicheren stelle-sicher-dass-es-existiert: Sie erstellt den Ordner
beim ersten Mal und tut bei jedem Lauf danach nichts. Die sauberere Alternative ist fso.FolderExists(path),
das eindeutig zu lesen ist und niemals den gemeinsamen Dir-Cursor berührt, der in der
Dir-Anleitung beschrieben ist.
Das Muster: einen vollständigen Pfad Ebene für Ebene erstellen
Fügt man die beiden Grenzen zusammen, ergibt sich die Routine, die zuverlässig einen verschachtelten Pfad
erstellt — das mkdir -p, das VBA Ihnen nicht gibt. Sie läuft den Pfad von der Wurzel ab und erstellt jede
fehlende Ebene:
Sub EnsurePath(ByVal fullPath As String)
Dim parts() As String, build As String, i As Long
parts = Split(fullPath, "\")
build = parts(0) ' das Laufwerk, z. B. "C:"
For i = 1 To UBound(parts)
build = build & "\" & parts(i)
If Dir(build, vbDirectory) = "" Then MkDir build ' diese Ebene erstellen, falls nicht vorhanden
Next i
End Sub
Rufen Sie EnsurePath "C:\Reports\2026\Q1" auf, und es erstellt Reports, dann 2026, dann Q1,
überspringt alle bereits vorhandenen und löst nie error 75 oder 76 aus. Das ist die Gestalt, die fast
jeder produktive „Ordner erstellen“-Helfer annimmt, weil beide eingebauten Anweisungen sie erzwingen. Die
For-Schleife und Split erledigen das Ablaufen;
die Dir(..., vbDirectory)-Absicherung erledigt die Sicherheit.
Warum ein bloßer Ordnername am falschen Ort landet
MkDir akzeptiert einen relativen Pfad — einen Namen ohne Laufwerk oder führenden \ —, und genau dort
lauert ein subtiler Bug:
MkDir "Reports" ' wohin geht das? NICHT unbedingt neben Ihre Arbeitsmappe
Ein relativer Pfad wird gegen CurDir aufgelöst, Excels aktuelles Arbeitsverzeichnis — das gewöhnlich
nicht der Ordner ist, in dem Ihre Arbeitsmappe gespeichert ist, und das sich ändert, sobald ein
Datei-Öffnen-Dialog irgendwo neu hinzeigt. So kann MkDir "Reports" den Ordner an einem Tag in Dokumente
erstellen und am nächsten woanders. Die verlässliche Gewohnheit ist, einen absoluten Pfad aus
ThisWorkbook.Path aufzubauen:
MkDir ThisWorkbook.Path & "\Reports" ' immer neben dieser Arbeitsmappe
Das ist das ganze Thema der CurDir-Anleitung: Relative Pfade in MkDir,
RmDir und Datei-Öffnungen lösen sich alle gegen ein Arbeitsverzeichnis auf, das Sie
nicht kontrollieren, verankern Sie daher jeden Pfad stattdessen an ThisWorkbook.Path.
Das ehrliche Fazit: eine Ebene, abgesichert, absolut
MkDir ist das richtige Werkzeug, um einen Ordner zu erstellen — solange Sie respektieren, was es
tatsächlich tut. Vier Regeln:
- Es legt eine Ebene an → ein verschachtelter Pfad braucht eine Schleife Ebene für Ebene; weder
MkDirnochCreateFoldererledigt einmkdir -p. - Es ist nicht idempotent → sichern Sie mit
If Dir(path, vbDirectory) = "" Then(oderFolderExists) ab, sonst löst es beim zweiten Lauferror 75aus. - Ein fehlender übergeordneter Ordner ist
error 76→ bauen Sie von der Wurzel abwärts, nicht vom Blatt her. - Ein relativer Name folgt
CurDir→ bauen Sie absolute Pfade ausThisWorkbook.Path, damit der Ordner immer dort landet, wo Sie es erwarten.
In dem Augenblick, in dem Sie MkDir zweimal in einem Skript schreiben — einmal zum Erstellen, einmal „für
alle Fälle“ —, ersetzen Sie beide durch die abgesicherte Schleife. Dieser eine Helfer beseitigt error 75,
error 76 und den Falscher-Ordner-Bug in einem Zug.
Wie ExcelMaster hilft
Einen Ordner sicher zu erstellen heißt, sich zu merken, dass MkDir nur eine Ebene anlegt, dass es einen
Fehler auslöst, wenn der übergeordnete Ordner fehlt (76) oder der Ordner bereits existiert (75), und
dass ein bloßer Name CurDir folgt statt Ihrer Arbeitsmappe — vier Fallen um eine Anweisung, die aussieht,
als sollte sie nur einen Ordner erstellen.
ExcelMaster schreibt die
Ordner-erstellen-Routine, die nicht ins Stocken gerät. Beschreiben Sie den Job — „speichere jeden Bericht in
einen datierten Unterordner“ oder „baue den Ausgabebaum auf, falls er nicht da ist“ — und es erzeugt die
existenzgeprüfte Schleife Ebene für Ebene, verankert an ThisWorkbook.Path, sodass der
Pfad einmal erstellt wird und bei einem erneuten Lauf nie error 75 auslöst. Sie beschreiben den Ordner, den
Sie wollen; es schreibt den Code, der jede fehlende Ebene anlegt und den Rest überspringt.
Häufig gestellte Fragen
Wie erstelle ich in VBA einen Ordner?
Verwenden Sie die MkDir-Anweisung mit einem vollständigen Pfad: MkDir "C:\Reports". Sie erstellt eine
Ordnerebene in einem übergeordneten Ordner, der bereits existieren muss. Sichern Sie sie ab, damit sie bei
einem erneuten Lauf nicht scheitert — If Dir("C:\Reports", vbDirectory) = "" Then MkDir "C:\Reports" —,
denn MkDir löst error 75 aus, wenn der Ordner bereits existiert, statt nichts zu tun.
Warum liefert VBA MkDir error 76 Path not found?
Weil MkDir nur eine Ebene erstellt und der übergeordnete Ordner in Ihrem Pfad nicht existiert.
MkDir "C:\Reports\2026\Q1" scheitert mit error 76, wenn C:\Reports\2026 fehlt. MkDir erstellt keine
Zwischenordner, und FileSystemObject.CreateFolder ebenfalls nicht. Um einen tiefen Pfad aufzubauen,
erstellen Sie jede Ebene von der Wurzel abwärts in einer Schleife und prüfen Dir(level, vbDirectory) vor
jedem MkDir.
Wie erstelle ich einen Ordner nur, wenn er noch nicht existiert?
Prüfen Sie zuerst mit dem vbDirectory-Flag: If Dir("C:\Reports", vbDirectory) = "" Then MkDir "C:\Reports". Dir(path, vbDirectory) liefert den Ordnernamen, wenn er existiert, und eine leere
Zeichenfolge, wenn nicht, sodass das MkDir nur läuft, wenn der Ordner fehlt. Die klarere Alternative ist
fso.FolderExists(path) aus dem FileSystemObject, das eindeutig zu lesen ist und den Dir-Cursor nicht
stört.
Wie erstelle ich in VBA verschachtelte Ordner in einem Rutsch?
Es gibt in eingebautem VBA keinen einzelnen mkdir -p-Aufruf — sowohl MkDir als auch
FileSystemObject.CreateFolder erstellen nur eine Ebene. Zerlegen Sie den Pfad an "\" und erstellen Sie
jede Ebene von oben nach unten: Beginnen Sie beim Laufwerk, hängen Sie jeweils ein Segment an und MkDir
jedes Segment, das Dir(build, vbDirectory) als fehlend meldet. Diese Schleife erstellt Reports, dann
2026, dann Q1, und überspringt alle bereits vorhandenen.
Wo erstellt MkDir einen Ordner, wenn ich einen relativen Pfad verwende?
Ein relativer Pfad wie MkDir "Reports" wird gegen CurDir aufgelöst, Excels aktuelles Arbeitsverzeichnis
— das gewöhnlich nicht der Ordner Ihrer Arbeitsmappe ist und sich ändern kann, wenn ein
Datei-Öffnen-Dialog woanders hinzeigt. Um den Ordner jedes Mal neben Ihrer Arbeitsmappe zu erstellen, bauen
Sie einen absoluten Pfad: MkDir ThisWorkbook.Path & "\Reports".
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 23.08.2026.
Verwandte Anleitungen: VBA RmDir · VBA CurDir · VBA Check If File Exists · VBA Dir · VBA FileSystemObject
