我虽然对这个问题有很多答案,但没有找到任何明显的答案。
是否可以将VBA执行传递给另一个工作簿?
我想要做的是:将执行从ThisWorbook
(WbA)传递到另一个工作簿(WbB,即使WbB成为新的ThisWorkook
),然后关闭Wb A.
我真正想做的事情......
我正在寻找一种方法来更新我分发给少数人的工作簿,其中包含20张+10个代码模块+10个用户表单。
我目前的解决方案
每次打开工作簿(WbA)时,代码将首先检查网络目录上是否有更新的版本。如果是这样,宏建议用户自动下载/保存新工作簿(WbB)并从WbA导出用户数据。
但是,之后,我被迫告诉用户它现在可以关闭WbA并打开WbB并将数据导回WbB。
我宁愿自动关闭WbA /开放WbB /导入数据。
答案 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