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")