2011-12-07 94 views
1

我有一个工作簿,它有很多不同的宏,以及映射文件。我想创建一个.bat文件来打开这个工作簿并运行一个特定的宏。通过.bat文件将参数传递给启用宏的工作簿?

我不希望这个宏运行每次有workbook_open事件的时候,我只希望它在该批处理文件说

"C:\~\Excel.exe" "c:\workbook1.xlsm" /Macro1 

或类似的东西运行。

这可能吗?

谢谢!

+0

这里没有命令行选项。你可以使用vbs文件而不是bat文件:这会给你更多的控制权。 –

+0

另一种可能性是批处理文件创建一个文本文件(Echo Macro1 >> workbook1.txt)。工作簿1中的Auto_Open宏可以读取该文件,保存其内容并将其删除。然后,uto_Open将在文件中执行参数。注意:Auto_Open是一个Excel 2003工具。对于更高版本的Excel可能有更好的技术。 –

+0

VBS文件听起来不错,但我无法弄清楚如何使它工作。你可以请张贴一个代码样本来打开book1.xlsm并运行Macro1吗? – fomoz

回答

2

如果我理解正确,你的vbs脚本可能看起来像这样 - 我猜可以为你自己添加文件名和错误处理变量。

Sub RunAMacro(strMacroName$) 
    Dim oExcel as Object 
    Set oExcel = CreateObject("excel.application") 
    oExcel.Workbooks.Open "c:\path\to\file.xls" 
    oExcel.Run strMacroName 'This is the name of the macro 
    ' decide here if you need to save, or just close, or whatever 
    oExcel.ActiveWorkbook.Saved = True 
    oExcel.ActiveWindow.Close 
    oExcel.Quit 
    Set oExcel = Nothing 
End Sub 

RunAMacro("YourMacroName") 
+0

完美地工作,只需要删除$符号和“作为对象”。非常感谢! – fomoz

+0

我刚刚编辑了答案(几年后......)。 $ strMacroName是一个变量的PHP语法,而'...(strMacroName $)'基本上与'...(strMacroName as String)相同' – ExternalUse

相关问题