Betrifft: Ordner- und Unterordnerstrukturen anlegen
von: sruhsam
Geschrieben am: 25.01.2011 11:19:42
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: http://www.herber.de/bbs/user/73222.xls
Betrifft: AW: Ordner- und Unterordnerstrukturen anlegen
von: Josef Ehrensberger
Geschrieben am: 25.01.2011 11:45:57
Betrifft: AW: Ordner- und Unterordnerstrukturen anlegen
von: Tino
Geschrieben am: 25.01.2011 11:51:38
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 SubGruß Tino
Betrifft: AW: Ordner- und Unterordnerstrukturen anlegen
von: Tino
Geschrieben am: 25.01.2011 11:56:06
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
Betrifft: gekürzte Variante
von: Tino
Geschrieben am: 25.01.2011 12:22:41
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 SubGruß Tino
Betrifft: AW: Ordner- und Unterordnerstrukturen anlegen
von: sruhsam
Geschrieben am: 25.01.2011 12:51:35
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
http://www.herber.de/bbs/user/73223.xls
Betrifft: AW: Ordner- und Unterordnerstrukturen anlegen
von: Tino
Geschrieben am: 25.01.2011 13:31:02
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 SubBin jetzt nicht mehr Online
Betrifft: AW: Ordner- und Unterordnerstrukturen anlegen
von: sruhsam
Geschrieben am: 25.01.2011 13:35:15
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!
http://www.herber.de/bbs/user/73223.xls
Betrifft: AW: Ordner- und Unterordnerstrukturen anlegen
von: Tino
Geschrieben am: 26.01.2011 07:54:37
Hallo,
hier die Datei, kannst ja mal testen.
http://www.herber.de/bbs/user/73240.xls
Gruß Tino
| |