我是编程新手,我刚开始用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是该枚举的成员,它们被映射到答案Yes
和No
.
尽可能避免使用所谓的"幻数"代替常量或枚举.
基本上,您可以将代码重写为:
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)
它编写得非常糟糕,"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)
因此很清楚发生了什么.
当我第一次开始MsgBox
回答时,我几乎总是将答案称为答案Integer
.但是,我了解到最好的办法是将message
变量声明为VbMsgBoxResult
,这是一个始终显示可用答案的枚举.在下图中,IDE(例如,Visual Basic for Application编辑器)将向您显示可用的选项VbMsgBoxResult
.
你可以你的店answer
作为一个变量Integer
,因为所有的枚举(例如变量vbAbort
,vbYes
,vbOK
,等)做实际上决心整数.但是,每次要引用这些变量时,必须确定这些变量的整数值.在我看来,将答案存储起来是一种更好的做法,VbMsgBoxResult
这样你就可以真正看到可用的答案.
此链接适用于VBScript,但我认为返回代码应该相同: MsgBox函数参考
返回代码告诉您单击了哪个按钮:
1 OK
2 Cancel
3 Abort
4 Retry
5 Ignore
6 Yes
7 No
Run Code Online (Sandbox Code Playgroud)
这些是MsgBox()的返回值.作者应该使用它们的符号值来使程序更具可读性:
vbYes 6
vbNo 7
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此MSDN文章
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)
6和7是具有特殊含义的硬编码值.'MsgBox("Click Yes ...")'调用将返回一个数字,让您的代码确定用户对消息框的处理方式,然后您可以使用条件(您的IF语句)来决定下一步该做什么.
这些特殊值的完整列表可以在MSDN文档中找到:
http://msdn.microsoft.com/en-us/library/139z2azd(VS.80).aspx