首页 > 解决方案 > 如何在另一个工作簿的事件结束时触发

问题描述

我有一个工作簿 (A),可以对打开的事件进行合理的检查。现在我想写另一个 makro 放在另一个工作簿 (B) 中,打开工作簿 A,等到看似合理的检查完成,如果一切正常,我想对数据进行排序并复制一个子集。

有谁知道这是否可以做到以及如何做到?我无法为此提供任何代码,因为我什至没有办法。

标签: excelvba

解决方案


不确定这是否符合您的需求,但这是我的想法:

工作簿 A中的更改:将 WB a 中的合理性检查移动到一个函数中,如果一切正常,该函数将返回一个布尔信号。此函数需要在模块中,并且必须声明为public.

Function CheckPlausibility() as Boolean
    (...do your checks here)
    CheckPlausibility = True  ' Or False
End Function

在 Workbook-Open 中,调用此函数并对结果做出反应(“阻塞”)

Private Sub Workbook_Open()
    If not CheckPlausibility then
       (...Disable code)
    End If
End Sub

工作簿 B中:Application.EnableEvents = False在打开工作簿 A 之前设置 - 这将阻止执行Open-code。您可以通过调用作为模块一部分的任何公共子或函数Application.Run(还有另一种方法是在工作簿 B 中引用工作簿 A,但这会将这些书粘合在一起,并且当您打开 B 时,A 将随时自动打开)。

const wbName = "C:\temp\A.xlsm"
Dim wb as Workbook, wbAIsOkay as Boolean 
Application.EnableEvents = False
Set wb = Workbooks.Open(wbName)
wbAIsOkay = Application.Run(wbName & "!CheckMe")
Application.EnableEvents = True
If wbAIsOkay Then 
   (...)
End If

推荐阅读