2

您好,我正在使用要求用户输入数字的访问表单。我正在尝试处理错误,其中包括:1. 如果输入的值 = null, 2. 如果输入的值不是整数。我已经尝试使用下面的代码,但仍然收到“类型不匹配错误”

 Dim refNum As Integer


 refNum = InputBox("Please enter the Reference Number")

 If IsNumeric(refNum) Then

 MsgBox ("ok")

 ElseIf refNum = Null Then

 MsgBox (" Field is empty , enter a number")

 Else


 MsgBox (" Please enter a number")


End If
4

2 回答 2

1

有了这两条线......

Dim refNum As Integer
refNum = InputBox("Please enter the Reference Number")

如果用户在 中键入以下任何内容InputBox,代码将引发类型不匹配错误。

  • 字母,例如“abc”
  • 大于 32767 的数字
  • 没有

这样做的原因是因为它试图将InputBox值存储到一个变量,refNum,该变量被声明为Integer。然而,用户可以输入一个浮点数,并且赋值refNum将丢弃小数位。例如,如果用户输入 1.2,则 的值为refNum1。

AnInputBox提供对用户输入的有限直接控制。由于您是从表单中执行此操作的,因此请考虑使用未绑定的文本框 ,txtRefNum来从用户那里收集值。检查值 在文本框的更新前事件中,显示不可接受的值和Cancel更新的消息。

在评论中,您表示您希望“错误处理程序在分配给 refNum 时捕获不匹配错误,通知用户并再次抛出 InputBox。” 在这种情况下,此代码会执行您想要的操作。

    Dim refNum As Integer
    Dim strMsg As String

On Error GoTo ErrorHandler

    refNum = InputBox("Please enter the Reference Number")
    MsgBox "ok"

ExitHere:
    Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 13 ' type mismatch
        MsgBox "Reference NUMBER!"
        Resume ' present InputBox again
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description & ")"
        MsgBox strMsg
        GoTo ExitHere
    End Select
于 2013-03-04T15:50:04.863 回答
0

您的 refNum 变量必须是变体或字符串。当您将 InputBox 作为整数分配给 refNum 时,您的 InputBox 只需要整数值,因此在进入 if 语句之前会中断。

如果您使用字符串,您还需要更改 elseif。

ElseIf refNum = Null Or refNum = "" Then
于 2013-03-04T15:45:43.740 回答