[英]Excel VBA: Can Shell run a macro in a workbook in another Excel instance
例如这样的事情来在新实例中打开工作簿,然后启动宏:
外壳(Excel.exe workbook.xlsm!macro1)
或者,如果工作簿已经打开,则:
外壳(xlObject macro1)
最重要的是使用Shell,以便在宏单独运行时继续执行代码。 如果不可能的话,也许我可以Shell(file.bat)到一个可以做同样事情的批处理文件。 批处理文件是什么样的?
谢谢。
您不能从命令行(包括命令行管理程序)在主机应用程序内执行VBA代码。 但是,有两种选择( Excel#1是当前打开的文件, Excel#2是您要在其中运行代码的文件):
Workbook_Open
事件处理程序,以便将执行每次打开该文件时-它是如何打开independet。 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
也可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.