Извинения заранее - это может быть длинный - весь код добавлен в нижней части.Доступ к ошибкам во время VBA 2016 - Как поймать?
Я работаю над базой данных для отслеживания билетов на поддержку. Я пытался очистить ошибки, которые появлялись с помощью трекера, поэтому я начал работать с перестройкой - Очистка кода - Изменение имен полей и т. Д. - Это была совершенно новая база данных, к которой никто не имел доступа. Но по какой-то причине мой код ошибки больше не выглядит. Поэтому позвольте мне объяснить все.
Передняя часть открыта и открыта, загружает форму входа - это использует DLOOKUP для проверки и сопоставления паролей. Это нормально. После входа в форму ввода билета (Frm_ticket_Entry) у этого есть несколько полей для данных и 2 кнопки. (Я только перечислю некоторые, как ни один из них на самом деле обязательно)
имена полей:
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 (закомментирую) и запускаю все - иногда я ударяю «Ошибки времени выполнения» (такие как заблокированные для редактирования) в моей предыдущей версии БД - это было поймано моим ошибка c atcher - и создал пользовательский вывод - теперь, похоже, он не хочет улавливать ошибки во время выполнения. Почему бы и нет, что происходит не так !? (извинения за экстенсивного чтения - я изо всех сил, чтобы описать вещи точно, но вкратце - Дополнительная информация доступна, если требуется/Запрошен.)
код для «Новая запись»:
Private Sub btn_NewRecord_Click()
DoCmd.GoToRecord , , acNewRec 'Add a new record
Me.Ticket_Number = "#" ' Change ticket number textbox to "#"
Me.Kickback_Reason = "Pass to next level support" ' - Set Default entry for kick back reason
Me.Agent = User() ' Set "Agent" field to the currently logged in user
Me.Returning_Team = "CSC Service Desk" ' Set default for "Returning Team"
DoCmd.RunCommand acCmdSaveRecord 'Save the record into the table
DoCmd.GoToRecord acDataTable = tbl_Tickets, , acLast ' return to the last saved record
On Error GoTo Error_Handle
' Err.Raise 3314, "btn_New_Record_Click()", "Errored" ' Force error for debug purposes
' Err.Raise 2105, "btn_New_Record_Click()", "Errored"
' Err.Raise 21345, , "Unknown Error Occured"
Exit Sub
Error_Handle:
Call ErrorLogger(Err.Number, Err.Description, Err.Source)
Err.Clear
MsgBox "Error Trapping complete"
Resume Next
End Sub
и код для ErrorLogger:
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 = "[email protected]"
.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
Я не был в состоянии создать конфликт и проверить это - Но если это все было не так, а потом проклятье. Не знаю, как я могу быть настолько глупым o.O Это логичный смысл. Но по какой-то причине я думал, что On Error GoTo был общим для всех ошибок - независимо от положения в коде. Я не могу поверить, что я мог бы выглядеть так просто! Я буду держать это открытым - До тех пор, пока я не смогу подтвердить, что ошибка ловли работает нормально? Я планирую масштабный тест базы данных позже сегодня - так что, надеюсь, все должно быть хорошо :) –
Я тестировал эту БД, и все было в порядке. 3 человека на тесте получали «Ошибка времени выполнения 6 - переполнение» - мой код ошибки не смог поймать эту ошибку и сообщить об этом, как я закодировал. который был взят из-за того, что были пойманы другие ошибки (Err.2105/Err.3218) Необычное дело в том, что другой пользователь, который тестировал, использовал тот же * Копировать * файла FE - и записывался в тот же файл BE - и не получалось никаких ошибок:/- Это начинает меня путать. Любая дополнительная помощь будет принята с благодарностью. ~ Matt –
Если ошибка не улавливается, она возникает из другого кода. Поместите обработчик ошибок в полный код. – BitAccesser