Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
772to776
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
772to776
772to776
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Kopieren von Dateien

Kopieren von Dateien
13.06.2006 14:03:40
Dateien
Hallo Leute,
wer kann mir mal einen Tip zum Kopieren von großen Dateien geben?
Folgendes Problem:
Bislang läuft bei uns eine DOS-Batchdatei, die zuvor in Excel generierte csv-Dateien von einem Terminal-Server auf einen anderen File-Server kopiert.
Zukünftig wird DOS nicht mehr zur Verfügung stehen, sondern nur noch Excel.
Ich müßte nun die ca. 60 verschiedenen CSV-Dateien mit jeweils knapp 65.000 Zeilen direkt aus VBA in die eine Import-csv kopieren. (möglichst ohne die Dateien zu öffnen). Die Import.csv wird anschließend von unserer Datenbank importiert.
Gibt es da einen Trick?
Bisherige Batchdatei:
del \\tsclient\Y\Import\Import.csv '1.) Löschen der alten Import-Datei
copy *.csv \\tsclient\Y\Import\Import.csv '2.) Kopieren aller CSV-Dateien in die eine Import.csv Datei
del *.csv '3.) Löschen der kopierten Dateien
Grüße aus dem sonnigen Fußballin ;-)
Samuel Schwalbe

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren von Dateien
13.06.2006 15:08:27
Dateien
Hallo Samuel,
folgendes Makro schreibt die Daten aller CSV-Dateien im aktuellen Ordner in die Datei "\\tsclient\Y\Import\Import.csv". Die alte Datei wird zuvor gelöscht - also Vorsicht, erstmal mit Testdatei ausprobieren.

Sub kopieren()
Dim fso As Object
Dim fo As Object
Dim f As Object
Dim ff1 As Byte
Dim ff2 As Byte
Dim strText As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(CurDir)
Kill "\\tsclient\Y\Import\Import.csv"
For Each f In fo.Files
If Right(f.Name, 3) = "csv" Then
ff1 = FreeFile
ff2 = FreeFile
Open f.Path For Input As #ff1
Open "\\tsclient\Y\Import\Import.csv" For Append As #ff2
Do Until EOF(ff1)
Line Input #ff1, strText
Print #ff2, strText
Loop
Close #ff1
Close #ff2
End If
Next 'f
End Sub
Gruß Ingolf
Anzeige
und gleich einen Fehler entdeckt...
13.06.2006 15:10:46
IngGi
Hallo Samuel,
Korrektur:

Sub kopieren()
Dim fso As Object
Dim fo As Object
Dim f As Object
Dim ff1 As Byte
Dim ff2 As Byte
Dim strText As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(CurDir)
Kill "\\tsclient\Y\Import\Import.csv"
For Each f In fo.Files
If Right(f.Name, 3) = "csv" Then
ff1 = FreeFile
Open f.Path For Input As #ff1
ff2 = FreeFile
Open "\\tsclient\Y\Import\Import.csv" For Append As #ff2
Do Until EOF(ff1)
Line Input #ff1, strText
Print #ff2, strText
Loop
Close #ff1
Close #ff2
End If
Next 'f
End Sub
Gruß Ingolf
Anzeige
AW: und gleich einen Fehler entdeckt...
13.06.2006 17:03:05
samuelschwalbe
Hallo Ingolf,
vielen Dank für die super Lösung - funktioniert jetzt spitzenmäßig!!!!
Durch das zeilenweise senden der Daten dauert der Prozeß ca. 11 min.
Mit DOS braucht der Transfer ca. 30 sec.
Gibt es in VBA noch eine schnellere Variante Dateien zu kopieren?
Vielen Dank für die Hilfe!
Grüße
Samuel
AW: und gleich einen Fehler entdeckt...
13.06.2006 17:40:04
IngGi
Hallo Samuel,
da hast du bei dieser Verarbeitungsmenge natürlich recht. So wird jeweils der gesamte Dateiinhalt auf einen Rutsch übertragen:

Sub kopieren()
Dim fso As Object
Dim fo As Object
Dim f As Object
Dim ff1 As Byte
Dim ff2 As Byte
Dim strText As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(CurDir)
Kill "\\tsclient\Y\Import\Import.csv"
For Each f In fo.Files
If Right(f.Name, 3) = "csv" Then
ff1 = FreeFile
Open f.Path For Input As #ff1
ff2 = FreeFile
Open "\\tsclient\Y\Import\Import.csv" For Append As #ff2
strText = Input(LOF(ff1), #ff1)
Print #ff2, strText
Close #ff1
Close #ff2
End If
Next 'f
End Sub
Gruß Ingolf
Anzeige
AW: und gleich einen Fehler entdeckt...
13.06.2006 18:31:26
IngGi
Hallo Samuel,
und wenn man nochmal nachdenkt merkt man, dass es noch einen Tick schneller geht, wenn man das Öffnen und Schließen der kumulierten Datei aus der Schleife auslagert. Dann kann man die Datei auch "For Output" öffnen, statt "For Append" und spart sich so noch den Kill-Befehl.

Sub kopieren()
Dim fso As Object
Dim fo As Object
Dim f As Object
Dim ff1 As Byte
Dim ff2 As Byte
Dim strText As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(CurDir)
ff1 = FreeFile
Open "\\tsclient\Y\Import\Import.csv" For Output As #ff1
For Each f In fo.Files
If Right(f.Name, 3) = "csv" Then
ff2 = FreeFile
Open f.Path For Input As #ff2
strText = Input(LOF(ff2), #ff2)
Print #ff1, strText
Close #ff2
End If
Next 'f
Close #ff1
End Sub
Gruß Ingolf
Anzeige
AW: und gleich einen Fehler entdeckt...
14.06.2006 09:58:33
samuelschwalbe
Hallo Ingolf,
das ist DIE LÖSUNG!!!!
Vielen, vielen Dank - es läuft spitze und braucht nur ca. 1 min.
Einfach genial!
Das muß unbedingt ins Archiv - braucht man immer wieder und diese Funktion findet man sonst nirgends so gut beschrieben.
Grüße
Samuel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige