Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1588to1592
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige