🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA MkDir in Excel — einen Ordner erstellen und warum es keinen verschachtelten Pfad anlegen kann

|

VBA MkDir in Excel — einen Ordner erstellen und warum es keinen verschachtelten Pfad anlegen kann

TL;DRMkDir erstellt eine Ordnerebene, keinen Pfad. MkDir "C:\A\B\C" löst error 76 aus, wenn C:\A\B noch nicht existiert, und MkDir auf einen Ordner, der bereits existiert, löst error 75 aus — 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 — MkDir legt eine Ebene an, keinen Pfad
  • Warum ein verschachtelter Pfad error 76 auslöst und warum FileSystemObject.CreateFolder ebenfalls nicht rekursiv arbeitet
  • Warum MkDir auf einen bestehenden Ordner error 75 auslö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" unter CurDir landet, 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" — erstellt Reports in C:\. In Ordnung, weil C:\ existiert.
  • MkDir "C:\Reports\2026" — erstellt 2026 in C:\Reports. Funktioniert nur, wenn C:\Reports bereits existiert.
  • MkDir "C:\Reports\2026\Q1" — braucht zuerst C:\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 MkDir noch CreateFolder erledigt ein mkdir -p.
  • Es ist nicht idempotent → sichern Sie mit If Dir(path, vbDirectory) = "" Then (oder FolderExists) ab, sonst löst es beim zweiten Lauf error 75 aus.
  • 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 aus ThisWorkbook.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