Excelmacros的控制文件

我有一个Excelmacros,我也用来运行一个命令行程序。 在这个macros中,我已经为不同的文件path,文件名等设置了一些参数,我现在想把(也许)一个Windowsbatch file放在这里,以便我(或用户)不需要触摸macros,更改该.bat控制文件中的文件path,并让macros相应地更改其值。

我怎么能做到这样的任务? 也许有些例子可以指向我。

谢谢。

Excel不提供任何标准的文档方式从命令行将parameter passing给工作簿。

但是,这样做有一个无证,棘手和有限的方法。 滥用Excel的/e参数。

在你的BAT文件中,你用这种方式调用excel

  start excel "workbook.xls" /e/oneparm/anotherparm/yetanotherparm 

然后在workbook.xls文件中,使用该函数访问命令行

  Declare Function GetCommandLineA Lib "Kernel32" () As String 

然后parsing它

  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,但任何其他技巧(用下划线或加号代替空格。决定由您决定。

batch file最简单的方法是简单地设置一些环境variables; 在创build过程中,它们将被excelinheritance;

蝙蝠

 set FILE_1=c:\bleep\bloop\some.file set HELLO=Hello bob set TAX=17.5 start excel "c:\null\book1.xlsm" 

高强

 Sub Workbook_Open() msgbox environ$("FILE_1") msgbox environ$("HELLO") msgbox environ$("TAX")