我有一个工作簿,它有很多不同的宏,以及映射文件。我想创建一个.bat文件来打开这个工作簿并运行一个特定的宏。通过.bat文件将参数传递给启用宏的工作簿?
我不希望这个宏运行每次有workbook_open事件的时候,我只希望它在该批处理文件说
"C:\~\Excel.exe" "c:\workbook1.xlsm" /Macro1
或类似的东西运行。
这可能吗?
谢谢!
我有一个工作簿,它有很多不同的宏,以及映射文件。我想创建一个.bat文件来打开这个工作簿并运行一个特定的宏。通过.bat文件将参数传递给启用宏的工作簿?
我不希望这个宏运行每次有workbook_open事件的时候,我只希望它在该批处理文件说
"C:\~\Excel.exe" "c:\workbook1.xlsm" /Macro1
或类似的东西运行。
这可能吗?
谢谢!
如果我理解正确,你的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")
完美地工作,只需要删除$符号和“作为对象”。非常感谢! – fomoz
我刚刚编辑了答案(几年后......)。 $ strMacroName是一个变量的PHP语法,而'...(strMacroName $)'基本上与'...(strMacroName as String)相同' – ExternalUse
这里没有命令行选项。你可以使用vbs文件而不是bat文件:这会给你更多的控制权。 –
另一种可能性是批处理文件创建一个文本文件(Echo Macro1 >> workbook1.txt)。工作簿1中的Auto_Open宏可以读取该文件,保存其内容并将其删除。然后,uto_Open将在文件中执行参数。注意:Auto_Open是一个Excel 2003工具。对于更高版本的Excel可能有更好的技术。 –
VBS文件听起来不错,但我无法弄清楚如何使它工作。你可以请张贴一个代码样本来打开book1.xlsm并运行Macro1吗? – fomoz