我有一个Excel-macro,我也用它来运行命令行程序。在那个宏中我已经为不同的文件路径,文件名等设置了一些参数,我现在想把它们放入(可能)一个Windows批处理文件中,这样我(或用户)就不需要触摸宏了但是可以更改该.bat控制文件中的文件路径,并获取宏以相应地更改其值。
我怎么能完成这样的任务?也许有一些例子你可以指出我。
谢谢。
答案 0 :(得分:3)
Excel不提供任何标准的文档记录方法,可以从命令行将参数传递给工作簿。
然而,有一种无证的,棘手且有限的方式来做到这一点。滥用Excel的/e
参数。
以这种方式调用excel
start excel "workbook.xls" /e/oneparm/anotherparm/yetanotherparm
然后在workbook.xls文件中,使用函数
访问命令行 Declare Function GetCommandLineA Lib "Kernel32" () As String
然后解析它......
Private Sub Workbook_Open()
...
commandline = GetCommandLineA
...
epos = Search("/e", commandline, 1) + 1
p1pos = Search("/", commandline, epos) + 1
onearg = Mid(commandline, epos, p1pos-epos)
p2pos = Search("/", commandline, p1pos)
anotherarg = Mid(commandline, p1pos, p2pos-p1pos)
...
请注意,此方法非常有限,如果参数中有空格或斜线或符号或插入符号或其他保留字符,则无效。要克服此限制,您需要在参数中实现一些编码方法;对于这种情况,我通常使用 urlencoding ,但任何其他技巧(用下划线替换空白或用plus signs.decision替换取决于你。
答案 1 :(得分:2)
批处理文件中最简单的方法是简单地设置一些环境变量;在创建进程时,它们将由excel继承;
<强>蝙蝠强>
set FILE_1=c:\bleep\bloop\some.file
set HELLO=Hello bob
set TAX=17.5
start excel "c:\null\book1.xlsm"
<强> Excel中强>
Sub Workbook_Open()
msgbox environ$("FILE_1")
msgbox environ$("HELLO")
msgbox environ$("TAX")