例如,在新实例中打开工作簿然后启动宏:
Shell(Excel.exe workbook.xlsm!macro1)
或者如果工作簿已经打开,那么:
Shell(xlObject macro1)
最重要的是使用Shell以便在宏单独运行时允许代码继续。如果不可能那么也许我可以Shell(file.bat)到一个批处理文件,它会做同样的事情。批处理文件会是什么样的?
谢谢。
答案 0 :(得分:0)
您无法从命令行(包括Shell)在主机应用程序中执行VBA代码。 但是有两种选择( Excel#1 是当前打开的文件, Excel#2 是您要运行代码的那个):
Workbook_Open
事件处理程序中,以便每次打开该文件时都会执行 - 独立于 它的打开方式。Excel.Application
对象,并在该应用程序中打开Excel#2。您现在可以在Excel#2的应用程序对象上调用Run()
方法来执行Excel#2中的代码,但这将与Excel#1的代码同步完成。您可以使用Excel#2应用程序的OnTime()
方法来延迟宏执行,在这种情况下,Excel#2的应用程序将在延迟过去时调用代码,并且代码在Excel#2的应用程序中异步运行。选项2的示例代码如下所示:
Public Function RemoteRun(ByVal strFile As String) As Application
Dim app As Application
Dim wb As Workbook
Set app = New Application
Set wb = app.Workbooks.Open(strFile)
app.OnTime Now + 1 / 24 / 60 / 60, "RemoteMacro"
Set RemoteRun = app
End Function
确保存储返回值(Excel#2的应用程序对象),因此它不会自动关闭(它仍然必须异步运行RemoteMacro)。如果您不希望Excel#1的代码管理Excel#2的应用程序对象的生命周期,那么将其Visible
属性设置为True
也会有效。