8 Stimmen

Ausführen einer Batch-Datei in einem bestimmten Verzeichnis mit VBA

Wenn ich zum Speicherort meiner Batch-Datei gehe und sie öffne, funktioniert die Batch-Datei. Meine Batch-Datei ist einfach:

cd .\data
dir/b/o:n > names.txt

Wie Sie sehen können, befinde ich mich in meinem aktuellen Verzeichnis und gehe in das Unterverzeichnis "data", kopiere alle Namen und erstelle eine Datei namens names.txt .

Wenn ich sage

shell "location of file" 

wird die Stapeldatei geöffnet, aber das Verzeichnis, das standardmäßig verwendet wird, ist C:\my documents Meine Befehle funktionieren also nicht, weil das Unterverzeichnis nicht gefunden wird. Ich möchte, dass dies eine dynamische Stapeldatei ist, und deshalb muss ich etwas in VBA schreiben, das die Stapeldatei in ihrem aktuellen Verzeichnis oder etwas in dieser Richtung öffnet.

Wie kann ich das tun?

8voto

Tony Dallimore Punkte 12195

Die folgenden Angaben dürften die gewünschte Wirkung erzielen.

Mein Testcode ist:

Option Explicit
Sub TryShell()

  Dim PathCrnt As String

  PathCrnt = ActiveWorkbook.Path
  Call Shell(PathCrnt & "\TryShell.bat " & PathCrnt)

End Sub

Meine Test-Batch-Datei heißt TryShell.bat und enthält:

cd %1
dir *.* >TryShell.txt

Ich habe meine Stapeldatei in denselben Ordner wie die Arbeitsmappe, die mein Makro enthält, gelegt.

Die Erklärung PathCrnt = ActiveWorkbook.Path setzt PathCrnt auf den Namen des Verzeichnisses, das die aktive Arbeitsmappe enthält. Sie können PathCrnt auf ein beliebiges Verzeichnis setzen.

Wenn ich anrufe Shell habe ich hinzugefügt PathCrnt als Parameter.

In meiner Batch-Datei habe ich das aktuelle Verzeichnis auf %1 der der erste Parameter ist.

En dir funktioniert wie gewünscht, da das aktuelle Verzeichnis mein Verzeichnis ist und nicht das Standardverzeichnis des Systems.

Ich hoffe, das ist klar.

2voto

assylias Punkte 308529

C:\My Dokumente ist wahrscheinlich das Verzeichnis, in dem sich Ihr Arbeitsblatt befindet. Wenn Sie

ChDir "C:\TheFolderWhereYourBatchIs"

bevor Sie Ihren Shell-Befehl starten, und das sollte funktionieren...

Alternativ können Sie Ihre Batch-Datei so ändern, dass sie ein absolutes Verzeichnis anstelle eines relativen Verzeichnisses verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X