用户窗体关闭事件

7
我有一个用户窗体,它在循环中打开和关闭,只要条件存在。用户可以点击几个按钮来执行操作。问题是用户的不可预测性。其中一个问题是,用户不是单击其中一个按钮,而是单击UserForm顶部的关闭窗口按钮,这会使循环继续进行而不执行任何操作。
---编辑--- 是否有与该按钮相关的事件,我可以执行代码,以便让它执行与表单自身的取消按钮相同的操作。我不需要隐藏或禁用它。

下次在提问之前可以试着谷歌一下,这个问题已经在互联网上被问答了成千上万次。 - vacip
3
可能是 Hide close [X] button on excel vba userform for my progress bar 的重复问题。请问需要翻译哪种语言? - vacip
谢谢@vacip,我尝试了,可能不够彻底或者用的搜索词不对,但是我在SO网站上没能找到它。我稍微修改了我的问题,因为我更喜欢按钮执行与我的表单上的取消按钮相同的操作,而不希望像你标记为重复的那个问题一样将其隐藏。 - SilentRevolution
好的,现在它是 这个这个 的重复 :) 但我承认,你的问题比这些更加直接。 - vacip
2个回答

19
例如,您可以将以下宏添加到UserForms代码模块中:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "You can't close the dialog like this!"
    End If
End Sub

你比我先做到了。 :) - vacip
谢谢@SamGilbert,这正是我所需要的,现在我可以将其指向模块中的取消按钮单击事件,这比禁用它更符合我的偏好。 - SilentRevolution
我正在使用Access 2016,但是没有QueryClose这样的事件。我尝试输入此代码,但事件没有触发。有人知道为什么吗? - Shawn V. Wilson

4

你可以通过将焦点放在按钮上来代替使用 MsgBox:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        Me.Close_Button.SetFocus
    End If
End Sub

编辑:我发现了一个更好的选择:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    ' YOUR CODE HERE (Just copy whatever the close button does)

    If CloseMode = vbFormControlMenu Then
        Cancel = False
    End If

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接