Vba 使用“退出用户窗体时禁用”退出事件;取消“;或;“X按钮”;

Vba 使用“退出用户窗体时禁用”退出事件;取消“;或;“X按钮”;,vba,events,messagebox,Vba,Events,Messagebox,在我的用户表单的下拉框中有一个代码。每次用户离开下拉框时,代码都会检查用户输入的值是否正确(即与列表匹配)。如果没有,它会触发一个消息框。这是我的密码: Private Sub CmboxModifyRoute_Exit(ByVal Cancel As MSForms.ReturnBoolean) UserValue = CmboxModifyRoute.Value counter = 0 Cell = Range("C15").Value If UserValue = "" Then Ex

在我的用户表单的下拉框中有一个代码。每次用户离开下拉框时,代码都会检查用户输入的值是否正确(即与列表匹配)。如果没有,它会触发一个消息框。这是我的密码:

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
专用子CmboxModifyRoute_出口(ByVal Cancel作为MSForms.ReturnBoolean)
UserValue=CmboxModifyRoute.Value
计数器=0
单元格=范围(“C15”)。值
如果UserValue=“”,则退出Sub
执行While(计数器<35和单元格UserValue)'检查UserValue是否有效
计数器=计数器+1
单元格=范围(“C15”)。偏移量(计数器,0)。值
环
如果计数器>34,则“如果无效,则显示消息框”
MsgBox“无效”,请使用感叹号
如果结束
端接头

当我使用“X”按钮或“Cancel”按钮退出userform时,就会出现问题。如果UserValue无效,在我退出userform之后,它仍然会显示“invalid”消息框。我不想要它,我只想卸载userform。我该怎么处理?非常感谢

将您的条件更改为:

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

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

数据验证应进入组合框的
BeforeUpdate
事件。在用户窗体的
终止事件之前,不会触发Before Update。在更新之前向代码中添加
UserForm\u Terminate
CmboxModifyRoute\u事件,在每个事件的声明上设置断点,并在调试模式下观察事件发生的顺序

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