Excel 2013 bzw. 2010 - Per Makro aus Zelleninhalten Ordner erstellen

kaschdewasser

Lt. Junior Grade
Registriert
Aug. 2005
Beiträge
273
Hallo zusammen,

habe folgenden Code im Internet zum automatischen Erstellen von Ordnern anhand von Informationen aus Zellen gefunden:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngLetzteZeile As Long
Dim strOrdner As String
Dim strVerzeichnis As String
Dim intspalte As Integer
Dim objFSO As Object
Dim objFO As Object
Dim objF As Object

If Not Target.Column = 1 And Not Target.Column = 9 Then Exit Sub
If Target.Count > 1 Then Exit Sub

intspalte = Target.Column

strVerzeichnis = "C:\Temp\Probe"

If intspalte = 1 Then
strOrdner = Target.Text & "_" & Target.Offset(0, 8).Text
intspalte = 8
Else
strOrdner = Target.Offset(0, -8).Text & "_" & Target.Text
intspalte = -8
End If

With ActiveSheet
lngLetzteZeile = IIf(IsEmpty(.Range("A65536")), .Range("A65536").End(xlUp).Row, 65536)

If Not Intersect(Target, Range("A1:I" & lngLetzteZeile)) Is Nothing Then
If Target.Value <> "" And Target.Offset(0, intspalte) <> "" Then
If Dir(strVerzeichnis & strOrdner, vbDirectory) <> "" Then
Select Case MsgBox("Ordner wird gelöscht und neu erstellt! Möchten Sie das?", _
vbYesNo Or vbExclamation Or vbDefaultButton1, "Ordner löschen!")
Case vbYes
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFO = objFSO.GetFolder(strVerzeichnis & strOrdner)
objFO.Delete
MkDir strVerzeichnis & strOrdner
.Hyperlinks.Add Anchor:=.Cells(Target.Row, 31), Address:=strVerzeichnis & strOrdner
.Columns(31).AutoFit
Exit Sub
Case vbNo
Exit Sub
End Select
Else
MkDir strVerzeichnis & strOrdner
.Hyperlinks.Add Anchor:=.Cells(Target.Row, 31), Address:=strVerzeichnis & strOrdner, TextToDisplay:="Dateien"
.Columns(31).AutoFit
End If
End If
End If
End With
End Sub


Funktioniert auch soweit.

Ich habe selbst keine Ahnung von VBA, deswegen jetzt folgende Frage:

Wie muss ich den Code modifizieren, damit

strVerzeichnis = "C:\Temp\Probe"

so angepasst wird:

C:\temp\ZELLENINHALT I\ZELLENINHALT B\ZELLENINHALT J\?

Dabei ist zu beachten, dass Zelleninhalt I ein Inhalt ist, der mehrfach in der Datei vorkommen wird. Die bereits vorhandenen Dokumente in dem Verzeichnis auf der Festplatte dürfen nicht gelöscht oder überschrieben werden, sondern die Unterordner "Zelleninhalt B\Zelleinhalt J\ als Unterordner angelegt.

Die Ordner sollten dazu erst erstellt werden, wenn in Zelle o etwas drinsteht.


Über Hilfe würde ich mich sehr freuen!

Besten Dank!
 
Bah, ekelhaft, VBA. Eine viel zu verbreitete Altlast aus den makro-schwangeren Tagen vergangener Jahre. Das könnte man so schön in ein Addin gießen...

Folgende Gedanken zu deiner Idee, ggf. in pseudo-Code der c#-ähnlich ausfallen wird:

a) Erstmal müsstest du (Zelleninhalt i).Text oder (Zelleninhalt i).Content bzw. die entsprechende VBA-Funktion verwenden, um den tatsächlichen Inhalt der Zelle abzufragen. Falls die Zellen auch Leerzeichen beinhalten können, ggf. Anführungszeichen drum setzen, damit das Ganze als ein String behandelt wird, also so ähnlich als würde man in der CMD einen Pfad mit Leerzeichen angeben: "C:\Temp und Temp\o Tempora o Mores"

b) Falls du eine Struktur abfragst, die übergeordnete und untergeordnete Verzeichnisse beinhaltet, musst du eine geschachtelte Prüfung einbauen, die erfasst ob der Ordner und oder seine Unterordner bereits vorhanden sind:
[Sinngemäß]
if test-path C:\temp\Zelleninhalt I = true
-> if test-path C:\temp\Zelleninhalt I\Zelleninhalt B\ = true
-> -> if test-path C:\temp\Zelleninhalt I\Zelleninhalt B\Zelleninhalt J\ = true
--> --> --> <nix machen>
-> -> else
-> -> <neuen Ordner anlegen für Zelleninhalt J>
-> else
-> <neuen Ordner anlegen für Zelleninhalt B>
else
<neuen Ordner anlegen für Zelleninhalt I>


In Powershell könnte man sowas z.B. mit Get-ChildItem abfragen. Du siehst, es ist also nicht mit "mal eben" Pfad anpassen getan. Weiterhin keine Gewähr für Richtigkeit, Vollständigkeit oder Effizienz meiner vorgeschlagenen Lösung (geschachtelte ifs sind bisweilen...aufwändig).

Hoffe, es hilft trotzdem ein wenig. Den Programmcode dazu kann und werde ich dir jedoch nicht schreiben.
 
Zurück
Oben