MS-Access, VBA и обработка ошибок
Это скорее наблюдение, чем реальный вопрос: MS-Access (и VBA в целом) отчаянно пропускает инструмент, в котором код обработки ошибок может генерироваться автоматически и где номер строки может отображаться при возникновении ошибки. Вы нашли решение? Что это? Я просто понял, сколько сотен часов я пощадил, так как нашел правильный ответ на эту основную проблему несколько лет назад, и я хотел бы посмотреть, каковы ваши идеи и решения по этой очень важной проблеме.
- Различие между использованием .text и .value в VBA Access
- В Excel VBA, как мне сохранить / восстановить определяемый пользователем фильтр?
- Есть ли недостатки в создании кода в Userforms вместо модhive?
- Ошибка времени выполнения 1004 Excel 2013
- Как добавить пользовательскую вкладку Ribbon с помощью VBA?
- Снять защиту VBProject с кода VB
- Форматы дат Excel VBA
- Ошибка: «Не удалось найти Installable ISAM»
Как насчет использования «Erl», он отобразит последнюю метку перед ошибкой (например, 10, 20 или 30)?
Private Sub mySUB() On Error GoTo Err_mySUB 10: Dim stDocName As String Dim stLinkCriteria As String 20: stDocName = "MyDoc" 30: DoCmd.openform stDocName, acFormDS, , stLinkCriteria Exit_mySUB: Exit Sub Err_mySUB: MsgBox Err.Number & ": " & Err.Description & " (" & Erl & ")" Resume Exit_mySUB End Sub
Ну, есть несколько инструментов, которые будут делать то, о чем вы просите MZ Tools и FMS Inc.
В основном они include добавление:
On Error GoTo ErrorHandler
к вершине каждого процесса, и в конце они ставят:
ErrorHandler: Call MyErrorhandler Err.Number, Err.Description, Err.LineNumber
ярлык, как правило, вызов глобального обработчика ошибок, в котором вы можете отображать и регистрировать сообщения об ошибках
Мое решение таково:
- установите MZ-Tools , очень интересное дополнение для VBA. Нет, они не платили мне, так или иначе, это бесплатно.
- запрограммируйте стандартный код обработчика ошибок, такой как этот (см. меню инструментов MZ / Параметры / Обработчик ошибок):
On Error GoTo {PROCEDURE_NAME}_Error {PROCEDURE_BODY} On Error GoTo 0 Exit {PROCEDURE_TYPE} {PROCEDURE_NAME}_Error: debug.print "#" & Err.Number, Err.description, "l#" & erl, "{PROCEDURE_NAME}", "{MODULE_NAME}"
Этот стандартный код ошибки может быть автоматически добавлен ко всем вашим процессам и функциям, щелкнув соответствующую кнопку в меню MZ-Tools. Вы заметите, что здесь мы ссылаемся на недокументированное значение / свойство VBA (выпуск 2003 года), «erl», что означает «строка ошибки». Ты понял! Если вы запросите MZ-Tools для автоматического номера ваших строк кода, тогда «erl» предоставит вам номер строки, в которой произошла ошибка. У вас будет полное описание ошибки в вашем ближайшем окне, например:
#91, Object variable or With block variable not set, l# 30, addNewField, Utilities
Конечно, как только вы осознаете заинтересованность системы, вы можете подумать о более сложном обработчике ошибок, который не только отобразит данные в окне отладки, но также будет:
- отображать его как сообщение на экране
- Автоматически вставлять строку в файл журнала ошибок с описанием ошибки или
- если вы работаете с Access или если вы подключены к базе данных, автоматически добавьте запись в таблицу Tbl_Error!
что каждая ошибка, сгенерированная на уровне пользователя, может быть сохранена либо в файле, либо в таблице, где-то на машине или в сети. Мы говорим о создании автоматической системы отчетности об ошибках, работающей с VBA?
Вы всегда можете использовать свой собственный инструмент, как Чип Пирсон . VBA может фактически получить доступ к своей собственной среде IDE через библиотеку Microsoft Visual Basic для расширения приложений 5.3 . Я написал несколько модhive classов, которые облегчают работу с самим собой. Их можно найти в SE Review Code .
Я использую его для вставки операторов On Error GoTo ErrHandler
и соответствующих меток и констант, связанных с моей схемой обработки ошибок. Я также использую его для синхронизации констант с фактическими именами процедур (если имена функций должны произойти, чтобы измениться).