使用自定义错误消息访问输入表单

时间:2017-02-14 07:16:10

标签: vba ms-access access-vba

解决方案

解决方案是不尝试捕获错误,而是在添加新记录命令按钮中自己进行错误处理:

Private Sub buttonNewRecord_Click()

Dim ErrorInt As Integer
Dim TeleCheck As Variant

Name.SetFocus
If Name.Text = "" Then
MsgBox "Name is missing!"
ErrorInt = ErrorInt + 1
End If

TeleCheck = DLookup("[Telephone]", "tblColdCallLog", "[Telephone] = '" & Me.Telephone & "'")
If Not IsNull(TeleCheck) Then
MsgBox "Telephone number already exists in the table!"
ErrorInt = ErrorInt + 1
End If

If ErrorInt < 1 Then
DoCmd.GoToRecord , , acNewRec
MsgBox "Record Added!"
End If

End Sub

原帖:

我有什么:

我创建了一个简单的Access 2013表单,用于将数据输入到表中。在表单上,​​用户将数据输入到字段中,然后单击使用命令按钮向导添加新记录创建的按钮。

表单有一个必填字段,[名称],一个字段设置为“索引:是(无重复)”,[电话号码]。在表单中,如果[名称]字段为空或在[电话]字段中检测到重复的数字,这也会正确地生成错误消息。

我正在尝试做什么:

出现的错误消息不是用户友好的。我想用自定义错误消息替换它们,如果没有错误,可能会显示一条消息说明一切顺利。

我尝试过的事情:

在“表单”属性的“事件”选项卡上,“出错”,[事件过程]:

Private Sub Error_Sub(DataErr As Integer, Response As Integer)
  If DataErr = 3022 Then
    MsgBox "Duplicate telephone number found in table!"
    Response = acDataErrContinue
  End If
  If DataErr = 3314 Then
    MsgBox "Name is missing!"
    Response = acDataErrContinue
  End If
End Sub

这只有在关闭表单时才有效...当您单击“添加新记录”命令按钮时,它只会在适当时显示默认错误消息。

也许我应该使用“更新前的事件”?我似乎无法使用相同的VBA脚本。我不允许定义DataErr或Response。所以,我将改为使用Expression:

=IIf(Error(3022),MsgBox("Duplicate telephone number found in table"))
=IIf(Error(3314),MsgBox("Name is missing"))

这有效......但是没有错误。即使[名称]字段中有名称,也会显示错误,但至少会替换默认错误消息。

我们把它放在按钮本身?我将不得不使用宏生成器来编辑它。复制和粘贴这个有点难,所以我会简化:

OnError GoTo Error_Handling
GoToRecord New
If [MacroError]<>0 Then 
   MsgBox = "[MacroError].[Description]"
End If

Error_Handling:
If Error(3022) Then
  MsgBox = "Duplicate telephone number found in table!"
End If
If Error(3314) Then
  MsgBox = "Name is missing!"
End If

这与“更新前”事件相同;替换默认错误消息,但无论是否应首先触发错误消息。

我做错了什么?我觉得这很简单。我尝试了各种其他组合和无尽的谷歌搜索,但我觉得难倒。

1 个答案:

答案 0 :(得分:0)

Private Sub buttonNewRecord_Click()

Dim ErrorInt As Integer
Dim TeleCheck As Variant

Name.SetFocus
If Name.Text = "" Then
MsgBox "Name is missing!"
ErrorInt = ErrorInt + 1
End If

TeleCheck = DLookup("[Telephone]", "tblColdCallLog", "[Telephone] = '" & Me.Telephone & "'")
If Not IsNull(TeleCheck) Then
MsgBox "Telephone number already exists in the table!"
ErrorInt = ErrorInt + 1
End If

If ErrorInt < 1 Then
DoCmd.GoToRecord , , acNewRec
MsgBox "Record Added!"
End If

End Sub