2013-03-04 55 views
1

嗨,我正在使用一个访问表单,要求用户输入一个数字。我正在尝试处理错误,其中包括; 1.如果输入的值=空,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 

回答

1

有了这些2行...

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

如果用户键入任何以下到InputBox的,该代码将抛出类型不匹配错误。

  • 字母,如 “ABC”
  • 将大于32767
  • 没有

的原因是因为它试图在InputBox值存储到一个变量,refNum,这被宣布为Integer。但是用户可以输入一个浮点数,并且分配到refNum将丢弃小数位。例如,如果用户输入1.2,则refNum的值将为1.

InputBox对用户的输入提供有限的直接控制。由于您是从表单执行此操作,因此请考虑使用未绑定的文本框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 
+0

好了,所以就没有错误输入框可处理,如果用户不输入一个整数? – derek 2013-03-04 16:04:52

+0

不可以。您可以添加错误处理程序来在分配给'refNum'时捕获不匹配错误,通知用户并再次抛出InputBox。那是你要的吗? – HansUp 2013-03-04 16:07:02

+0

是的,这正是我想要做的 – derek 2013-03-04 16:08:46

0

你引用句柄变量需要是一个变体或字符串。当你将你的InputBox分配给refNum作为一个整数时,你的InputBox只需要整数值,然后在得到你的if语句之前就中断了。

如果你使用一个字符串,你也需要改变你的elseif。

ElseIf refNum = Null Or refNum = "" Then 
+0

我宣布它作为一个整数,因为我只希望用户只输入数字,输入一个字符串值,或者输入一个空值 – derek 2013-03-04 15:55:35