Excel宏的控制文件

时间:2012-06-08 09:03:45

标签: excel vba batch-file

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

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

谢谢。

2 个答案:

答案 0 :(得分: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 ,但任何其他技巧(用下划线替换空白或用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")