繁体   English   中英

Excel VBA:Shell可以在另一个Excel实例中的工作簿中运行宏

[英]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是您要在其中运行代码的文件):

  1. 把你想要到Excel#2工作簿的运行代码Workbook_Open事件处理程序,以便将执行每次打开该文件时-它是如何打开independet。
  2. 让Excel#1在VBA中创建一个新的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM