Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mehrstufige Ordnerstruktur mit mkdir

Forumthread: mehrstufige Ordnerstruktur mit mkdir

mehrstufige Ordnerstruktur mit mkdir
05.11.2017 10:33:19
Werner
Hallo Forum,
ich wollte innerhalb VBA eine mehrstufige Ordnerstruktur anlegen, sofern Teile davon noch nicht vorhanden sind. Leider funktioniert das unter VBA nicht. Führe ich denselben Befehl in einem Windows-Command-Fenster aus, so werden - soweit noch nicht vorhanden - die einzelnen Unterverzeichnisse erstellt.
Beispiel: Mkdir "d:\stufe1\stufe2\stufe3\"

Wie löse ich das Problem innerhalb VBA?
Danke im Voraus
Werner
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrstufige Ordnerstruktur mit mkdir
05.11.2017 10:53:52
Hajo_Zi
Hallo Werner,
nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.

Anzeige
AW: mehrstufige Ordnerstruktur mit mkdir
05.11.2017 11:20:50
Nepumuk
Hallo Werner,
ein Beispiel:
Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
    ByVal DirPath As String) As Long
Private Declare Function GetLastError Lib "kernel32.dll" () As Long
Declare Function FormatMessageA Lib "kernel32.dll" ( _
    ByVal dwFlags As Long, _
    ByRef lpSource As Any, _
    ByVal dwMessageId As Long, _
    ByVal dwLanguageId As Long, _
    ByVal lpBuffer As String, _
    ByVal nSize As Long, _
    ByRef Arguments As Long) As Long

Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000
Private Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200

Private Const LANG_NEUTRAL As Long = &H0
Private Const LANG_GERMAN As Long = &H7

Private Const SUBLANG_GERMAN As Long = &H1

