2012-11-23 1070 views
6

我的excel vba宏有問題。我需要它執行與Excel工作簿位於同一文件夾中的批處理文件。代碼有時候工作得很好。我不知道是什麼導致了錯誤。下面的代碼:從Excel VBA宏執行.bat文件

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而不必更改?

+2

不知道我理解。您有一個Excel工作簿,您將其保存爲批處理文件,然後嘗試將「Excel」文件作爲.bat運行? – InContext

+0

「&& code.bat」中的字符串「&&」應該表示什麼特殊的東西,還是真的是文件名的一部分? – RBarryYoung

回答

7

首先,當你啓動CMD例如,你需要的,如果你使用任何類型的運營商(&)來包圍整個CMD參數:

CMD /K "command1 & command2" 

然後圍子內參數,像這樣:

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

所以,你需要做這樣的事情:

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

注意我已經使用「」「來轉義報價,但我不知道在VBA中轉義報價的方式。如果你有空格,但是隻有空格,請記住還附上code.bat

+2

它或者是黑色'\'或者用單引號來包含雙引號''' –

4

我敢肯定,問題是到該行

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

您需要在&&前面的空間,將其從cd命令分離後,將其從code.bat分開。

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

殼 「的cmd.exe/K CD/d」 & ThisWorkbook.path & 「& & code.bat」

這裏,不帶/ d CMD將打開文檔文件夾中。由/ d它將在d驅動器中打開,您可以根據自己的方便進行更改。插入一個引號(「)

+0

嗨,感謝您對網站的貢獻,因爲它代表您的答案有點缺乏我們的[好的答案指南](http: //stackoverflow.com/help/how-to-answer)。你能擴展它嗎? – starsplusplus

2

一種方式轉換成字符串是通過使用字符代碼轉換功能CHR(34),34是行情的ASCII值(」)