У меня есть книга (A), которая делает правдоподобные проверки, запускаемые при открытии события. Теперь я хочу написать еще один макрос, помещенный в другую книгу (B), который открывает книгу A, ждет, пока не будут выполнены правдоподобные проверки, и, если все в порядке, я хочу отсортировать данные и скопировать подмножество.

Есть ли у кого-нибудь идеи, можно ли это сделать и как? Я не могу предоставить для этого никакого кода, так как у меня даже нет подхода.

0
ruedi 16 Ноя 2018 в 16:20

1 ответ

Лучший ответ

Не уверен, что это подойдет вам, но это моя идея:

Изменения в книге А : Переместите проверку достоверности в 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

В книге Б : Установите Application.EnableEvents = False перед открытием Рабочей книги 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
1
FunThomas 16 Ноя 2018 в 14:16