【发布时间】:2018-09-26 16:42:18
【问题描述】:
我有一个宏,它从Application.InputBox 中获取一个值,然后尝试确保已将一个数值放入其中,并且没有按下取消键。
Sub test()
Dim testvalue As Variant
testvalue = Application.InputBox(Prompt:="Whatever", Title:="Whatever", Default:=10, Type:=1)
If testvalue <> False Then
MsgBox ("Test != False")
Else
MsgBox ("Test = False")
End If
If VarType(testvalue) = vbInteger Or VarType(testvalue) = vbLong Then
MsgBox ("Numerical value")
Else
MsgBox ("Nonnumerical value")
End If
End Sub
但是,似乎很难区分将 0 放入 InputBox 和按取消键。在这两种情况下,if 语句都将返回 Test = False 和 Test is a nonnumerical value。公平地说,第二个 if 语句对其他整数也是如此,但我认为使用 VarType 方法区分存储在变体中的整数和存储在其中的布尔值的可能性很小。
有什么方法可以区分 0 和 cancel 作为输入框的返回值,还是我必须制作自己的自定义表单?
尝试按照 cmets 中的建议使用 VBA 的 InputBox,无论输入什么值或按下什么按钮,都会返回“字符串”:
Sub test2()
Dim testvalue As Variant
testvalue = InputBox("Test")
Select Case VarType(testvalue)
Case vbBoolean:
Debug.Print "Boolean"
Case vbInteger:
Debug.Print "Integer"
Case vbLong:
Debug.Print "Long"
Case vbString:
Debug.Print "String"
Case vbVariant:
Debug.Print "Variant"
End Select
End Sub
【问题讨论】:
-
你真的需要使用
Application.Inputbox而不是VBA的Inputbox吗? -
@Rory 我喜欢能够在 application.inputbox 中强制使用 valuetype。从常规输入框中捕获取消值是否更简单?
-
不是真的,只是方法不同。您可以使用
If VarType(testvalue) = vbBoolean Then来捕捉取消。