了解从MsgBox返回的响应代码

tin*_*tes 12 vba msgbox

我是编程新手,我刚开始用excel学习VBA.我在这个网站上遇到并在这里做了例子,但我对这段代码有疑问:

我知道使用"Dim"语句声明变量"Message"这里是数据类型为整数的变量.我不清楚的是; 这里"6"和"7"是什么意思.我相信他们来自某个地方.但是当我刚刚开始学习这个程序时,我什么都不知道.你能告诉我它是如何结束"6"和"7"的.我相信这里有一些基础

Private Sub CommandButton1_Click()
Dim message As Integer
message = MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
If message = 6 Then
Range("A1").Value = "You may proceed"
ActiveWorkbook.Activate 
ElseIf message = 7 Then
ActiveWorkbook.Close
End If

End Sub
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助:-)

=======

谢谢大家的答案,他们非常有帮助.是的,此主题已在超级用户站点中发布.我被告知这个问题应该属于这里所以我在阅读之后将它发布在这里,他们将自动从超级用户到stackoverflow.

再次感谢

Bob*_*bby 22

MsgBox确实返回一个Enum(eration)被调用的MsgBoxResult,除了带有'label'的数值之外,它基本上没有其他内容.在这种情况下,图6和7是该枚举的成员,它们被映射到答案YesNo.

尽可能避免使用所谓的"幻数"代替常量或枚举.

基本上,您可以将代码重写为:

Dim message As Integer
message = MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
If message = MsgBoxResult.Yes Then
    Range("A1").Value = "You may proceed"
    ActiveWorkbook.Activate
ElseIf message = MsgBoxResult.No Then
    ActiveWorkbook.Close
End If
Run Code Online (Sandbox Code Playgroud)

可能是Enum被称为vbMsgBoxResult或者什么......我没有Office来验证这一点,只是Visual Studio.

虽然我们正在努力......但这可能更容易理解:

Select Case MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
    Case MsgBoxResult.Yes
        Range("A1").Value = "You may proceed"
        ActiveWorkbook.Activate

    Case MsgBoxResult.No
        ActiveWorkbook.Close

    Case MsgBoxResult.Cancel
        ' he clicked cancel '

End Select
Run Code Online (Sandbox Code Playgroud)


Bri*_*oth 8

它编写得非常糟糕,"6"和"7"是常量"vbYes"和"vbNo"的值,当用户在对话框上单击"是"或"否"时返回.

参考:http://www.techonthenet.com/access/constants/msgbox_ret.php

代码应该说

If message = Constants.vbYes 
Run Code Online (Sandbox Code Playgroud)

代替

If message = 6
Run Code Online (Sandbox Code Playgroud)

因此很清楚发生了什么.


Ben*_*ack 8

当我第一次开始MsgBox回答时,我几乎总是将答案称为答案Integer.但是,我了解到最好的办法是将message变量声明为VbMsgBoxResult,这是一个始终显示可用答案的枚举.在下图中,IDE(例如,Visual Basic for Application编辑器)将向您显示可用的选项VbMsgBoxResult.

VbMsgBoxResult

可以你的店answer作为一个变量Integer,因为所有的枚举(例如变量vbAbort,vbYes,vbOK,等)做实际上决心整数.但是,每次要引用这些变量时,必须确定这些变量的整数值.在我看来,将答案存储起来是一种更好的做法,VbMsgBoxResult这样你就可以真正看到可用的答案.


Pat*_*nza 6

此链接适用于VBScript,但我认为返回代码应该相同: MsgBox函数参考

返回代码告诉您单击了哪个按钮:

1   OK
2   Cancel
3   Abort
4   Retry
5   Ignore
6   Yes
7   No
Run Code Online (Sandbox Code Playgroud)


mjv*_*mjv 5

这些是MsgBox()的返回值.作者应该使用它们的符号值来使程序更具可读性:

vbYes   6
vbNo    7
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此MSDN文章


RB.*_*RB. 5

6和7是MsgBox方法的返回码.基本上,当调用MsgBox时,它会向用户显示一个消息框,用户单击"是","否"或"取消".用户的选择从MsgBox方法返回为数字,其中6为是,7为否.

最好不要直接在代码中使用这些数字,而是使用Microsoft提供的代表它们的常量.您的代码可以重写为:

Private Sub CommandButton1_Click()
    Dim message As Integer
    message = MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
    If message = vbYes Then
        Range("A1").Value = "You may proceed"
        ActiveWorkbook.Activate 
    ElseIf message = vbNo Then
        ActiveWorkbook.Close
    ElseIf message = vbCancel Then
        'Do nothing.
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)


Jes*_*ber 5

6和7是具有特殊含义的硬编码值.'MsgBox("Click Yes ...")'调用将返回一个数字,让您的代码确定用户对消息框的处理方式,然后您可以使用条件(您的IF语句)来决定下一步该做什么.

这些特殊值的完整列表可以在MSDN文档中找到:

http://msdn.microsoft.com/en-us/library/139z2azd(VS.80).aspx