Не уверен, что это будет соответствовать вашим потребностям, но это моя идея:
Изменения в Рабочая книга 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 : установите Application.EnableEvents = False
перед открытием Workbook A - это не позволит выполнить Open
-код.Вы можете вызвать любую общедоступную подпрограмму или функцию, являющуюся частью модуля, через Application.Run
(есть другой способ, ссылаясь на книгу A в книге B, но это склеит эти книги вместе, и 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