Я настоятельно рекомендую выполнить действия, описанные в этой статье: Rubberduck: UserForm1.Show
Тем не менее, простая и грязная реализация может выглядеть следующим образом:
Код формы:
Добавление события, которое вызывается при нажатии кнопки OK-Cancel, передавая логическое значение, указывающее, продолжать или нет:
Public Event OnClose(ByVal bool As Boolean)
Private Sub CmdOK_Click()
RaiseEvent OnClose(True)
End Sub
Private Sub CmdCancel_Click()
RaiseEvent OnClose(False)
End Sub
Простой класс-оболочка:
Здесь мы просто создаем экземпляр формы и слушаем событие OnClose()
.
Option Explicit
Private WithEvents objForm As UserForm1
Private m_flag As Boolean
Public Function Show() As Boolean
Set objForm = New UserForm1
objForm.Show ' No vbModeless here, we want to halt code execution
Show = m_flag
End Function
Private Sub CloseForm()
Unload objForm
Set objForm = Nothing
End Sub
Private Sub objForm_OnClose(ByVal bool As Boolean)
m_flag = bool
CloseForm
End Sub
Вызов класса-оболочки:
Sub Something()
Dim bool As Boolean
With New FormWrapper
bool = .Show
End With
MsgBox "Should I proceed? " & bool
End Sub