2017-12-20 2 views
0

Ich habe Code auszuführen, wie folgt:VBA Shell-Befehl auszuführen, sondern aus anderen Verzeichnis

ChDir (ActiveWorkbook.Path) 
ShellString = "cmd.exe /k cpdf -split " + Chr(34) + ".\" + Replace(File, ".csv", ".pdf") + Chr(34) + " -o temp/x_%%%.pdf" 
Shell ShellString, vbNormalFocus 

Wenn ich den Code ausführen, es tut nichts, weil es nicht cpdf.exe finden.

Cpdf.exe existiert im selben Pfad wie meine Active Workbook. Der Befehl ChDir hat den Trick nicht ausgeführt.

Wenn ich den Code ausführen, bekomme ich

'CPDF' nicht als ein interner Befehl erkannt wird ....

Und ich bin an der folgenden Eingabeaufforderung links:

C: \ Benutzer \ ksmith \ Dokumente

Das sagt mir, dass der Befehl versuchte, aus diesem Ordner auszuführen, und deshalb ist es fehlgeschlagen.

Wie kann ich Shell von gewünschten Ordner in VBA ausführen? ChDir scheint nicht den Trick zu tun, wie einige Leute vorgeschlagen hatten ...

+0

Können Sie den vollständigen Pfad zu der ausführbaren Datei in der Befehlszeile angeben vermeiden so den Wechsel von Verzeichnis? Möglicherweise von der Kommandozeile aus arbeiten, bevor Sie in vba übersetzen? Dann immer die Möglichkeit, mit der BATCH-Datei zu arbeiten. – QHarr

+0

Ist Ihre Arbeitsmappe auf dem Laufwerk C:? Oder eine andere Fahrt? (Wenn sich Ihre Arbeitsmappe beispielsweise in "L: \ Temp1 \ Temp2" befindet, dann müssen Sie auch "ChDrive" L "' für "ChDir" verwenden, da die o/s das "aktuelle" Verzeichnis verfolgen auf jedem Laufwerk und der Standardwert ist, das "aktuelle" Verzeichnis auf dem "aktuellen" Laufwerk zu verwenden.) – YowE3K

+0

cool. Ich werde versuchen, Sie wissen zu lassen. Arbeitsmappe befindet sich auf Netzwerklaufwerk. – Kam

Antwort

0

Der ChDir Befehl ändert nur das "aktuelle" Verzeichnis auf dem angegebenen Laufwerk, aber nicht, welches Laufwerk derzeit "aktuell" ist.

Also, wenn

  • Ihrem Computer ein "C" hat Laufwerk, auf dem die "aktuelle" Verzeichnis "C: \ Benutzer \ ksmith \ Documents" und
  • Sie auch ein „L haben ", auf dem Laufwerk das "aktuelle" Verzeichnis "L: \ abc \ def", und
  • das Verzeichnis Ihre Arbeitsmappe enthält, ist "L: \ Temp1 \ Temp2"

Ausführung dann

wird das "aktuelle" Verzeichnis des Laufwerks "L" in "L: \ Temp1 \ Temp2" geändert, aber das "aktuelle" Laufwerk bleibt weiterhin "C" und das Laufwerk "C" des aktuellen Laufwerks Verzeichnis wird weiterhin "C: \ Users \ ksmith \ Documents" sein.


Sie müssen daher auch das "aktuelle" Laufwerk ändern. Sofern Sie ein zugeordnetes Laufwerk (dh es wird nicht mit einem UNC angegebenen Laufwerk arbeiten) Sie können dies tun, indem Sie:

ChDrive ActiveWorkbook.Path 
ChDir ActiveWorkbook.Path 
Verwandte Themen