从命令行使用路径名作为参数时出现Excel错误

时间:2014-08-07 12:50:22

标签: excel vba excel-vba batch-file

我尝试从命令行启动特定的Excel文档,并以文件路径的形式传入变量。在启动Excel工作表时运行宏。此文件路径可能包含空格,但是当Excel解释它时,我相信它会尝试将空格作为新工作簿打开后的每个部分。这导致程序运行后出现一些错误警告,因为它显然无法从子字符串创建文件。

批处理文件如下所示

echo %~1
start excel.exe %USERPROFILE%\Desktop\Compare.xlsm /e/%1%
pause

编辑:澄清。将文件拖放到其上时,将激活批处理文件。然后,丢弃的文件的路径存储在%1变量中。如果此文件路径有空格,则在每个空格后,Excel假定这是一个新工作表并尝试打开它。对包含将使用拖动文件路径的宏的Compare.xlsm的调用正常工作,因为它始终在桌面上。因此,我的问题是如何让Excel将整个路径名存储在%1中并将其用作一个命令行参数,而不是多次调用来打开新工作簿。

如果批处理文件中使用的文件不包含任何空格,则不会发生错误。在使用可能包含空格的文件路径时,有没有办法摆脱错误,例如C:\ Users \ My Documents \ foobar.txt

2 个答案:

答案 0 :(得分:1)

尝试此操作(已完成测试

echo %~1
start "excel.exe" "%USERPROFILE%\Desktop\Compare.xlsm" /e/%1%
pause

注意" Excel.Exe"周围的引号和文件路径?

另一个例子

echo %~1
start "excel.exe" "%USERPROFILE%\Desktop\Blah Blah.xlsm" /e/%1%
pause

我假设您正在运行.Bat文件中的代码

答案 1 :(得分:0)

正如Sid所说,任何包含空格的路径都必须引用。

所以要使用像C:\ My Documents \ fubar.txt这样的pth,你会有这个:

"C:\My Documents\fubar.txt"

并在您的示例中:

回声

%~1
start excel.exe "%USERPROFILE%\Desktop\Compare.xlsm" /e/%1%
pause

编辑: 使用变量作为路径时,需要在变量中包含引号!