调用VBA中的批处理文件无法正常工作

时间:2012-02-25 08:16:50

标签: vba command-line batch-file dos

我正在尝试创建一个可供其他人使用的程序。目前,我的文件位于C:\Documents and Settings\jpmccros\Desktop\test

目录中

此目录包含我的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并运行macro1时,它会调用批处理文件打开。

这是我的宏命令:

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命令提示符。但是,当它打开批处理文件时,初始目录为:

C:\Documents and settings\jpmccros\My Documents

我需要这个批处理文件和宏是动态的,因此我需要批处理文件来打开它的显示目录。这是怎么回事?我可以在批处理文件上写一个命令吗?它是VBA中的东西吗?

1 个答案:

答案 0 :(得分:3)

使用activeworkbook.path访问批处理文件的方法有效。 VBA代码相对于其当前位置找到它并打开它。

但是,我遇到的问题是,一旦VBA打开批处理文件,命令提示符每次都会在目录C:\Documents and Settings\jpmccros\My Documents\中启动。

您的方法无法绕过此问题。我确实创建了一个解决方案(也使用了你的activeworkbook.path想法)。我只是在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