MS-Access, VBA и обработка ошибок

Это скорее наблюдение, чем реальный вопрос: MS-Access (и VBA в целом) отчаянно пропускает инструмент, в котором код обработки ошибок может генерироваться автоматически и где номер строки может отображаться при возникновении ошибки. Вы нашли решение? Что это? Я просто понял, сколько сотен часов я пощадил, так как нашел правильный ответ на эту основную проблему несколько лет назад, и я хотел бы посмотреть, каковы ваши идеи и решения по этой очень важной проблеме.

Как насчет использования «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 

ярлык, как правило, вызов глобального обработчика ошибок, в котором вы можете отображать и регистрировать сообщения об ошибках

Мое решение таково:

  1. установите MZ-Tools , очень интересное дополнение для VBA. Нет, они не платили мне, так или иначе, это бесплатно.
  2. запрограммируйте стандартный код обработчика ошибок, такой как этот (см. меню инструментов 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 

Конечно, как только вы осознаете заинтересованность системы, вы можете подумать о более сложном обработчике ошибок, который не только отобразит данные в окне отладки, но также будет:

  1. отображать его как сообщение на экране
  2. Автоматически вставлять строку в файл журнала ошибок с описанием ошибки или
  3. если вы работаете с Access или если вы подключены к базе данных, автоматически добавьте запись в таблицу Tbl_Error!

что каждая ошибка, сгенерированная на уровне пользователя, может быть сохранена либо в файле, либо в таблице, где-то на машине или в сети. Мы говорим о создании автоматической системы отчетности об ошибках, работающей с VBA?

Вы всегда можете использовать свой собственный инструмент, как Чип Пирсон . VBA может фактически получить доступ к своей собственной среде IDE через библиотеку Microsoft Visual Basic для расширения приложений 5.3 . Я написал несколько модhive classов, которые облегчают работу с самим собой. Их можно найти в SE Review Code .

Я использую его для вставки операторов On Error GoTo ErrHandler и соответствующих меток и констант, связанных с моей схемой обработки ошибок. Я также использую его для синхронизации констант с фактическими именами процедур (если имена функций должны произойти, чтобы измениться).

  • Управление IE11 «Вы хотите открыть / сохранить» диалоговые windows в VBA
  • Формула Excel для сравнения одного значения в одной ячейке с несколькими значениями в другой ячейке
  • Как получить цвет фона из Условного форматирования в Excel с помощью VBA
  • Функция VBA Shell в Office 2011 для Mac
  • Как вставить изображение в Excel в указанной ячейке с помощью VBA
  • Определите, добавляет ли пользователь или удаляет строки
  • Отправка форматированного текстового сообщения Lotus Notes из Excel VBA
  • запуск макроса excel из другой книги
  • Excel vba: копировать строки, если данные соответствуют значениям в столбце на другом листе
  • Получение фактического использования диапазона
  • Расширение формулы ячейки, разрешающей все ее ссылки (прецеденты)
  • Interesting Posts

    Изменение матрицы 3d на матрицу 2d

    Tmux и выбор текста с помощью мыши с помощью шпатлевки

    пользовательская строка в списке?

    Как изменить автора фиксации для одного конкретного коммита?

    Как вычесть 3 часа с даты в MySQL?

    Почему std :: map реализована как красно-черное дерево?

    Вложенное приложение ASP.NET в IIS, наследующее родительские настройки конфигурации?

    Ошибка Xcode при загрузке в App Store: «Не найдено подходящих записей приложений»

    многоступенчатые процессы регистрации в asp.net mvc (разделенные модели просмотра, одна модель)

    Определите, содержит ли последовательность все элементы другой последовательности, используя Linq

    Как отобразить легенду для круговой диаграммы в столбцах?

    Каковы преимущества отложенного выполнения в LINQ?

    Firefox: запретить веб-сайтам отменять ключ / (косая черта)

    SMS Manager отправляет сообщение mutlipart, когда имеется менее 160 символов

    Как читать файл из res / raw по имени

    Давайте будем гением компьютера.