Public Sub Beispiel()
    Dim lngReturn As Long, lngError As Long
    Dim lngFlags As Long, lngBuffer As String
    Dim lngLanguage As Long
    
    lngReturn = MakeSureDirectoryPathExists("D:\stufe1\stufe2\stufe3\")
    
    If lngReturn = 0 Then
        
        lngError = Err.LastDllError
        lngFlags = FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS
        lngLanguage = LANG_NEUTRAL Or (SUBLANG_GERMAN * 1024)
        lngBuffer = Space(256)
        
        lngReturn = FormatMessageA(lngFlags, 0&, lngError, lngLanguage, lngBuffer, Len(lngBuffer), 0&)
        
        If lngReturn = 0 Then
            Call MsgBox("Ein Fehler ist bei dem ermitteln des Fehlertextes aufgetreten.", vbCritical, "DLL-Fehler")
        Else
            Call MsgBox(Left$(lngBuffer, lngReturn), vbCritical, "Pfadfehler")
        End If
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: mehrstufige Ordnerstruktur mit mkdir
05.11.2017 11:06:15
Sepp
Hallo Werner,
das erledigt man am einfachsten per API-Funktion.
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub test()
Dim strPath As String

strPath = "d:\stufe1\stufe2\stufe3\"

If MakeSureDirectoryPathExists(strPath) <> 0 Then
  MsgBox "Der Pfad : " & strPath & " wurde erfolgreich angelegt!"
End If

End Sub

Gruß Sepp

Anzeige
AW: mehrstufige Ordnerstruktur mit mkdir
05.11.2017 11:17:04
Werner
Hallo Sepp,
Danke für Dein Beispiel. Das war genau das, was ich gesucht habe.

Mein Problem ist gelöst
.
Gruß
Werner
AW: mehrstufige Ordnerstruktur mit mkdir
05.11.2017 14:43:35
Werner
Hallo Sepp,
Danke für Deine Antwort. Ich habe Deinen Vorschlag im Einsatz. Mein Problem ist somit gelöst.

Gruß
Werner
AW: mehrstufige Ordnerstruktur mit mkdir
05.11.2017 11:09:14
Werner
Hallo Hajo,
die Stelle, an der ich das Problem habe, ist ein winziger Teil einer sehr umfangreichen Makro-Umgebung. Ich habe aber ein kleines Musterprogramm erstellt:

Sub demo()
Dim NewPfad As String
NewPfad = "D:\stufe1\stufe2\stufe3"
MkDir Chr(34) & NewPfad & Chr(34)
End Sub

Das Problem in meinem großen Makro: ich möchte nicht immer prüfen, ob das Verzeichnis vorhanden ist. Deshalb habe ich vor dem MKDIR ein "on error resume next"
Ohne diesen "on error..." erhalte ich einen Laufzeitfehler 76 und die Nachricht "Pfad nicht gefunden".
Gruß
Werner
Anzeige
Odnerstrukturen VBA-Lösung ohne API
05.11.2017 14:38:00
Daniel
Hi
das Problem ist, das in VBA das mkDir immer nur die letzte Ordnerstufe erstellen kann (in deinem Fall also den Ordner "stufe3").
Wenn man jetzt aber mehrere Stufen gleichzeitig hat, muss man in VBA in einer Schleife über die Struktur gehen und jeden Ordner nacheinander erstellen:
Dim ZielPfad As String
Dim TeilPfad As String
Dim TT
Dim i
ZielPfad = "d:\stufe1\stufe2\stufe3"
TT = Split(ZielPfad, "\")
TeilPfad = TT(0)
For i = 1 To UBound(TT)
TeilPfad = TeilPfad & "\" & TT(i)
If Dir(TeilPfad, vbDirectory) = "" Then MkDir TeilPfad
Next
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Mehrstufige Ordnerstruktur mit VBA erstellen


Schritt-für-Schritt-Anleitung

Um eine mehrstufige Ordnerstruktur in Excel mit VBA zu erstellen, kannst du die MkDir-Anweisung verwenden. Beachte jedoch, dass MkDir in VBA nur einen einzelnen Ordner erstellen kann. Für eine mehrstufige Struktur musst du eine Schleife verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Füge ein Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:
Sub OrdnerstrukturErstellen()
    Dim ZielPfad As String
    Dim TeilPfad As String
    Dim TT
    Dim i

    ZielPfad = "D:\stufe1\stufe2\stufe3"
    TT = Split(ZielPfad, "\")
    TeilPfad = TT(0)

    For i = 1 To UBound(TT)
        TeilPfad = TeilPfad & "\" & TT(i)
        If Dir(TeilPfad, vbDirectory) = "" Then MkDir TeilPfad
    Next
End Sub
  1. Passe den Pfad an: Ändere ZielPfad auf den gewünschten Ordnerpfad.
  2. Führe das Makro aus: Drücke F5, um das Makro auszuführen und die Ordnerstruktur zu erstellen.

Häufige Fehler und Lösungen

  • Fehler 76: Pfad nicht gefunden
    Dies kann auftreten, wenn der übergeordnete Ordner nicht existiert. Stelle sicher, dass alle übergeordneten Ordner vorhanden sind, bevor du die Unterordner erstellst.

  • Laufzeitfehler bei MkDir
    Wenn du versuchst, einen Ordner zu erstellen, der bereits existiert, wird ein Laufzeitfehler angezeigt. Verwende On Error Resume Next, um diesen Fehler zu ignorieren, oder prüfe mit Dir, ob der Ordner bereits existiert.


Alternative Methoden

Eine weitere Möglichkeit, eine Ordnerstruktur in Excel zu erstellen, ist die Verwendung von API-Funktionen. Hier ein Beispiel:

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub APIOrdnerErstellen()
    Dim strPath As String
    strPath = "D:\stufe1\stufe2\stufe3"

    If MakeSureDirectoryPathExists(strPath) <> 0 Then
        MsgBox "Der Pfad wurde erfolgreich angelegt!"
    End If
End Sub

Diese Methode ist effektiver, da sie die gesamte Struktur in einem Schritt erstellt.


Praktische Beispiele

  1. Ordnerstruktur aus Excel-Liste erstellen: Du kannst eine Excel-Liste verwenden, um mehrere Ordner gleichzeitig zu erstellen. Angenommen, du hast eine Liste in Spalte A:
Sub OrdnerAusListeErstellen()
    Dim Zelle As Range
    Dim ZielPfad As String

    ZielPfad = "D:\"

    For Each Zelle In Range("A1:A10") ' Passe den Bereich an
        If Len(Zelle.Value) > 0 Then
            MkDir ZielPfad & Zelle.Value
        End If
    Next Zelle
End Sub
  1. Mehrere Ordner in einer Schleife erstellen: Wenn du viele Ordner gleichzeitig erstellen möchtest, kannst du eine Schleife verwenden, um sie nacheinander zu erstellen.

Tipps für Profis

  • Verwende On Error Resume Next: Dies kann hilfreich sein, um Laufzeitfehler zu vermeiden, die auftreten, wenn ein Ordner bereits existiert.
  • Nutze die API-Funktionen: API-Funktionen sind oft leistungsfähiger und ermöglichen das Erstellen von kompletten Verzeichnissen in einem Schritt.
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um den Code verständlicher zu machen, insbesondere, wenn du in einem Team arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der gesamte Pfad existiert?
Verwende die API-Funktion MakeSureDirectoryPathExists, um sicherzustellen, dass alle übergeordneten Ordner erstellt werden.

2. Kann ich mehrere Ordner auf einmal erstellen?
Ja, du kannst eine Schleife verwenden, um mehrere Ordner basierend auf einer Liste in Excel zu erstellen.

3. Was ist der Unterschied zwischen MkDir und MakeSureDirectoryPathExists?
MkDir erstellt nur den letzten Ordner im Pfad, während MakeSureDirectoryPathExists die gesamte Struktur in einem Schritt erstellt.

4. Welche Excel-Version benötige ich für diese VBA-Skripte?
Die Skripte sollten in allen modernen Excel-Versionen (Excel 2007 und höher) funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige