在VBA中处理输入框中的非整数

use*_*603 3 excel vba excel-vba

我有一个名为"need"的变量,它被定义为一个整数.出现一个输入框并提示用户.如果他们输入一个整数,它会显示Msgbox"Got your number".如果我输入一个字符串,我得到运行时错误'13':输入不匹配.我想如果我只是使用了Else声明,那就说再试一次.尽管如此,它并没有这样做.我是否需要在Else声明中处理错误?如果是这样,这些线是什么?

Sub gadgetmanuf()

Dim need As Integer
'Dim rawneed As Single
'Dim rawavailable As Single


    need = InputBox("How many gadgets are needed?", "Insert a number")

    If TypeName(need) = "Integer" Then
        MsgBox ("Got your number")
    Else
        MsgBox ("Try again")
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

bre*_*tdj 5

使用Application.InputBoxwith类型会1强制用户输入一个数字(为文本,范围等提供自己的错误消息).所以你需要处理的是Cancel选项,即

下面的代码使用一个变体来处理这个问题,如使用Cancel整型给出了0 -这可能是一个有效的条目.

Sub TaylorWalker()
redo:
vStr = Application.InputBox("How many gadgets are needed?", "Enter a number", , , , , , Type:=1)
If vStr = False Then GoTo redo
End Sub
Run Code Online (Sandbox Code Playgroud)

更长的选择

测试输入的变量是否大于0

Sub EddieBetts()
Dim StrPrompt As String
Dim lngNum As Long

StrPrompt = "How many gadgets are needed?"
redo:
lngNum = Application.InputBox(StrPrompt, "Enter an integer number (numbers will be rounded)", , , , , , Type:=1)
If lngNum < 1 Then
    StrPrompt = "How many gadgets are needed - this must be a postive integer"
    GoTo redo
End If

MsgBox "User entered " & lngNum

End Sub
Run Code Online (Sandbox Code Playgroud)