13

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

我知道变量是使用“Dim”语句声明的“消息”这里是数据类型为整数的变量。我不清楚的是;这里的“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 后将其发布在这里。

再次感谢

4

8 回答 8

24

MsgBox确实返回一个Enum(eration)被调用的MsgBoxResult,这基本上就是带有“标签”的数值。在这种情况下,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

可能是 Enum 被称为 vbMsgBoxResult 什么的......我没有办公室来验证这一点,只有 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
于 2009-11-18T14:30:17.940 回答
9

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

VbMsgBoxResult

可以answer变量存储为 ,Integer因为枚举中的所有变量(例如vbAbortvbYesvbOK等)实际上都解析为整数。但是,每次要引用这些变量时,您都必须弄清楚这些变量的整数值是多少。在我看来,存储你的答案是一种更好的做法,VbMsgBoxResult这样你就可以实际看到可用的答案。

于 2009-11-20T13:01:14.563 回答
8

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

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

代码应该说

If message = Constants.vbYes 

代替

If message = 6

以便清楚发生了什么。

于 2009-11-18T14:52:33.040 回答
7

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

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

1   OK
2   Cancel
3   Abort
4   Retry
5   Ignore
6   Yes
7   No
于 2009-11-18T14:53:20.693 回答
5

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

vbYes   6
vbNo    7

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

于 2009-11-18T14:51:57.677 回答
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
于 2009-11-18T14:52:32.410 回答
5

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

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

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

于 2009-11-18T14:31:30.217 回答
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

继续前进

于 2009-11-25T09:05:58.703 回答