如何在VBA中重写msgbox按钮以卸载Userform?

如何在VBA中重写msgbox按钮以卸载Userform?,vba,excel,overriding,userform,msgbox,Vba,Excel,Overriding,Userform,Msgbox,我是vba excel的新手。我正在尝试开发一个小工具,用于vba excel中的报表格式化任务。我知道如果我把下面的代码放到一个按钮中,它会卸载我的表单,但是我如何覆盖msgbox的按钮来卸载整个用户表单呢 Unload UserForm1 如果我正确理解了您的问题(和Chris一样,我也不确定我是否理解),您是否知道msgbox可以返回一个值,并且您可以使用该值关闭表单?例如,第一个返回值,第二个不返回: Dim l As Long l = MsgBox("What do you wan

我是vba excel的新手。我正在尝试开发一个小工具,用于vba excel中的报表格式化任务。我知道如果我把下面的代码放到一个按钮中,它会卸载我的表单,但是我如何覆盖msgbox的按钮来卸载整个用户表单呢

Unload UserForm1

如果我正确理解了您的问题(和Chris一样,我也不确定我是否理解),您是否知道msgbox可以返回一个值,并且您可以使用该值关闭表单?例如,第一个返回值,第二个不返回:

Dim l As Long

l = MsgBox("What do you want to do?", vbOKCancel)

If l = vbCancel Then
     Unload UserForm1
Else
    MsgBox "You selected 'OK'"
End If

您可以使用返回值(l)告诉调用msgbox卸载表单的代码。

不完全确定您的意思。你的意思是你想通过点击一个按钮来关闭一个用户表单吗?是的。我希望当用户点击msgboxHi Alan的按钮时,我的程序完全关闭。谢谢你的回复。当我尝试时,它会给出一个带有两个按钮的msgbox。(OK和Cancel)当我单击OK按钮时,它不会卸载表单,而是落在代码中的Else语句中。但当我点击“取消”按钮时,它就起作用了SYes,如果你读了上面的代码,那就是它的目的。我给出了该示例,以解释消息框如何具有不同的按钮(取决于传递它的参数;在本例中为vbOkCancel),以及每个按钮返回不同的值(在本例中为vbCancel或vbOK)。然后,您可以像我在这里所做的那样使用If块,根据用户单击的按钮选择要采取的操作。如果只需要一个按钮,则将参数设为vbOKOnly,尽管在这种情况下,不需要If语句;只需在msgbox之后的下一行卸载表单。然后确定。我使用了
vbOKOnly
,并在
If
Else
语句中编写了
Unload UserForm1
。这就解决了我的问题:)在提问之前,我已经猜到MsgBox可以像java的swing-JOptionPane一样被覆盖,但不知道如何覆盖,所以我认为这将是一个问题。谢谢你的帮助