Dateien kopieren

Betrifft: Dateien kopieren
von: Edgar Höcker
Geschrieben am: 12.10.2020 08:33:36
Hallo,
ich habe ein Problem, an dem ich schon fast eine Woche sitze, aber auch trotz intensiever Suche keine Lösung für mich gefunden habe. Mit FileSearch habe ich eine Lösung, aber FileSearch gibt es ja nicht mehr:
Ich habe einen Ordner DATEN in dem viele Unterordner (U01, U02, bis Unn) enthalten sind. das können durchaus 50 Unterordner sein). In jedem Unterordner sind mehrere Dateien enthalten, aber nur exact eine .XLSX Datei.
Ich möchte jetzt alle XLSX Dateien aus allen Unterordnern in einen Ordner C:\OUTPUT kopieren.

Betrifft: AW: Dateien kopieren
von: Nepumuk
Geschrieben am: 12.10.2020 09:21:36
Hallo Edgar,
teste mal:
Option Explicit
Public Sub CopyFiles()
Const FOLDER_PATH As String = "G:\DATEN\" 'Anpassen !!! Backslash am Ende nicht löschen
Dim astrFolders() As String, strFilename As String
Dim ialngFolders As Long
astrFolders = GetFolders(FOLDER_PATH)
For ialngFolders = LBound(astrFolders) To UBound(astrFolders)
strFilename = Dir$(astrFolders(ialngFolders) & "*.xlsx")
If strFilename <> vbNullString Then _
Call FileCopy(Source:=astrFolders(ialngFolders) & strFilename, Destination:="C:\OUTPUT\" & strFilename)
Next
End Sub
Private Function GetFolders(ByVal pvstrPath As String) As String()
Dim astrFolders() As String
Dim strFolder As String, strPath As String
Dim ialngIndex1 As Long, ialngIndex2 As Long
Redim Preserve astrFolders(ialngIndex1)
astrFolders(ialngIndex1) = pvstrPath
ialngIndex1 = 1
ialngIndex2 = 1
strPath = pvstrPath
Do
strFolder = Dir$(PathName:=strPath & "*", Attributes:=vbDirectory)
Do Until strFolder = vbNullString
If strFolder <> "." And strFolder <> ".." Then
If GetAttr(PathName:=strPath & strFolder) And vbDirectory Then
Redim Preserve astrFolders(0 To ialngIndex1)
astrFolders(ialngIndex1) = strPath & strFolder & "\"
ialngIndex1 = ialngIndex1 + 1
End If
End If
strFolder = Dir$
Loop
If ialngIndex1 = ialngIndex2 Then Exit Do
strPath = astrFolders(ialngIndex2)
ialngIndex2 = ialngIndex2 + 1
Loop
GetFolders = astrFolders
End Function
Gruß
Nepumuk

Betrifft: AW: Dateien kopieren
von: Edgar Höcker
Geschrieben am: 13.10.2020 07:52:38
Hallo Nepumuk,
funktioniert super! Macht genau das was ich will. Ich habe nur noch zwei Änderungen gemacht:
1. Aufruf der Funktion mit zwei Variablen (Ein.- und Ausgabeverzeichnis)
2. Änderung der INPUT und OUTPUT Werte in Varialen, die ich übergebe.
Hab vielen Dank!
Edgar

Betrifft: AW: Dateien kopieren
von: Edgar Höcker
Geschrieben am: 13.10.2020 08:01:09
Nachdem ich dank Nepumuks Hilfe mein Problem lösen konnte setze ich noch einen drauf. Ihr seht, Dateiverarbeitung unter Excel VBA ist nicht wirklich mein Ding. Ich versuche aber immer alles, was mir als Lösung angeboten wird, auch zu verstehen.
Jetzt befinden sich alle Excel Dateien in meinem OUTPUT Ordner.
Im nächsten (und letzten) Schritt möchte ich nacheinander alle WB aufmachen, einen Blattschutz deaktivieren, eine Änderung auf dem WS vornehmen, Blattschutz wieder aktivieren und WB schließen

Betrifft: AW: Dateien kopieren
von: Nepumuk
Geschrieben am: 13.10.2020 10:26:13
Hallo Edgar,
aufgrund mangelnder Angaben nur ein Beispiel:
Option Explicit
Public Sub Beispiel()
Const FOLDER_PATH As String = "H:\" ' Anpassen !!!
Dim strFilename As String
Dim objWorkbook As Workbook
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
strFilename = Dir$(FOLDER_PATH & "*.xls*")
Do Until strFilename = vbNullString
Set objWorkbook = Workbooks.Open(Filename:=FOLDER_PATH & strFilename)
With objWorkbook.Worksheets(1)
Call .Unprotect(Password:="GEHEIM")
.Cells(1, 1).Value = "Hallo"
Call .Protect(Password:="GEHEIM")
End With
Call objWorkbook.Close(SaveChanges:=True)
strFilename = Dir$
Loop
Set objWorkbook = Nothing
With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Gruß
Nepumuk

Betrifft: AW: Dateien kopieren
von: Edgar Höcker
Geschrieben am: 13.10.2020 16:18:08
Danke auch dafür. Habe mittlerweile viel gelesen und gesucht. Bin auch fündig geworden. Habe die Code-Schnippsel an meine Bedürfnisse angepasst. Hat zwar etwas gedauert und ist sicherlich auf etwas umständlich, aber es funktioniert.
Was wollte ich rreichen?
Nach dem ersten Step, der alle Unterordner nacheinander öffnet und die darin enthaltene .XLSX Datei in den Ausgangsordner schiebt sollte Step2 folgen.
Step2 nimmt nacheinander jede .XLSX Datei im Ausgangsordner, öffnet WS1 und löscht darin Zeile5. Dann wird WS3 geöffnet und die Zeilen 5-6 an das Ende von Zeile 1-2 verschoben.
Die :XLSX Dateien werden anschließend in QlikView geladen und analysiert.

Betrifft: AW: Dateien kopieren
von: Nepumuk
Geschrieben am: 13.10.2020 16:30:42
Hallo Edgar,
so ganz kann ich dir nicht folgen. Lade mal eine Mustermappe mit soll/ist hoch.
Gruß
Nepumuk