2012-02-25 177 views
2

我正在嘗試創建一個可供其他人使用的程序。目前,我的文件目錄C:\Documents and Settings\jpmccros\Desktop\test在VBA中調用批處理文件無法正常工作

該目錄包含了我的macro.xlsmnames.bat,和另一個名爲Data子目錄。

批處理文件names.bat執行以下操作:

cd data 

dir/b/o:n > names.txt 

這不正是我想要它做的。當我打開批處理文件(該文件所在的目錄C:\Documents and Settings\jpmccros\Desktop\test\,在MS-DOS命令提示符C:\Documents and Settings\jpmccros\Desktop\test\開始然後運行我的命令,使我的文件names.txt,並把它正是我想要的。

當我打開macro.xlsm並運行宏1,它會調用批處理文件來打開

這是我的宏命令:

Dim names_txt, names_bat, full_name, filename, folder As String 
Dim position As Integer 
Dim pathcrnt As String 
full_name = ThisWorkbook.FullName 
filename = ThisWorkbook.Name 
position = InStr(1, full_name, filename, 1) 
position = position - 1 
folder = Left(full_name, position) 

names_bat = folder & "names.bat" 

Shell names_bat, vbMaximizedFocus 

現在,這裏是我的問題:宏實際上是打開的批處理文件,或至少它打開MS DOS命令提示符。但是,當它打開批處理文件時,最初的可怕ctory是:

C:\Documents and settings\jpmccros\My Documents

我需要這個批處理文件,宏是動態的,所以我需要的批處理文件來打開它的顯示目錄。這是怎麼回事?是否有我可以寫在批處理文件上的命令?這是VBA中的東西嗎?

+0

所以,如果你嘗試'在你的代碼debug.print ThisWorkbook.FullName'你得到 「C:\ Documents和Settings \ jpmccros \桌面\測試\ macro.xlsm」在立即窗口,即您的代碼正在運行在正確的工作簿保存到正確的路徑? – brettdj 2012-02-25 09:26:27

+2

我不明白這是什麼增加了以前版本的問題。我向您展示瞭如何將'C:\ Documents and Settings \ jpmccros \ Desktop \ test \ data'或任何您想要的文件夾作爲批處理文件的參數以及如何在'cd'命令中使用該參數來切換到所需的目錄。你不解釋我的解決方案爲什麼不能滿足你的需求。你試過了嗎? – 2012-02-25 09:39:38

+2

[使用VBA在給定目錄中運行批處理文件]可能的重複(http://stackoverflow.com/questions/9403341/running-a-batch-file-in-a-given-directory-using-vba) – 2012-02-25 20:39:21

回答

3

您使用activeworkbook.path工程訪問批處理文件的方法。 VBA代碼相對於其當前位置找到它並打開它。

但是,我遇到的問題是一旦VBA打開該批處理文件,命令提示符將從目錄C:\Documents and Settings\jpmccros\My Documents\開始每次。

你的方法不會繞過這個問題。我確實創建了一個解決方案(並且也使用了你的想法)。我只需在VBA中創建一個,然後打印出一行cd var_activeworkbook.path & "\data",而不是調用我的批處理文件。這樣,我就可以讓VBA搜索當前目錄並將其保存爲變量。

檢查出來:

Dim pathcrnt As String, batch_file As Integer 

pathcrnt = ActiveWorkbook.Path 
batch_file = FreeFile() 
Open pathcrnt & "names.bat" For Output As #batch_file 
Print #batch_file, "cd " & pathcrnt & "\data" 
Print #batch_file, "dir/b/o:n > names.txt" 
Print #batch_file, "pause" 
Close #batch_file 

Shell pathcrnt & "names.bat", vbMaximizedFocus 
相關問題