2012-02-25 194 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 
相关问题