_____________________________________________________________________________
Meine Frage:
Wie kann ich einen ganzen Ordner, bzw. ein Verzeichnis dessen Pfad gleich bleibt in ein Zielverzeichnis kopieren, das ebenfalls gleich bleibt. Das einzige was "variabel" sein soll, ist der Inhalt, weil der sich laufen ändert.
_____________________________________________________________________________
Darauf die Antwort von Fritz (EffHa) :
Das hier alles in ein Modul kopieren:
Option explicit
Private Declare
Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare
Function FindNextFile Lib "kernel32" Alias "FindNextFileA" ( _
ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare
Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Declare
Function CopyFile Lib "kernel32" Alias "CopyFileA" ( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Const MAX_PATH = 260
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Sub Zählen()
Dim hFind&, hFile&, nFile& 'SDir$,
Dim FD As WIN32_FIND_DATA
Dim Result&
Dim PathName$, SearchPattern$, Filename$
Dim UrsprungsOrdner$, ZielOrdner$
UrsprungsOrdner = "d:\temp\" ' Backslash nicht vergessen
ZielOrdner = "E:\xyz\"
On Error Resume Next
LetzteZeile = Cells.SpecialCells(xlCellTypeLastCell).Row
hFile = FindFirstFile(PathName & "*.*", FD)
If hFile > 0 Then
Filename = ClearFileName(FD.cFileName)
If Filename <> "." And Filename <> ".." Then
Result = CopyFile(Source & Filename, Dest & Filename, 0)
End If
Do
nFile = FindNextFile(hFile, FD)
If nFile > 0 Then
Filename = ClearFileName(FD.cFileName)
If Filename <> "." And Filename <> ".." Then
Result = CopyFile(UrsprungsOrdner & Filename, ZielOrdner & Filename, 0)
If Result <> 0 Then MsgBox ("Fehler beim kopieren")
End If
End If
Loop While nFile <> 0
End If
FindClose hFile
End Sub
Function ClearFileName(CDat)
Dim X&
X = InStr(1, CDat, Chr$(0))
If X > 0 Then
ClearFileName = Trim$(Left$(CDat, X - 1))
Exit Function
End If
ClearFileName = ""
End Function
_____________________________________________________________________________
Nun meine neue (vielleicht blöde) Frage:
wie bringe ich ihn nun dazu das Makro beim Start der Datei auszuführen,
und die Datei dannach wieder zu schließen?
habs schon mit Private
Sub Workbook_Open probiert... aber
das einzige was ich so starten lassen kann ist ja...
Sub Zählen und dann gehts
nicht...
Vielen Dank, schonmal an die mit mehr VBA- Erfahrung als ich...
Bert