使用 "Cancel" 或 "X-button" 退出用户窗体时禁用 _Exit 事件
Disable _Exit event when quitting userform using "Cancel" or "X-button"
我在用户表单的下拉框中有一个代码。每次用户离开下拉框时,代码都会检查用户输入的值是否正确(即匹配列表)。如果没有,它会触发一个消息框。这是我的代码:
Private Sub CmboxModifyRoute_Exit(ByVal Cancel As MSForms.ReturnBoolean)
UserValue = CmboxModifyRoute.Value
counter = 0
Cell = Range("C15").Value
If UserValue = "" Then Exit Sub
Do While (counter < 35 And Cell <> UserValue) 'checking if UserValue is valid
counter = counter + 1
Cell = Range("C15").Offset(counter, 0).Value
Loop
If counter > 34 Then 'if invalid, then display message box
MsgBox "Invalid", vbExclamation
End If
End Sub
当我使用 "X" 按钮或 "Cancel" 按钮退出用户表单时出现问题。如果 UserValue 无效,在我退出用户窗体后它仍然显示 "Invalid" 消息框。我不想要它,我只想卸载用户表单。我该如何处理?非常感谢!
将您的条件更改为:
If Me.Visible And counter > 34 Then
MsgBox "Invalid", vbExclamation
End If
如果表单不可见,则不会显示消息。
数据验证应该在组合框的 BeforeUpdate
事件中进行。 Before Update 不会在用户表单的 Terminate
事件之前触发。将 UserForm_Terminate
和 CmboxModifyRoute_BeforeUpdate
事件添加到您的代码中,在每个声明上设置断点,并在调试模式下观察事件发生的顺序。
Private Sub CmboxModifyRoute_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'data validation goes here
'doesn't fire when the form is closed
End Sub
Private Sub CmboxModifyRoute_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'this triggers before Terminate
End Sub
Private Sub UserForm_Terminate()
End Sub
我在用户表单的下拉框中有一个代码。每次用户离开下拉框时,代码都会检查用户输入的值是否正确(即匹配列表)。如果没有,它会触发一个消息框。这是我的代码:
Private Sub CmboxModifyRoute_Exit(ByVal Cancel As MSForms.ReturnBoolean)
UserValue = CmboxModifyRoute.Value
counter = 0
Cell = Range("C15").Value
If UserValue = "" Then Exit Sub
Do While (counter < 35 And Cell <> UserValue) 'checking if UserValue is valid
counter = counter + 1
Cell = Range("C15").Offset(counter, 0).Value
Loop
If counter > 34 Then 'if invalid, then display message box
MsgBox "Invalid", vbExclamation
End If
End Sub
当我使用 "X" 按钮或 "Cancel" 按钮退出用户表单时出现问题。如果 UserValue 无效,在我退出用户窗体后它仍然显示 "Invalid" 消息框。我不想要它,我只想卸载用户表单。我该如何处理?非常感谢!
将您的条件更改为:
If Me.Visible And counter > 34 Then
MsgBox "Invalid", vbExclamation
End If
如果表单不可见,则不会显示消息。
数据验证应该在组合框的 BeforeUpdate
事件中进行。 Before Update 不会在用户表单的 Terminate
事件之前触发。将 UserForm_Terminate
和 CmboxModifyRoute_BeforeUpdate
事件添加到您的代码中,在每个声明上设置断点,并在调试模式下观察事件发生的顺序。
Private Sub CmboxModifyRoute_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'data validation goes here
'doesn't fire when the form is closed
End Sub
Private Sub CmboxModifyRoute_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'this triggers before Terminate
End Sub
Private Sub UserForm_Terminate()
End Sub