Похоже, ThisWorkbook
загружает до независимо от того, какую другую рабочую книгу вы открываете, поэтому ActiveWorkbook
равно Nothing
, и любой вызов участника против него вызовет ошибку 91.
Обработчик Workbook_Open
будет работать только для ThisWorkbook
(документ, содержащий проект VBA) - вам нужно подключить другой обработчик на уровне приложения, чтобы вы могли запускать код всякий раз, когда любой рабочая книга открыта.
Измените обработчик Workbook_Open
, чтобы захватывать ссылку на экземпляр Application
в объектную переменную уровня WithEvents
:
Option Explicit
Private WithEvents app As Excel.Application
Private Sub Workbook_Open()
Set app = Me.Application
End Sub
Теперь выберите app
из левого раскрывающегося списка и создайте обработчик для события WorkbookOpen
- , в котором вы захотите проверить, нужно ли открывать это диалоговое окно:
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
If InStr(Wb.FullName, "Export Checksheet") > 0 Then
With New UserForm1
.Show
End With
End If
End Sub
Обратите внимание, что событие всего приложения предоставляет вам объект Workook
, поэтому вам не нужно заботиться о том, является ли это ActiveWorkbook
.