我对编程非常陌生,我刚开始用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。
再次感谢
答案 0 :(得分:22)
MsgBox
确实会返回一个名为Enum(eration)
的{{1}},除了带有'label'的数值之外,它基本上没有其他内容。在这种情况下,6和7是此枚举的成员,它们映射到答案MsgBoxResult
和Yes
。
应尽可能避免使用所谓的“幻数”代替常量或枚举。
基本上,您可以将代码重写为:
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
中可用的选项。
您可以将answer
变量存储为Integer
,因为枚举中的所有变量(例如vbAbort
,vbYes
,{ {1}}等)实际上解决了整数问题。但是,每次要引用这些变量时,必须确定这些变量的整数值。在我看来,将答案存储为vbOK
是一种更好的做法,这样您就可以真正看到可用的答案。
答案 3 :(得分:6)
此链接适用于VBScript,但我认为返回代码应该相同: MsgBox Function Reference
返回代码告诉您单击了哪个按钮:
1 OK
2 Cancel
3 Abort
4 Retry
5 Ignore
6 Yes
7 No
答案 4 :(得分:5)
答案 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
继续前进