7

私のexcelvbaマクロに問題があります。Excelワークブックと同じフォルダにあるバッチファイルを実行するために必要です。コードは時々うまく機能します。エラーの原因がわかりません。コードは次のとおりです。

Sub writebatch()
  Sheets("code").Select
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs FileName:=ThisWorkbook.path & "\code.bat",
  FileFormat:=xlTextPrinter, CreateBackup:=False
  Application.DisplayAlerts = True
  ThisWorkbook.Saved = True
  Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat"
  Application.Quit
End Sub

バッチファイルを書き込みますが、実行しません。コマンドウィンドウが閉じないようになって、code.batファイルが見つからないと表示されたのは一度だけです。したがって、changedirコマンドは機能しました。cmd.exeを実行し、変更せずに相対パスを使用してcode.batを実行することは可能ですか?

4

5 に答える 5

8

まず、CMD インスタンスを起動するときに、任意のタイプの演算子 (&) を使用する場合は、CMD 引数全体を囲む必要があります。

CMD /K "command1 & command2"

次に、サブ内部引数を次のように囲みます。

CMD /K "command "path with spaces" & command"

したがって、次のようなことを行う必要があります。

Shell "cmd.exe /k ""cd " & """ & ThisWorkbook.path & """ & " && code.bat"""

引用符をエスケープするために """ を使用しましたが、VBA で引用符をエスケープする方法がわかりません。

PS:スペースがある場合は、 code.batも囲むことを忘れないでください。ただし、スペースがある場合のみです。

于 2012-11-23T15:17:32.650 に答える
4

問題はこの行にあると確信しています

Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat"

の前にスペースを入れてコマンドと区別し、その後にスペースを入れて&&と区別する必要があります。cdcode.bat

Shell "cmd.exe /k cd " & ThisWorkbook.path & " && code.bat"
于 2012-11-23T14:45:57.593 に答える
3

シェル "cmd.exe /k cd /d" & ThisWorkbook.path & "&& code.bat"

ここでは、/d cmd がないと、ドキュメント フォルダーで開きます。/dによってdドライブで開きます。これは簡単に変更できます。

于 2014-02-25T09:39:15.347 に答える
2

文字列に quote(") を挿入する 1 つの方法は、文字コード変換関数 Chr(34) を使用することです。34 は quotes(") の ASCII 値です。

于 2016-11-30T16:26:36.910 に答える