Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
620to624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
620to624
620to624
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

nochmal Verzeichnisse kopieren - Hilfe von EffHa??

nochmal Verzeichnisse kopieren - Hilfe von EffHa?
08.06.2005 08:58:52
EffHa?
Hallo, ich hatte schonmal einen Beitrag über dieses Thema geschrieben (am 03.06.), konnte aber bissher leider nicht mehr ins Forum schauen. Desshalb nochmal...
_____________________________________________________________________________
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

		

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nochmal Verzeichnisse kopieren - Hilfe von EffHa?
08.06.2005 13:36:21
EffHa?
Hierfür eine Routine erstellen, die "auto_open()" heißt.
hier wird das Makro beim start ausgeführt und Excel nach Nachfrage geschlossen.
siehe unten
Gruß Fritz
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 auto_open()
Dim Result&
Zählen
Result = MsgBox("Datei schließen?", vbYesNo)
If Result = vbYes Then Application.Quit
End Sub


Sub Zählen()
Dim hFind&, hFile&, nFile&              'SDir$,
Dim FD As WIN32_FIND_DATA
Dim Result&
Dim PathName$, SearchPattern$, Filename$
Dim UrsprungsOrdner$, ZielOrdner$
Dim LetzteZeile&
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(UrsprungsOrdner & Filename, ZielOrdner & 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

Anzeige
Hm...
09.06.2005 08:57:36
DerBertige
Hallo, danke für die schnelle Antwort, funktioniert eigentlich ohne Fehlermeldungen, nur, dass dann nichts in dem Zielordner zu finden ist... ich versuch selber mal den Fehler zu finden, wird aber nicht funktionieren, da ich von deiner Programmierweise nur 1/10 verstehe... die Ebene ist mir noch zu hoch...
Bert
AW: Hm...
09.06.2005 10:17:48
EffHa
Hallo Bert,
hier nochmal eine Beispieldatei.
Wenn man den ursprungsordner und den zielordner entsprechend anpaßt, müsste es eigentlich funktionieren.
https://www.herber.de/bbs/user/23760.xls
Gruß
Fritz
Anzeige
Fritz!!!! Danke!!!!
09.06.2005 12:20:53
DerBertige
Yes!! Jetzt funktionierts, ich hab jetzt aber meine Datei und die von dir ins Netz gestellte verglichen... waren eigentlich identisch. Nur wenn ich die Datei ausm Netz abspeicher, dann sagt er mir, dass dabei Daten verloren gehen können, da die Datei mit einer späteren Excel- Version erzeugt wurde... ich hab Excel97... keine Ahnung, obs daran gelegen hat... naja, ist ja auch egal
Nochmal vielen Dank!!
Bert

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige