我有一个工作簿(A),可以对打开事件进行合理的检查。现在,我想编写另一个放置在另一个工作簿(B)中的makro,它打开工作簿A,等到进行合理的检查为止,如果一切正常,我想对数据进行排序并复制一个子集。
有人知道这个方法是否可以实现吗?我什至没有办法提供任何代码。
答案 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