Excel VBA:如何捕获MsgBox响应
我想执行以下任务:
-
写信息“你醒了吗? 并显示一个问号
-
捕获整型variablesintR中的响应,将intR值置于单元格A2中
-
如果回答是“是”,则在单元格A1“Hurray”
-
如果回答是“否”,则写一个带有文字“ZZZZZZZZ”的消息框
-
如果响应是取消,则退出该子
Sub EX3_1_6MsgBoxFunction() Dim intR As Integer Dim TxtRng As Range Dim stra As String Dim stra2 As String 'Have the message box display the buttons Yes, No and Cancel intR = MsgBox("Are you awake ? ", vbQuestion + vbYesNoCancel) intR = Range("a2") If intR = vbYes Then Range("a1") = "Hurray" 'that means yes ElseIf intR = vbNo Then stra2 = MsgBox("ZZZZZZZZZZ") Else Range("a2") = intR End If End Sub
首先欢迎来到StackOverflow。 当您提出问题时,请记得指定您的代码中存在问题的位置。
- 写信息“你醒了吗? 并显示一个问号
如果我理解正确,你不只是想要显示一个问号,而是有三种可能性的select,这是由下面的MsgBox模式给出的:
intR = MsgBox "Are you awake ?", vbYesNoCancel
这显示一个MsgBox
,这需要一个答案 (所以我删除了问题中的最后一个要点,因为答案是“是”,“否”或“取消”,它不能是别的。 映射到整数 intR
,这是正确的。
- 捕获整型variablesintR中的响应,将intR值置于单元格A2中
正如YowE3K所指出的,它应该是Range("a2").Value = intR
,not intR = Range("a2")
- 如果回答是“是”,则在单元格A1“Hurray”
- 如果回答是“否”,则写一个带有文字“ZZZZZZZZ”的消息框
- 如果响应是取消,则退出该子
你可以在这里使用一个Select Case
:把它想象成一个If
有两种以上的可能性:
Select Case intR Case 6 '<- According to the link I provided vbYes = 6 Range("a1") = "Hurray" Case 7 '<- According to the link I provided vbNo = 7 MsgBox "ZZZZZZZZ" Case 2 '<- According to the link I provided vbCancel = 2 Exit Sub End Select
你可以写vbYes,vbNo和vbCancel而不是整数。 正如另一位用户指出的那样,代码可能更具可读性。
你可以尝试这样的事情…..
Sub EX3_1_6MsgBoxFunction() Dim Ans As VbMsgBoxResult 'Have the message box display the buttons Yes, No and Cancel Ans = MsgBox("Are you awake ? ", vbQuestion + vbYesNoCancel) Select Case Ans Case vbYes Range("A1").Value = "Hurray" Range("A2").Value = "Yes" Case vbNo Range("A1").Value = "ZZZZZZZZZZ" Range("A2").Value = "No" Case Else Range("A1").Value = "" Range("A2").Value = "Calcel" End Select End Sub
除了Noldor的回答,作为一般规则,你不应该使用匈牙利符号作为你的variables名, intR
并没有告诉你任何关于variables和它的types不同的地方。
你应该能够从上下文中推断出这个types,而variables名应该给你更有用的东西。 我build议像重写你的代码
Sub EX3_1_6MsgBoxFunction() Dim retVal As Integer 'Ask the user whether they're awake retVal = MsgBox("Are you awake ? ", vbQuestion + vbYesNoCancel) 'Switch on their answer Select Case retVal Case vbYes Range("A2") = "Hurray" Case vbNo MsgBox "ZZZZZZZ" End Select End Sub
请注意,您不需要将MsgBox分配给variables,只需使用参数(在本例中为"ZZZZZ"
)来调用它即可提示用户,这样就可以消除不必要的stra2
和stra
。 您也不需要显式地Exit Sub
因为代码自然会在Select Case
或If
语句之后退出。