Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1196to1200
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

Ordner- und Unterordnerstrukturen anlegen

Ordner- und Unterordnerstrukturen anlegen
sruhsam
Hallo Profis
habe ein Problem beim automatischen erstellen von Verzeichnisse aus Excel heraus.
Ziel ist es durch die in Excel eingegebene Daten eine Ordnerstruktur zu erstellen. Dies soll in 3 Stufen gegliedert sein.
1. Stufe:
Einfaches erstellen von Verzeichnisse im Pfad (B1). Die Ordnernamen sollen dabei so heisen wie die Werte der Zellen A4 bis A100.
2.Stufe:
Erstellen von Unterordner in alle Ordner der Stufe 1(A4 bis A100)
Die Unterordner sollen dabei so heisen wie die Werte der Zellen C4 bis C100.
3.Stufe
Erstellen von weitere Unterordner der Stufe 2 (C4 bis C100)
Die Unterordner sollen dabei so heisen wie die Werte der Zellen E4 bis E100.
Grundsätzlich sollen bereits vorhandene Orden oder Unterordner nicht neu erstellt werden. Leerzeilen können übersprungen werden.
Beim klick auf "alle" werden alle Ordner erstellt. Beim Klick auf "einzeln" nur die der aktiven Zelle
Habe gedacht dies über mehrere Schaltflächen die den Stufen zugeordnet sind zu machen.
Kann mir hier jemand helfen?
Anbei Beispieldatei: https://www.herber.de/bbs/user/73222.xls
AW: Ordner- und Unterordnerstrukturen anlegen
25.01.2011 11:45:57
Josef

Hallo ?,
heir mal ein Ansatz für alle Ordner.
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

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

