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