Freigeben über

Verzeichnisstruktur von Excel in Win Explorer übernehmen

Anonym
2024-09-05T12:05:01+00:00

Hallo,

ich habe viele Beispiele darüber gelesen, wie man eine Verzeichnisstruktur aus Excel heraus erstellen kann.

Aber ich möchte es gerne umgekehrt machen.
Ich habe eine Verzeichnisstruktur in Excel erstellt und möchte diese nun gerne in den Windows Explorer übernehmen, sodass sich die komplette Struktur dort quasi selbst erstellt (inkl. Unterordner).

Ist das überhaupt möglich?
Und wenn ja... wie mache ich das?

Danke und Grüße,

IM

Microsoft 365 und Office | Excel | Geschäftlich | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
{count} Stimmen

10 Antworten

Sortieren nach: Am hilfreichsten
  1. Andreas Killer 144K Zuverlässigkeitspunkte Freiwilliger Moderator
    2024-09-06T07:36:15+00:00

    Ich weiß sehr gut, was VBA ist und auch was ein VBA-Makro ist und ich habe schon eine Menge davon erstellt :-)

    Aber ich kam mit Deinem ersten Absatz nicht wirklich klar.

    Vor allem, was mit "Example_FolderCreate ausführen" gemeint ist und wo der "Direktbereich" sich im VBA-Editor befindet. Diese Begriffe sagten mir nichts.

    Hmmm...

    Example_FolderCreate ist ein Makro. Und ein Makro kann man ausführen / aufrufen / laufen lassen / ichweissnichtwiedudasnennst. Steht auch so in dem Artikel den ich Dir verlinkt hatte... lesen musst Du ihn.

    Im VBA Editor gibt es oben ein Menü, darin Ansicht und darin den Direktbereich. Oder drück STRG+G. In dem Bereich kann man u.a. Ausgaben mit Debug.Print machen.

    BTW, im Menü gibt es auch den Punkt Einfügen und darin Modul. Da gehört i.d.R. ein Code rein.

    Mein gut gemeinter Rat: Google mal nach "Excel VBA Tutorial" und arbeite Dich da rein. Aus meiner Sicht kennst Du gerade mal die Handvoll Schnee auf der Spitze des Eisberges. Ist nicht schlimm, jeder hat so angefangen, auch ich. Nur ist das bei mir schon über 30 Jahre her und ich hab vorher schon mit anderen Programiersprachen rumprobiert.

    Ganz wichtig: Schau Dir mal an wie man ein Makro debuggt!

    Wenn Dir Example_FolderCreate zu kompliziert ist, dann schreib Dir selbst eine Routine die die Zellen abklappert und die Pfade der Struktur als String zusammenfasst, den übergibt an FolderCreate und die Function macht Dir den kompletten Pfad auf der Festplatte. Anders herum geht auch, übergibt den Pfad an FolderDelete und es wird der komplette Pfad mit Unterverzeichnissen gelöscht.

    Mut zur Lücke, wird schon klappen.

    Andreas.

    0 Kommentare Keine Kommentare
  2. Anonym
    2024-09-06T06:19:50+00:00

    Hallo Andreas,

    zunächst danke für Deine weitere Antwort. Aber das hast Du falsch verstanden.

    Ich weiß sehr gut, was VBA ist und auch was ein VBA-Makro ist und ich habe schon eine Menge davon erstellt :-)

    Aber ich kam mit Deinem ersten Absatz nicht wirklich klar.

    Vor allem, was mit "Example_FolderCreate ausführen" gemeint ist und wo der "Direktbereich" sich im VBA-Editor befindet. Diese Begriffe sagten mir nichts.

    Vielleicht kannst Du mir das ja doch nochmal kurz beschreiben.

    Hier habe ich mal eine Testdatei erstellt in Excel, mit der ich es zunächst mal testen würde:

    Testdatei

    Danke Dir.

    Schöne Grüße,

    IM

    0 Kommentare Keine Kommentare
  3. Andreas Killer 144K Zuverlässigkeitspunkte Freiwilliger Moderator
    2024-09-05T16:02:26+00:00

    Ingo,

    Mit anderen Worten: Du weißt noch nicht mal was VBA / ein Makro ist...!?

    Ich hab leider im Moment keine Zeit das von Null auf zu erklären. Hier ist ein Anfang: https://support.microsoft.com/de-de/office/ausf%C3%BChren-eines-makros-5e855fd2-02d1-45f5-90a3-50e645fe3155

    Es gibt auch diverse Videos auf YouTube, arbeite Dich da mal rein. Dann baust Du mein Beispiel einfach mal nach und kuckst was passiert.

    Vorher ein Backup der Festplatte machen, wenn man damit herumprobiert... selbes Prinzip wie mit Kondomen: Besser eins haben und keins brauchen, als keins haben und eins brauchen. ;-)

    Andreas.

    0 Kommentare Keine Kommentare
  4. Anonym
    2024-09-05T12:49:38+00:00

    Hallo Andreas,

    WOW, vielen Dank für die Mühe. Das sieht ja hoch professionell aus ;-)

    Nur... könntest Du mir den Anfang noch ein bisschen eingehender erklären - also was ich genau wo machen muss?

    Ich habe verstanden, dass ich die Excel-Datei in dem Verzeichnis speichern muss, wo die Struktur später erstellt werden soll (also das neue Stammverzeichnis).

    Was ist mit "in ein reguläres Modul" gemeint?

    Ich vermute mal, dass Du den VBA-Editor meinst, den man mit Alt+F11 öffnen kann in Excel...

    Und dann würde ich noch gerne wissen, was mit "Example_FolderCreate ausführen" gemeint ist und wo der "Direktbereich" sich im VBA-Editor befindet.

    Wäre schön, wenn Du hierzu nochmal helfen könntest, damit ich Deinen Vorschlag auch richtig umsetzen kann.

    Danke und Grüße,

    IM

    0 Kommentare Keine Kommentare
  5. Andreas Killer 144K Zuverlässigkeitspunkte Freiwilliger Moderator
    2024-09-05T12:40:50+00:00

    Datei dort abspeichern wo die Struktur erstellt werden soll

    Den Code unten in ein reguläres Modul

    Example_FolderCreate ausführen und im VBA-Editor in den Direktbereich kucken, sieht bei mir dann so aus:

    Z:\a\b\c\x\y\z
    Z:\a\b\d\e\x\y\z
    Z:\q\w\e\r\t\x\y\z

    Wenn alles passt dann Develop = False setzen und Example_FolderCreate erneut ausführen.

    Andreas.

    Option Explicit

    #Const Develop = True

    Sub Example_FolderCreate()
    Dim Data, Index, This
    Dim i As Long
    Dim Folder As String

    'Read in all values
    Data = Range("A1").CurrentRegion.Value
    'Create a row pointer for each column
    ReDim Index(1 To UBound(Data, 2))
    'Create an array for the folder items
    ReDim This(0 To UBound(Data, 2))
    'Main path
    This(0) = ThisWorkbook.Path

    'Initialize
    For i = 1 To UBound(Data, 2)
    Index(i) = 1
    Next

    Do
    'Copy the items into our array
    For i = 1 To UBound(Data, 2)
    This(i) = Data(Index(i), i)
    Next
    'Create the path
    Folder = Join(This, "")

    #If Develop Then
    Debug.Print Folder
    #Else
    'Create it on disk
    If Not FolderCreate(Folder) Then
    MsgBox Folder, vbCritical, "Can not create:"
    Exit Sub
    End If
    #End If

    'Find next item  
    i = UBound(Data, 2)  
    Do  
      'Last row?  
      If Index(i) = UBound(Data) Then  
    

    EndRow:
    'Start this column again from first row
    Index(i) = 1
    'Go one column left
    i = i - 1
    'Done?
    If i < 1 Then Exit Sub
    Else
    'Next row
    Index(i) = Index(i) + 1
    'Empty?
    If IsEmpty(Data(Index(i), i)) Then
    'Start over
    GoTo EndRow
    Else
    'Create this one in the next round
    Exit Do
    End If
    End If
    Loop
    Loop
    End Sub

    Function FolderCreate(ByVal Path As String) As Boolean
    'Creates a complete sub directory structure
    Dim Temp, i As Integer
    On Error GoTo ExitPoint
    If Dir(Path, vbDirectory) = "" Then
    If Right$(Path, 1) = "" Then Path = Left$(Path, Len(Path) - 1)
    If Left$(Path, 2) = "\" Then
    i = InStr(3, Path, "")
    Temp = Split(Mid$(Path, i + 1), "")
    Temp(0) = Left$(Path, i) & Temp(0)
    Else
    Temp = Split(Path, "")
    End If
    Path = ""
    For i = 0 To UBound(Temp)
    Path = Path & Temp(i) & ""
    If Dir(Path, vbDirectory) = "" Then MkDir Path
    Next
    End If
    FolderCreate = True
    ExitPoint:
    End Function

    Function FolderDelete(ByVal Path As String) As Boolean
    'Deletes a complete sub directory structure
    Dim This As String
    Dim Temp, i As Integer
    On Error GoTo ExitPoint
    If Right$(Path, 1) <> "" Then Path = Path & ""
    This = Path
    Do
    Do
    If Dir(This & "*.*") <> "" Then Kill This & "*.*"
    Temp = Dir(This, vbDirectory)
    Do While Temp = "." Or Temp = ".."
    Temp = Dir
    Loop
    If Temp = "" Then
    Exit Do
    Else
    This = This & Temp & ""
    End If
    Loop
    RmDir This
    If This = Path Then
    Exit Do
    Else
    Temp = Split(This, "")
    ReDim Preserve Temp(0 To UBound(Temp) - 1)
    Temp(UBound(Temp)) = ""
    This = Join(Temp, "")
    End If
    Loop
    FolderDelete = True
    ExitPoint:
    End Function

    0 Kommentare Keine Kommentare