了解从MsgBox返回的响应代码

时间:2009-11-18 14:47:44

标签: vba msgbox

我对编程非常陌生,我刚开始用excel学习VBA。我在这个网站上看到并在这里做了例子,但我对这段代码有疑问:

我知道使用“Dim”语句声明变量“Message”这里是数据类型为integer的变量。我不清楚的是;这里“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

感谢您的帮助: - )

=======

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

再次感谢

8 个答案:

答案 0 :(得分:22)

MsgBox确实会返回一个名为Enum(eration)的{​​{1}},除了带有'label'的数值之外,它基本上没有其他内容。在这种情况下,6和7是此枚举的成员,它们映射到答案MsgBoxResultYes

应尽可能避免使用所谓的“幻数”代替常量或枚举。

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

No

可能是Enum被称为vbMsgBoxResult或其他东西......我没有Office来验证这一点,只是Visual Studio。

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

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

答案 1 :(得分:8)

编写的代码非常糟糕,“6”和“7”是常量“vbYes”和“vbNo”的值,当用户在对话框上单击“是”或“否”时返回。

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

代码应该说

If message = Constants.vbYes 

而不是

If message = 6

因此很清楚发生了什么。

答案 2 :(得分:8)

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

VbMsgBoxResult

可以answer变量存储为Integer,因为枚举中的所有变量(例如vbAbortvbYes,{ {1}}等)实际上解决了整数问题。但是,每次要引用这些变量时,必须确定这些变量的整数值。在我看来,将答案存储为vbOK是一种更好的做法,这样您就可以真正看到可用的答案。

答案 3 :(得分:6)

此链接适用于VBScript,但我认为返回代码应该相同: MsgBox Function Reference

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

1   OK
2   Cancel
3   Abort
4   Retry
5   Ignore
6   Yes
7   No

答案 4 :(得分:5)

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

vbYes   6
vbNo    7

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

答案 5 :(得分: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

答案 6 :(得分:5)

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

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

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

答案 7 :(得分:3)

只需重写相当于:

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

继续前进