使用&#34退出用户窗体时禁用_Exit事件;取消"或" X按钮"

时间:2015-03-13 14:54:03

标签: vba events messagebox

我的userform上的下拉框中有一个代码。每当用户离开下拉框时,代码检查用户输入的值是否正确(即匹配列表)。如果没有,则触发消息框。这是我的代码:

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”按钮或“取消”按钮退出用户窗体时出现问题。如果UserValue无效,在我退出用户窗体后,它仍会显示“无效”消息框。我不想要它,我只想让userform卸载。我怎么处理这个?非常感谢!

2 个答案:

答案 0 :(得分:3)

将您的状况改为:

If Me.Visible And counter > 34 Then 
    MsgBox "Invalid", vbExclamation
End If

如果表单不可见,则不会显示该消息。

答案 1 :(得分:3)

数据验证应该放在组合框的BeforeUpdate事件中。更新之前不会在用户表单Terminate事件之前触发。将UserForm_TerminateCmboxModifyRoute_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