2

我有一个 Excel 宏,我也用它来运行命令行程序。在那个宏中,我为不同的文件路径、文件名等设置了一些参数,现在我想将它们放入(也许)一个 Windows 批处理文件中,这样我(或用户)就不需要触摸宏,但可以更改该 .bat 控制文件中的文件路径并让宏相应地更改其值。

我怎么能完成这样的任务?也许有一些例子你可以指出我。

谢谢你。

4

2 回答 2

3

Excel 不提供任何标准的文档化方式来将参数从命令行传递到工作簿。

但是,有一种未记录的、棘手的且有些有限的方法可以做到这一点。滥用 Excel 的/e参数。

在您的 BAT 文件中,您以这种方式调用 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但任何其他技巧(用下划线或加号替换空格。决定取决于你。

于 2012-06-08T09:21:33.060 回答
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")
于 2012-06-08T12:03:07.777 回答