У меня есть макрос, который принимает значение от 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 и отменить, являясь возвращаемым значением для поля ввода, или мне придется создавать собственную форму?
Попытка использовать 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