Sub alle()
  Dim lngRow As Long, lngLast As Long
  Dim strPath As String
  
  lngLast = Application.Max(4, Cells(Rows.Count, 1).End(xlUp).Row)
  
  
  For lngRow = 4 To lngLast
    strPath = ""
    If Cells(lngRow, 1) <> "" Then
      strPath = IIf(Right(Range("b1").Text, 1) = "\", Range("B1").Text, Range("B1").Text & "\")
      If Cells(lngRow, 1) <> "" Then
        strPath = strPath & IIf(Right(Cells(lngRow, 1).Text, 1) = "\", Cells(lngRow, 3).Text, _
          Cells(lngRow, 1).Text & "\")
        
        If Cells(lngRow, 3) <> "" Then
          strPath = strPath & IIf(Right(Cells(lngRow, 3).Text, 1) = "\", Cells(lngRow, 3).Text, _
            Cells(lngRow, 3).Text & "\")
          
          If Cells(lngRow, 5) <> "" Then
            strPath = strPath & IIf(Right(Cells(lngRow, 5).Text, 1) = "\", Cells(lngRow, 5).Text, _
              Cells(lngRow, 5).Text & "\")
          End If
        End If
      End If
    End If
    If Len(strPath) Then MakeSureDirectoryPathExists strPath
  Next
End Sub

P.S.: Ein Ordnername mit / ist ungültig!

Gruß Sepp

Anzeige
AW: Ordner- und Unterordnerstrukturen anlegen
25.01.2011 11:51:38
Tino
Hallo,
müsste so funktionieren,
allerdings kannst Du für einen Ordnernamen keine Sonderzeichen
wie /?! usw... verwenden.
Option Explicit

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

Sub Test()
Dim sPahth As String
Dim A As Long, B As Long, C As Long
Dim Array1(), Array2(), Array3(), sOrnder$

With Tabelle1
    Array1 = .Range("A4", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 2).Value2
    Array2 = .Range("C4", .Cells(.Rows.Count, 3).End(xlUp)).Resize(, 2).Value2
    Array3 = .Range("E4", .Cells(.Rows.Count, 5).End(xlUp)).Resize(, 2).Value2
    
    Redim Preserve Array1(1 To Ubound(Array1), 1 To 1)
    Redim Preserve Array2(1 To Ubound(Array2), 1 To 1)
    Redim Preserve Array3(1 To Ubound(Array3), 1 To 1)
    
    sPahth = .Cells(1, 2)
    sPahth = IIf(Right$(sPahth, 1) = "\", sPahth, sPahth & "\")
End With

For A = 1 To Ubound(Array1)
    For B = 1 To Ubound(Array2)
        sOrnder = Array1(A, 1)
        If Right$(sOrnder, 1) <> "\" Then
            sOrnder = sOrnder & "\"
        End If
        sOrnder = sOrnder & Array2(B, 1)
        
        For C = 1 To Ubound(Array3)
            If Right$(sOrnder, 1) <> "\" Then
                sOrnder = sOrnder & "\"
            End If
            apiCreateFullPath sPahth & sOrnder & Array3(C, 1)
        Next
    Next
Next

End Sub
Gruß Tino
Anzeige
AW: Ordner- und Unterordnerstrukturen anlegen
25.01.2011 11:56:06
Tino
Hallo,
mach aus der Zeile
apiCreateFullPath sPahth & sOrnder & Array3(C, 1)
diese zwei Zeilen
Array3(C, 1) = IIf(Right$(Array3(C, 1), 1) = "\", Array3(C, 1), Array3(C, 1) & "\")
apiCreateFullPath sPahth & sOrnder & Array3(C, 1)
Gruß Tino
gekürzte Variante
25.01.2011 12:22:41
Tino
Hallo,
hier noch eine gekürzte Variante.
Option Explicit

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

Sub Test()
Dim sPahth As String
Dim A As Long, B As Long, C As Long
Dim Array1(), Array2(), Array3(), sOrnder$

With Tabelle1
    Array1 = .Range("A4", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 2).Value2
    Array2 = .Range("C4", .Cells(.Rows.Count, 3).End(xlUp)).Resize(, 2).Value2
    Array3 = .Range("E4", .Cells(.Rows.Count, 5).End(xlUp)).Resize(, 2).Value2

    sPahth = IIf(Right$(.Cells(1, 2), 1) = "\", .Cells(1, 2), .Cells(1, 2) & "\")
End With

For A = 1 To Ubound(Array1)
    For B = 1 To Ubound(Array2)
        sOrnder = Replace(Array1(A, 1), "\", "")
        sOrnder = sOrnder & "\" & Replace(Array2(B, 1), "\", "")
        For C = 1 To Ubound(Array3)
            apiCreateFullPath sPahth & sOrnder & "\" & Replace(Array3(C, 1), "\", "") & "\"
        Next
    Next
Next

End Sub
Gruß Tino
Anzeige
AW: Ordner- und Unterordnerstrukturen anlegen
25.01.2011 12:51:35
sruhsam
Hallo Timo, Lösung funktioniert bestens. Supper habe nicht so schnell mit einer Lösung gerrechnet.
Können wir noch abfangen, wenn Ordner in der Struktur bereits existieren, daß diese angezeigt werden und entschieden werden kann ob überschrieben werden darf oder nicht?
Grüße
Stephan

Die Datei https://www.herber.de/bbs/user/73223.xls wurde aus Datenschutzgründen gelöscht


AW: Ordner- und Unterordnerstrukturen anlegen
25.01.2011 13:31:02
Tino
Hallo,
bei dieser API Funktion werden vorhandene Ordner nicht überschrieben
sondern nur nichtvorhandene angelegt.
Du kannst aber enthaltene Dateien löschen.
Beispiel:
Option Explicit

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

Sub Test()
Dim sPahth As String
Dim A As Long, B As Long, C As Long
Dim Array1(), Array2(), Array3(), sOrnder$
Dim lngPath As Long, intMsg As Integer

With Tabelle1
    Array1 = .Range("A4", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 2).Value2
    Array2 = .Range("C4", .Cells(.Rows.Count, 3).End(xlUp)).Resize(, 2).Value2
    Array3 = .Range("E4", .Cells(.Rows.Count, 5).End(xlUp)).Resize(, 2).Value2

    sPahth = IIf(Right$(.Cells(1, 2), 1) = "\", .Cells(1, 2), .Cells(1, 2) & "\")
End With

intMsg = MsgBox("Sollen vorhandene Dateien gelöscht werden?", vbYesNo + vbQuestion)
For A = 1 To Ubound(Array1)
    For B = 1 To Ubound(Array2)
        sOrnder = Replace(Array1(A, 1), "\", "")
        sOrnder = sOrnder & "\" & Replace(Array2(B, 1), "\", "")
        For C = 1 To Ubound(Array3)
           lngPath = apiCreateFullPath(sPahth & sOrnder & "\" & Replace(Array3(C, 1), "\", "") & "\")
           If intMsg = vbYes Then
            If lngPath <> 0 Then
                 If Dir(sPahth & sOrnder & "\" & Replace(Array3(C, 1), "\", "") & "\*.*", vbNormal) <> "" Then
                     Kill sPahth & sOrnder & "\" & Replace(Array3(C, 1), "\", "") & "\*.*"
                 End If
            End If
           End If
        Next
    Next
Next

End Sub
Bin jetzt nicht mehr Online
Gruß Tino
Anzeige
AW: Ordner- und Unterordnerstrukturen anlegen
25.01.2011 13:35:15
sruhsam
Hallo Timo, Lösung funktioniert bestens. Supper habe nicht so schnell mit einer Lösung gerrechnet.
Können wir noch folgendes abfangen,
1.) wenn Ordner in der Struktur bereits existieren, daß diese angezeigt werden und entschieden werden kann ob überschrieben werden darf oder nicht?
2.) wenn keine Werte in der 3. oder 2. oder 1. Stufe eingegeben werden soll auch in der betreffenden Stufe nichts passieren.
Ist in der 2. und 3. Stuffe nichts drinn soll nur die 1. Stufe berücksichtigt werden.
Ist in der 3. Stufe nichts angegeben, sollen nur die ersten beiden Stufen berücksichtigt werden.
Grüße
Stephan
Anbei die bisherige Datei in der ich die Korrektur eingebracht habe!

Die Datei https://www.herber.de/bbs/user/73223.xls wurde aus Datenschutzgründen gelöscht


Anzeige

112 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige