我正在尝试创建一个可供其他人使用的程序。目前,我的文件位于C:\Documents and Settings\jpmccros\Desktop\test
此目录包含我的macro.xlsm
,names.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中的东西吗?
答案 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