Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1432to1436
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
Inhaltsverzeichnis

Kopieren von dateien

Kopieren von dateien
01.07.2015 14:31:53
dateien
Hallo,
ich habe einen Code mit dem ich Dateien anhand einer Liste Kopieren kann.
nun habe ich aber Daten bekommen die ab und an zu meinen Zeichnungsnummern (40400894) noch zusätze dranhaben (40400894_a-1)
Nun soll es so sein , dass ich in meiner Liste die nummer 40400894 stehen habe und dann aber die Datei 40400894_a-1.pdf benötige. ich habe schonmal hilfe bekommen und den Code auf meine Bedürfnisse angepasst ich bekomme Halt dann dauernd einen Fehler.
Sub Schaltfläche2_Klicken()
Dim strPfad1 As String, strPfad2 As String, sFile As String
Dim z As Range
strPfad1 = Range("F4").Value
strPfad2 = Range("F9").Value
Set z = ActiveSheet.Range("A2")
sFile = z.Text & "*" & ".pdf"
'Abbruch, wenn A2 schon leer ist:
If z.Value  "" Then
Do
FileCopy strPfad1 & sFile, strPfad2 '###hier kommt der Fehler auf###
Set z = z.Offset(1, 0)
Loop Until z.Value = ""
End If
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren von dateien
01.07.2015 16:58:00
dateien
Hi Alex,
FileCopy unterstützt anscheinend keine Wildcards (* usw.), also bietet sich der Weg über die DOS-Shell an.
Übrigens brauchst Du Dich nicht zu wundern, wenn sich abgesehen von der Fehlermeldung nichts tut, denn Du durchläufst zwar den Range, weist den Wert aber nirgends mehr an sFile zu.
Probier das mal:
Sub Schaltfläche2_Klicken()
Dim strPfad1 As String, strPfad2 As String, sFile As String
Dim z As Range
strPfad1 = Range("F4").Value
strPfad2 = Range("F9").Value
Set z = ActiveSheet.Range("A2")
sFile = z.Text & "*" & ".pdf"
While z.Value  ""
If Shell("cmd.exe /C copy " & strPfad1 & sFile & " " & strPfad2) = 0 Then MsgBox "Fehler"
' FileCopy strPfad1 & sFile, strPfad2 '###hier kommt der Fehler auf###
Set z = z.Offset(1, 0)
sFile = z.Text & "*" & ".pdf"
Wend
End Sub

Mit einer While-Schleife spart man sich das überflüssige If...
Die Shell gibt irgendeine Prozeßnummer zurück, z.B. 2345, oder 0, falls ein Fehler aufgetreten ist.
Happy Exceling,
Michael
P.S.: Bin gerade selber mit einem Verzeichnis mit Leerzeichen drübergestolpert: die Shell trennt einzelne Parameter mit Leerzeichen, d.h., *wenn* Du Dateinamen bzw. Verzeichnisse mit Leerzeichen hast, mußt Du die einzelnen Parameter in "" setzen, etwa so:
If Shell("cmd.exe /C copy " & chr(34) & strPfad1 & sFile & chr(34) _
& " " & chr(34) & strPfad2 & chr(34)) = 0 Then MsgBox "Fehler"

Anzeige
AW: Kopieren von dateien
02.07.2015 07:09:11
dateien
Hallo Michael,
ich habe es umgesetzt es Läuft zwar ohne Fehler durch jedoch wird nichts Kopiert bzw. nichts im Ziel Ordner strPfad2 eingefügt

AW: Kopieren von dateien
02.07.2015 11:13:41
dateien
Hallo Alex,
das ist mir zunächst auch passiert, weil der Zielordner Leerzeichen enthielt. Hast Du die Zeile unten mit den chr(34) mal eingefügt? chr(34) ist das Anführungszeichen ("); im Prinzip kann man es in VBA ja auch notieren, indem man es "doppelt" schreibt, aber die Schreibweise erscheint mir so schlecht lesbar, daß ich lieber den Umweg mit 34ern nehme...
Was soll ich sagen? Bei mir hat's getan.
Nachfolgend das Selbe in Grün mit dem Scripting Host; der schreibt sich deutlich umständlicher, man kann aber nachvollziehen, was passiert (deshalb die msgbox, die Du dann rauskommentieren kannst).
Option Explicit
Sub Schaltfläche2_Klicken()
Dim myShell As Object, myExec As Object
Dim aufruf As String, ausgabe As Variant
Dim strPfad1 As String, strPfad2 As String, sFile As String
Dim z As Range, zeile&
strPfad1 = Range("F4").Value
strPfad2 = Range("F9").Value
Set z = Range("A2")
sFile = z.Text & "*" & ".pdf"
While z.Value  ""
aufruf = "cmd.exe /C copy " & Chr(34) & strPfad1 & sFile & Chr(34) _
& " " & Chr(34) & strPfad2 & Chr(34)
Set myShell = CreateObject("WScript.Shell")
Set myExec = myShell.Exec(aufruf)
ausgabe = myExec.StdOut.ReadAll ' ist ein langer Text mit Zeilenumbruch
MsgBox ausgabe                  ' wie hier nachzuvollziehen ist
ausgabe = Split(ausgabe, vbCrLf)
zeile = UBound(ausgabe)         ' unterste Zeile
aufruf = ausgabe(zeile - 1)     ' vorletzte Zeile
If Mid(aufruf, 1, 1) = "0" Then MsgBox "Fehler"
Set myShell = Nothing
Set z = z.Offset(1, 0)
sFile = z.Text & "*" & ".pdf"
Wend
End Sub
Übrigens: hast Du absolute Pfade verwendet? Also beginnend mit Laufwerksbuchstaben á la C:\Test\
Falls es an so was liegen sollte, kannst Du die WShell-Variante zum Fehlersuchen einsetzen und die andere, wenn Du ihn gefunden hast...
Hm, "Fehlercode" ist wahrscheinlich so eine Sache: ich nehme an, Werte ungleich 0 werden auch dann zurückgegeben, falls keine Datei gefunden wurde, weil der Befehl "an sich" erfolgreich ausgeführt wurde.
Also, viel Spaß beim Testen und happy exceling,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige