解决方案
解决方案是不尝试捕获错误,而是在添加新记录命令按钮中自己进行错误处理:
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
这与“更新前”事件相同;替换默认错误消息,但无论是否应首先触发错误消息。
我做错了什么?我觉得这很简单。我尝试了各种其他组合和无尽的谷歌搜索,但我觉得难倒。
答案 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