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

时间:2017-06-28 20:49:36

标签: excel vba excel-vba

我虽然对这个问题有很多答案,但没有找到任何明显的答案。

是否可以将VBA执行传递给另一个工作簿?

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

修改

我真正想做的事情......

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

我目前的解决方案

每次打开工作簿(WbA)时,代码将首先检查网络目录上是否有更新的版本。如果是这样,宏建议用户自动下载/保存新工作簿(WbB)并从WbA导出用户数据。

但是,之后,我被迫告诉用户它现在可以关闭WbA并打开WbB并将数据导回WbB。

我宁愿自动关闭WbA /开放WbB /导入数据。

2 个答案:

答案 0 :(得分:2)

您可以使用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。

注意:WbB.xlsm甚至不需要在运行Macro1时打开,只要您完全符合工作簿名称:

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。 / p>

答案 1 :(得分:-3)

您必须在代码运行时保持工作簿A处于打开状态,您需要执行的最后一行代码

WorkbookA.Close