2012-12-03 20 views
1

我很新vba excel。我正在尝试为vba excel中的报表格式化任务开发一些小工具。我知道如果我把下面的代码放入一个按钮,它会卸载我的表单,但我怎么能重写一个msgbox的按钮来卸载整个用户表单?如何覆盖msgbox按钮以卸载VBA中的用户窗体?

Unload UserForm1 
+0

不完全确定你的意思。你的意思是你想通过点击一个按钮来关闭用户窗体? – Chris

+0

是的。我希望我的程序完全关闭,当用户点击msgbox –

回答

2

如果我理解你的问题正确的(并且与克里斯我不知道,我这样做),你知道,一个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卸载窗体的代码。

+0

嗨Alan的按钮。感谢您的回复。当我尝试时,它会给两个按钮提供一个msgbox。 (确定并取消)当我点击确定按钮时,它不会卸载窗体,它落在代码中的Else语句中。但是当我点击取消按钮,它的作品。 :S –

+2

是的,如果你读过上面的代码,那就是它打算做的。我给你说明了这个消息框如何可以有不同的按钮(取决于你传递的参数;在本例中是vbOkCancel),并且每个按钮都返回一个不同的值(在本例中为vbCancel或vbOK)。然后,您可以像我这里所做的那样使用If块来根据用户单击哪个按钮来选择要执行的操作。如果你只想要一个按钮,就可以创建参数vbOKOnly,但在这种情况下,你不需要If语句;只需在msgbox之后的下一行中卸载表单即可。 –

+0

好吧然后。我使用'vbOKOnly',并在'If'和'Else'语句中写入'Unload UserForm1'。这解决了我的问题:) 在问我之前,我已经猜到MsgBox可能会像java的swing - JOptionPane一样被覆盖,但不知道如何,所以我认为这将是一个问题。感谢您的帮助 –