Хотя это может быть не лучшим решением, вы можете использовать следующий код в событии QueryClose
Private Sub UserForm_QueryClose(Cancel As Integer _
, CloseMode As Integer)
' Prevent the form being unloaded
If CloseMode = vbFormControlMenu Then Cancel = True
' Hide the Userform
Hide
ThisWorkbook.Worksheets(1).Shapes("Checkbox1").OLEFormat.Object.Value = 0
End Sub
Я предполагаю, что вы не используете ActiceX-Control, и имя вашего флажка равно CheckBox1
Несколько лучшим способом может быть использование следующего кода в обычном модуле для флажка вместо приведенного выше кода в модуле пользовательской формы.Таким образом, форме не нужно знать о флажке, который вызвал ее.
Sub Checkbox_code()
Dim f As UserForm1
Dim b As CheckBox
Set f = New UserForm1
Set b = ThisWorkbook.Worksheets(1).Shapes("Checkbox1").OLEFormat.Object
If b.Value = xlOn Then
f.Show
b.Value = xlOff
End If
End Sub