将VBA执行传递给另一个工作簿

我虽然会对这个问题有很多答案,但是没有find明显的答案。

是否有可能通过VBA执行到另一个工作簿?

我想要做的是:将执行从ThisWorbook(WbA)传递到另一个工作簿(WbB,即使WbB新的ThisWorkook ),然后closuresWb A.

编辑

我实际上想要做的是…

我正在寻找一种方法来更新我分发给几个人的工作簿,其中包含20张+ 10个代码模块+ 10个用户表单。

我目前的解决scheme

每当工作簿(WbA)打开时,代码将首先检查networking目录上是否有新版本可用。 如果是的话,macrosbuild议用户自动下载/保存新的工作簿(WbB)并从WbA中导出用户数据。

但之后,我不得不告诉用户现在可以closuresWbA并打开WbB,并将数据导入WbB。

我宁愿自动closuresWbA /打开WbB /导入数据了。

您可以通过使用Application.OnTime

WbA.xlsm中的代码:

 Sub Macro1() Application.OnTime Now(), "WbB.xlsm!Macro2" ThisWorkbook.Close End Sub 

在WbB.xlsm中的代码:

 Sub Macro2() MsgBox ThisWorkbook.Name & " says hello" End Sub 

因为应用程序通过计划任务调用Macro2 ,所以不再需要打开WbA。


注意:运行Macro1时甚至不需要打开WbB.xlsm ,只要您完全限定工作簿名称即可:

WbA.xlsm中的代码:

 Sub Macro1() Application.OnTime Now(), "'C:\Temp\SO_Test\WbB.xlsm'!Macro2" ThisWorkbook.Close End Sub 

在WbB.xlsm中的代码:

 Sub Macro2() MsgBox ThisWorkbook.Name & " says hello" End Sub 

假设WbA.xlsm是运行Macro1时在Excel中打开的唯一工作簿,在打开WbB.xlsm并继续执行之前,您可能会在很短的时间内看到空的Excel。

您只需在代码运行时将工作簿A保持打开状态,则需要执行的最后一行代码应该是

 WorkbookA.Close