如何在另一个工作簿的事件结束时触发

时间:2018-11-16 13:20:47

标签: excel vba excel-vba

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

有人知道这个方法是否可以实现吗?我什至没有办法提供任何代码。

1 个答案:

答案 0 :(得分:1)

不确定是否适合您的需求,但这是我的主意:

工作簿A 中的更改: 如果一切正常,将WB a中的可行性检查移到一个返回布尔信号的函数中。该函数必须位于模块中,并且必须声明为public

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

在打开的工作簿中,调用此函数并对结果做出反应(“阻止”)

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

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

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