Access 2016 VBA运行时错误-如何捕获?
提前道歉-这可能是一个很长的-所有代码都添加在底部 我正在开发一个数据库,用于跟踪支持票证。 我一直在试图清除跟踪器中出现的错误,所以我开始重建——清理代码——更改字段名等等——这是一个全新的数据库,没有人可以访问。但由于某种原因,我的错误代码似乎不再被捕获。所以让我解释一切 前端打开,打开时加载登录表单-这利用DLOOKUP检查并匹配密码-这很好 登录后,票证输入表单加载(Frm_票证输入),这有多个数据字段和2个按钮。(我只列出几个,因为实际上没有一个是强制性的) 字段名称:Access 2016 VBA运行时错误-如何捕获?,vba,ms-access,error-handling,ms-access-2016,Vba,Ms Access,Error Handling,Ms Access 2016,提前道歉-这可能是一个很长的-所有代码都添加在底部 我正在开发一个数据库,用于跟踪支持票证。 我一直在试图清除跟踪器中出现的错误,所以我开始重建——清理代码——更改字段名等等——这是一个全新的数据库,没有人可以访问。但由于某种原因,我的错误代码似乎不再被捕获。所以让我解释一切 前端打开,打开时加载登录表单-这利用DLOOKUP检查并匹配密码-这很好 登录后,票证输入表单加载(Frm_票证输入),这有多个数据字段和2个按钮。(我只列出几个,因为实际上没有一个是强制性的) 字段名称: Tic
Ticket_Number - (fairly self explanatory)
Agent - (Agent working ticket)
Return_Team - (if ticket was returned)
按钮:
New Record - (Adds a new record - Guess you can tell that)
Save Record - (saves record after data changes)
使用Err.raise(“错误号”)时-我的捕手按预期工作
当我关闭err.raise(注释掉)并运行所有内容时-我有时会在以前的DB版本中点击“运行时错误”(例如锁定编辑)-这被我的错误捕捉器捕捉到-并生成自定义输出-现在,它似乎不想捕捉运行时错误-为什么不,出了什么问题!?
(抱歉阅读太多-我很难准确但简短地描述事情。-如有需要,可提供更多信息)
“新记录”代码:
错误记录器的名称和代码:
Function ErrorLogger(ErrNum As Integer, ErrDesc, ErrSrc As String)
Select Case ErrNum
Case 3314 ' You must enter a value in the 'tblKickbacks.Ticket Number' field.
MsgBox "It seems some required fields may not have been completed! " _
& "Please ensure you have filled in 'Ticket Number' / 'Agent' / 'Returning Team' and/or 'Kickback Reason'"
If IsNull(Me.Ticket_Number) Then
Me.Ticket_Number.SetFocus
End If
If (MsgBox("Error " & ErrNum & " occured." & vbNewLine _
& "Details : " & ErrDesc & vbNewLine _
& "Error occured in : " & ErrSrc & vbNewLine _
& "Would you like to send an email error report?" _
, 4 Or 16, "ERROR DETECTED")) = vbYes _
Then
GoTo DevEmail
Else
GoTo Err_Exit
End If
Case 2105 ' You can't go to the specified record.
MsgBox "Error Caught - 2105"
Case 3218 ' Error Description: Could not update; currently locked.
' Need to find and add code here for forcibly unlocking any and ALL locked records
Case Else
MsgBox "Error : " & ErrNum & " -- " & ErrDesc & " " _
& "Not recognised - Sending error email"
GoTo DevEmail
End Select
DevEmail:
Dim oAPP As Outlook.Application
Dim oMail As Outlook.MailItem
' Create the Outlook session.
Set oAPP = New Outlook.Application
' Create the message.
Set oMail = oAPP.CreateItem(olMailItem)
With oMail
' Add the To recipient(s) to the message.
.To = "mwalker53@csc.com"
.Subject = "Tracker V2 Error"
.Body = "Error message as Follows:" & vbNewLine _
& "Error Number: " & ErrNum & vbNewLine _
& "Error Description: " & ErrDesc & vbNewLine _
& "Error Source: " & ErrSrc
.Send
End With
MsgBox "Email has been sent"
Err_Exit:
End Function
将错误上的
移动到第一行的错误句柄
Private Sub btn_NewRecord_Click()
On Error GoTo Error_Handle
...
End Sub
将错误上的
移动到第一行的错误句柄
Private Sub btn_NewRecord_Click()
On Error GoTo Error_Handle
...
End Sub
on error goto errhandle和exit sub之间没有任何区别您需要添加新记录的代码上方的那一行on error goto errhandle和exit sub之间没有任何区别您需要添加新记录的代码上方的那一行我无法创建冲突并测试这一点-但如果这都是错误的,那该死。我不知道我怎么会如此愚蠢,o。o。它在逻辑上有着完美的意义——但出于某种原因,我认为On Error GoTo是对任何错误的一个通用的全面覆盖——不管它在代码中的位置如何。我真不敢相信我竟然把这么简单的事情看得过火了!我将保持此打开状态-直到我可以确认错误捕获是否正常工作?我计划今天晚些时候对数据库进行一次大规模测试,所以希望一切都会好起来:)我一直在测试这个数据库,在某种程度上一切都很好。测试中有3人收到“运行时错误6-溢出”-我的错误捕获代码无法捕获此错误并按我的代码报告。这很奇怪,因为还发现了其他错误(Err.2105/Err.3218)。奇怪的是另一个正在测试的用户,正在使用相同的FE文件副本-并记录到相同的BE文件-并且没有收到任何错误:/-这开始让我感到困惑-如果没有捕获到来自不同代码的错误,将非常感谢任何进一步的帮助。将错误处理程序放入完整的代码中。在玩过它之后-我意识到这个错误是因为我分配给存储错误号的变量仅被设置为int-错误代码太大导致溢出错误-所以重新设置为long并解决了。我无法创建冲突并测试它-但是如果这就是全部那就错了,该死。我不知道我怎么会如此愚蠢,o。o。它在逻辑上有着完美的意义——但出于某种原因,我认为On Error GoTo是对任何错误的一个通用的全面覆盖——不管它在代码中的位置如何。我真不敢相信我竟然把这么简单的事情看得过火了!我将保持此打开状态-直到我可以确认错误捕获是否正常工作?我计划今天晚些时候对数据库进行一次大规模测试,所以希望一切都会好起来:)我一直在测试这个数据库,在某种程度上一切都很好。测试中有3人收到“运行时错误6-溢出”-我的错误捕获代码无法捕获此错误并按我的代码报告。这很奇怪,因为还发现了其他错误(Err.2105/Err.3218)。奇怪的是另一个正在测试的用户,正在使用相同的FE文件副本-并记录到相同的BE文件-并且没有收到任何错误:/-这开始让我感到困惑-如果没有捕获到来自不同代码的错误,将非常感谢任何进一步的帮助。将错误处理程序放入完整的代码中。在玩过它之后-我意识到这个错误是因为我分配用于存储错误号的变量仅被设置为int-错误代码太大导致溢出错误-因此重新设置为long并解决。