Hi Michl,
das ist nicht trivial.
Hab ich schon mal gemacht.
Du musst als erstes das Ziel-Verzeichnis auslesen und in eine Tabelle schreiben.
Dabei ist mir nicht gelungen, das über mehrere Tiefen auf eimal zu machen, sondern nur mit Schleife. verteilt auf mehrere Blätter
Wenn du das Ergebnis in Excel stehen hast, muss dein Code entscheiden, wo die Vorlage hinkopiert werden soll.
und diese umbenennen war bei mir nicht nötig.
Ich saß bei meiner Aufgabe längere Zeit (1 Woche dran) bis es so funktionierte, wie ich wollte.
Ich poste dir mal den Code, vielleicht kannste was davon übernehmen:
Code:
Option Explicit
Dim strPfad As String ' Suchpfad zum Auslesen Firmen
Dim lngNext As Long ' Zähler zum Auslesen
Dim strFirma As String ' Gefundendene Firma für Auslesen Projekte
Dim VX ' Feldvariable um Schreibvorgang Projekt und Firmen zu beschleunigen
Dim strLaufW As String '
Private Sub Ordnername_einlesen()
' jsks: Verwendet auch Variablen, die auf Modul-Ebene dimensioniert sind
' Dim strPfad As String # verlegt auf Modulebene
' Dim lngNext As Long # verlegt auf Modulebene
' strPfad = "K:\" # verlegt auf Modulebene
Dim objFSO As Object
Dim objFolder As Object
Dim objSubfolder As Object, colSubfolders As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPfad)
Set colSubfolders = objFolder.Subfolders
' lngNext = Application.Max(2, Cells(Rows.Count, 1).End(xlUp).Row + 1)
For Each objSubfolder In colSubfolders
If IsError(Application.Match(objSubfolder.Name, Columns(1), 0)) Then
' Cells(lngNext, 1).Value = objSubfolder.Name
' Cells(lngNext, 2).Value = strFirma
VX(lngNext - 1, 1) = objSubfolder.Name
VX(lngNext - 1, 2) = strFirma
lngNext = lngNext + 1
End If
Next objSubfolder
Set objFolder = Nothing
Set colSubfolders = Nothing
Set objFSO = Nothing
End Sub
Private Sub Projektname_einlesen()
' jsks: Damit wird Tabellenblatt Projekt gefüllt
' jsks: Verwendet auch Variablen, die auf Modul-Ebene dimensioniert sind
' jsks: Dim strFirma As String # verlegt auf Modulebene
Dim int_i As Integer
ReDim VX(1 To 10000, 1 To 2) As Variant
lngNext = 2
ThisWorkbook.Sheets("Projekt").Range("A2:B11000").Clear
ThisWorkbook.Sheets("Projekt").Columns(1).NumberFormat = "@"
' jsks: auskommentieren nächste Zeile
ThisWorkbook.Sheets("Projekt").Activate
For int_i = 2 To ThisWorkbook.Sheets("Datenpflege").Range("B1")
If ThisWorkbook.Sheets("Firmen").Cells(int_i, 1) = "" Then Exit For
strFirma = ThisWorkbook.Sheets("Firmen").Cells(int_i, 1)
strPfad = strLaufW & strFirma & "\"
Call Ordnername_einlesen
'' jsks: auskommentieren nächste Zeile
' Cells(lngNext, 1).Select
Next int_i
ThisWorkbook.Sheets("Projekt").Range("A2:B10002") = VX
End Sub
'--------------------------------
Private Sub Firmen_einlesen()
' jsks: Verwendet auch Variablen, die auf Modul-Ebene dimensioniert sind
' jsks: Füllt Tabellenblatt Firmen und schreibt Formel in Zelle B2
ReDim VX(1 To 1000, 1 To 2) As Variant
lngNext = 2
ThisWorkbook.Sheets("Firmen").Activate
strPfad = strLaufW
ThisWorkbook.Sheets("Firmen").Range("A2:A" & ThisWorkbook.Sheets("Datenpflege").Range("B1")).Clear
Call Ordnername_einlesen
ThisWorkbook.Sheets("Firmen").Range("A2:B1002") = VX
ThisWorkbook.Sheets("Firmen").Range("B2:B" & lngNext + 100).FormulaLocal = "=WENN(ISTZAHL(FINDEN(""."";RECHTS(A2;8)));TEIL(RECHTS(A2;8);FINDEN(""."";RECHTS(A2;8))+1;99);"""")"
ThisWorkbook.Sheets("Datenpflege").Range("B3") = lngNext - 1
'Projektname_einlesen
End Sub
Private Sub jsks_copy_folder()
' jsks: nicht mehr verwendet, Versuchsballon
Dim Neu_Ordn_Name As Variant
Dim FsyObjekt As Object
Neu_Ordn_Name = "Tesat"
Set FsyObjekt = CreateObject("Scripting.FileSystemObject")
MkDir "C:\temp\" & Neu_Ordn_Name
FsyObjekt.CopyFolder "K:\# --Musterprojekt - TD", "c:\Temp\" & Neu_Ordn_Name
End Sub
Private Sub Firma_auswaehlen()
' jsks: Damit werden neue Projekte zu den vorhandenen Firmen angelegt im Laufwerk K:\
' jsks: Verwendet auch Variablen, die auf Modul-Ebene dimensioniert sind
Dim strOrdner_Custom As Variant
Dim strProjekt As Variant
Dim FsyObjekt As Object
Dim a
strProjekt = ThisWorkbook.Sheets("R1 - Projekte").Cells(Selection.Row, 1)
'strOrdner_Custom = InputBox("Ordner auswählen", strProjekt, ThisWorkbook.Sheets("R1 - Projekte").Cells(Selection.Row, 10))
strOrdner_Custom = ThisWorkbook.Sheets("R1 - Projekte").Cells(Selection.Row, 10)
If strOrdner_Custom = "" Then Exit Sub
ChDir strLaufW & strOrdner_Custom
strPfad = strLaufW & strOrdner_Custom
'ThisWorkbook.Sheets("ttt").Activate
'ThisWorkbook.Sheets("ttt").Cells.Clear
'ThisWorkbook.Sheets("ttt").Cells(1, 1) = strPfad
'Call Ordnername_einlesen
'a = MsgBox("Projekt nicht vorhanden?" & vbCrLf & "Anlegen?", vbOKCancel, strProjekt)
'Stop
'If a <> 1 Then Exit Sub
On Error GoTo Faehler
Set FsyObjekt = CreateObject("Scripting.FileSystemObject")
MkDir strPfad & "\" & strProjekt
FsyObjekt.CopyFolder "K:\# --Musterprojekt - TD", strPfad & "\" & strProjekt
ThisWorkbook.Sheets("R1 - Projekte").Activate
'ThisWorkbook.Sheets("R1 - Projekte").Cells(Selection.Row, 12).Select
'ThisWorkbook.Sheets("R1 - Projekte").Cells(Selection.Row, 12).FormulaR1C1 = "erledigt"
Exit Sub
Faehler:
a = MsgBox("Da stimmt was nicht" & vbCrLf & strProjekt & vbCrLf & "schon vorhanden", vbOKOnly, "Fäähler")
End Sub
'------------------------------------------------------------------------------------------------------
Private Sub Firma_anlegen()
Dim strOrdner_Custom As Variant
Dim strOrdner_Custom_neu As String
Dim strKostenstelle As String
Dim strAngelProjekt As String
Dim strCustomerNr As String
Dim strPasst As String
Dim strTest As String
Dim strProjektstatus As String
Dim intAnzahlZeichenFirma As Integer
Dim int_i As Integer
Dim int_Datenpflege As Integer
Dim boolOrdner_anlegen As Boolean
intAnzahlZeichenFirma = ThisWorkbook.Sheets("Datenpflege").Range("B4")
strPfad = strLaufW
int_i = 3
' jsks: Prüfen ob in Spalte A was steht
While ThisWorkbook.Sheets("R1 - Projekte").Cells(int_i, 1) <> ""
boolOrdner_anlegen = False
'###########
ThisWorkbook.Sheets("R1 - Projekte").Activate
ThisWorkbook.Sheets("R1 - Projekte").Range("A" & int_i, "L" & int_i).Select
'If int_i = 92 Then Stop
'###########
strKostenstelle = ThisWorkbook.Sheets("R1 - Projekte").Cells(int_i, 8)
strCustomerNr = ThisWorkbook.Sheets("R1 - Projekte").Cells(int_i, 4)
strProjektstatus = ThisWorkbook.Sheets("R1 - Projekte").Cells(int_i, 6)
' jsks: Prüfen ob Projektstatus = "Freigegeben"
If strProjektstatus = "Freigegeben" Then
' jsks: Prüfen ob zu Karlsruhe = beinhaltet "ka"
strTest = InStr(1, LCase(strKostenstelle), LCase(ThisWorkbook.Sheets("Datenpflege").Range("B2")), vbTextCompare)
If strTest > 0 Then
strOrdner_Custom = ThisWorkbook.Sheets("R1 - Projekte").Cells(int_i, 10)
' jsks: Prüfen ob Firma schon angelegt
If IsError(strOrdner_Custom) Then
' jsks: Firma noch nicht angelegt
' Stop
strOrdner_Custom_neu = ThisWorkbook.Sheets("R1 - Projekte").Range("E" & int_i)
If Len(strOrdner_Custom_neu) > intAnzahlZeichenFirma Then
strOrdner_Custom_neu = Left(strOrdner_Custom_neu, intAnzahlZeichenFirma) & "." & strCustomerNr
Else
strOrdner_Custom_neu = strOrdner_Custom_neu & "." & strCustomerNr
' Stop
End If
boolOrdner_anlegen = True
Else
' jsks: Firma schon angelegt
' Stop
strAngelProjekt = ThisWorkbook.Sheets("R1 - Projekte").Cells(int_i, 9)
End If
If strCustomerNr = "#" Then
Else
' Stop
' jsks: Wenn Spalte A mit Spalte I zusammenpasst nix machen
strPasst = InStr(1, strAngelProjekt, ThisWorkbook.Sheets("R1 - Projekte").Cells(int_i, 1), vbTextCompare)
If strPasst > 0 Then
Else
If boolOrdner_anlegen = True Then
ThisWorkbook.Sheets("Firmen").Cells(ThisWorkbook.Sheets("Datenpflege").Range("B3") + 1, 1) = strOrdner_Custom_neu
ThisWorkbook.Sheets("Datenpflege").Range("B3") = ThisWorkbook.Sheets("Datenpflege").Range("B3") + 1
ChDir strLaufW
MkDir strLaufW & strOrdner_Custom_neu
int_Datenpflege = int_Datenpflege + 1
ThisWorkbook.Sheets("Datenpflege").Range("F" & int_Datenpflege) = strOrdner_Custom_neu
boolOrdner_anlegen = False
End If
Call Firma_auswaehlen
End If
End If
End If
End If
int_i = int_i + 1
Wend
End Sub
Private Sub Formeln_in_R1()
Dim strFormel_Sp_i As String
Dim strFormel_Sp_j As String
Dim strFormel_Sp_k As String
Dim Ende As Long
Ende = Cells(Rows.Count, 1).End(xlUp).Row
strFormel_Sp_i = "=WENNFEHLER(INDEX(Projekt!A:A;VERGLEICH(""*""&A3&""*"";Projekt!$A:$A;));"""")"
strFormel_Sp_j = "=INDEX(Firmen!$A:$A;VERGLEICH(D:D;Firmen!$B:$B;))"
strFormel_Sp_k = "=SUCHEN($K$1;H:H)"
With ThisWorkbook.Sheets("R1 - Projekte")
'With ThisWorkbook.Sheets("R2") war test
.Range("K1") = ThisWorkbook.Sheets("Datenpflege").Range("B2")
.Range("I2") = "angelegt"
.Range("J2") = "Ordner_custom"
.Range("E1").FormulaLocal = "=""Anzahl = ""&TEILERGEBNIS(3;A3:A1000)"
.Range("I3:I" & Ende).FormulaLocal = strFormel_Sp_i
.Range("J3:J" & Ende).FormulaLocal = strFormel_Sp_j
.Range("K3:K" & Ende).FormulaLocal = strFormel_Sp_k
End With
End Sub
Sub Start_Alles()
ThisWorkbook.Sheets("Datenpflege").Visible = True
ThisWorkbook.Sheets("Firmen").Visible = False
ThisWorkbook.Sheets("Projekt").Visible = False
ThisWorkbook.Sheets("Datenpflege").Columns(6).Clear
On Error Resume Next
ThisWorkbook.Sheets("R1 - Projekte").ShowAllData
On Error GoTo 0
strLaufW = ThisWorkbook.Sheets("Datenpflege").Range("B5")
'Formeln in Tabelle "R1 - Projekte"
Call Formeln_in_R1
'Firmen aus Laufwerk K:\ holen
Call Firmen_einlesen
'Projekte zu Firmen aus Laufwerk K:\ holen
Call Projektname_einlesen
'Ordnerstruktur bearbeiten
Call Firma_anlegen
With ThisWorkbook.Sheets("R1 - Projekte")
.Activate
.Range("A2").Select
End With
ThisWorkbook.Sheets("Datenpflege").Range("B6") = "L = " & Now()
ThisWorkbook.Sheets("Datenpflege").Visible = True
ThisWorkbook.Save
MsgBox "Habe Fertig"
End Sub
Edit:
noch ein paar Bilder zum verständnis