Меню

Ошибка компиляции vba excel

При выполнении макросов Excel могут возникнуть ошибки, которые в VBA делят на три категории:

  • Ошибки компиляции
  • Ошибки выполнения
  • Логические ошибки (баги)

Далее мы поговорим о каждом из трёх типов ошибок VBA подробно.

Содержание

  1. Ошибки компиляции
  2. Ошибки выполнения
  3. Перехват ошибок выполнения
  4. Логические ошибки

Ошибки компиляции

Компилятор VBA рассматривает ошибки компиляции как недопустимые и выделяет их в коде ещё до того, как дело дойдёт до запуска макроса.

Если при написании кода допущена синтаксическая ошибка, то редактор VBA сигнализирует об этом немедленно: либо при помощи окна с сообщением, либо выделяя ошибку красным цветом, в зависимости от статуса режима Auto Syntax Check.

Примечание: При включённом режиме Auto Syntax Check каждый раз, при появлении в редакторе Visual Basic во введённом коде синтаксической ошибки, будет показано соответствующее сообщение. Если же этот режим выключен, то редактор VBA продолжит сообщать о синтаксических ошибках, просто выделяя их красным цветом. Опцию Auto Syntax Check можно включить/выключить в меню Tools > Options редактора Visual Basic.

В некоторых случаях ошибка компиляции может быть обнаружена при выполнении компиляции кода, непосредственно перед тем, как макрос будет выполнен. Обычно ошибку компиляции несложно обнаружить и исправить, потому что компилятор VBA даёт информацию о характере и причине ошибки.

Ошибки в Excel VBA

Например, сообщение «Compile error: Variable not defined» при попытке запустить выполнение кода VBA говорит о том, что происходит попытка использовать или обратиться к переменной, которая не была объявлена для текущей области (такая ошибка может возникнуть только если используется Option Explicit).

Ошибки выполнения

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

Примером такой ошибки может служить попытка выполнить деление на ноль. В результате будет показано сообщение «Run-time error ’11’: Division by zero«.

Ошибки в Excel VBA

В зависимости от структуры проекта VBA, может быть предложено выполнить отладку кода (как показано на рисунке ниже). В этом случае при нажатии на кнопку Debug (в окне сообщения о необходимости отладки) будет выделена цветом строка кода, которая стала причиной ошибки VBA.

Ошибки в Excel VBA

Получив такое сообщение и видя выделенную строку кода, как в приведённом выше примере, обнаружить причину ошибки будет совсем не сложно.

В случае если код сложнее, чем в нашем примере, то, чтобы получить больше информации о причине возникновения ошибки VBA, можно проверить значения используемых переменных. В редакторе VBA для этого достаточно навести указатель мыши на имя переменной, или можно открыть окно отслеживания локальных переменных (в меню редактора View > Locals Window).

Коды различных ошибок выполнения расшифрованы на сайте Microsoft Support (на английском). Наиболее часто встречающиеся ошибки VBA перечислены в этой таблице:

5 Недопустимый вызов процедуры (Invalid procedure call)
7 Недостаточно памяти (Out of memory)
9 Индекс вне заданного диапазона (Subscript out of range)

Эта ошибка возникает при попытке обратиться к элементу массива за пределами заданного размера массива – например, если объявлен массив с индексами от 1 до 10, а мы пытаемся обратиться к элементу этого же массива с индексом 11.

11 Деление на ноль (Division by zero)
13 Несоответствие типа (Type mismatch)

Эта ошибка возникает при попытке присвоить переменной значение не соответствующего типа – например, объявлена переменная i типа Integer, и происходит попытка присвоить ей значение строкового типа.

53 Файл не найден (File not found)

Иногда возникает при попытке открыть не существующий файл.

Перехват ошибок выполнения

Не все ошибки выполнения бывают вызваны недочётами в коде. Например, ошибки VBA не удастся избежать, если для работы макроса необходимо открыть файл с данными, а этого файла не существует. В таких случаях признаком профессионализма будет перехват ошибок и написание кода VBA, который будет выполняться при их возникновении. Таким образом, вместо неприятных сбоев будет происходить изящное завершение работы макроса.

Для того, чтобы помочь справиться с возникающими ошибками, VBA предоставляет разработчику операторы On Error и Resume. Эти операторы отслеживают ошибки и направляют выполнение макроса в специальный раздел кода VBA, в котором происходит обработка ошибки. После выполнения кода обработки ошибки, работа программы может быть продолжена с того места, где возникла ошибка, или макрос может быть остановлен полностью. Далее это показано на примере.

'Процедура Sub присваивает переменным Val1 и Val2 значения,
'хранящиеся в ячейках A1 и B1 рабочей книги Data.xlsx расположенной в каталоге C:Documents and Settings

Sub Set_Values(Val1 As Double, Val2 As Double)

   Dim DataWorkbook As Workbook

   On Error GoTo ErrorHandling

      'Открываем рабочую книгу с данными

      Set DataWorkbook = Workbooks.Open("C:Documents and SettingsData")

      'Присваиваем переменным Val1 и Val2 данные из рабочей книги DataWorkbook

      Val1 = Sheets("Лист1").Cells(1, 1)
      Val2 = Sheets("Лист1").Cells(1, 2)

      DataWorkbook.Close

   Exit Sub

ErrorHandling:

   'Если файл не найден, предлагаем пользователю разместить его в
   'нужном месте и продолжить работу

   MsgBox "Рабочая книга не найдена! " & _
      "Пожалуйста добавьте книгу Data.xlsx в каталог C:Documents and Settings и нажмите OK."

   Resume

End Sub

В этом коде производится попытка открыть файл Excel с именем Data. Если файл не найден, то пользователю будет предложено поместить этот файл в нужную папку. После того, как пользователь сделает это и нажмёт ОК, выполнение кода продолжится, и попытка открыть этот файл повторится. При желании вместо попытки открыть нужный файл, выполнение процедуры Sub может быть прервано в этом месте при помощи команды Exit Sub.

Логические ошибки

Логические ошибки (или баги) возникают в процессе выполнения кода VBA, но позволяют ему выполняться до самого завершения. Правда в результате могут выполняться не те действия, которые ожидалось, и может быть получен неверный результат. Такие ошибки обнаружить и исправить труднее всего, так как компилятор VBA их не распознаёт и не может указать на них так, как это происходит с ошибками компиляции и выполнения.

Например, при создании макроса в процедуре случайно были просуммированы не те переменные, которые требовалось просуммировать. Результат будет ошибочным, но макрос будет продолжать выполняться до завершения.

Редактор Excel VBA предоставляет набор инструментов отладки, которые помогут найти и исправить логические ошибки в коде VBA. В данной статье мы не будем рассматривать подробно эти инструменты. Любознательный пользователь может найти обзор инструментов отладки VBA на сайте Microsoft Help & Support (на английском).

Оцените качество статьи. Нам важно ваше мнение:

На чтение 25 мин. Просмотров 13.7k.

VBA Error Handling

Эта статья содержит полное руководство по обработке ошибок VBA. Если вы ищете краткое резюме, посмотрите таблицу быстрого руководства в первом разделе.

Если вы ищете конкретную тему по обработке ошибок VBA, ознакомьтесь с приведенным ниже содержанием.

Если вы новичок в VBA, то вы можете прочитать пост от начала до конца, так как он выложен в логическом порядке.

Содержание

  1. Краткое руководство по обработке ошибок
  2. Введение
  3. Ошибки VBA
  4. Заявление об ошибке
  5. Err объект
  6. Логирование
  7. Другие элементы, связанные с ошибками
  8. Простая стратегия обработки ошибок
  9. Полная стратегия обработки ошибок
  10. Обработка ошибок в двух словах

Краткое руководство по обработке ошибок

Пункт Описание
On Error Goto 0 При возникновении ошибки код останавливается и отображает
ошибку.
On Error Resume Next Игнорирует ошибку и
продолжает.
On Error Goto [Label] Переход к определенной метке при возникновении ошибки.
Это позволяет нам справиться
с ошибкой.
Err Object При возникновении ошибки
информация об ошибке
сохраняется здесь.
Err.Number Номер ошибки.
(Полезно, только если вам
нужно проверить, произошла ли конкретная ошибка.)
Err.Description Содержит текст ошибки.
Err.Source Вы можете заполнить это, когда используете Err.Raise.
Err.Raise Функция, которая позволяет
генерировать вашу собственную ошибку.
Error Function Возвращает текст ошибки из
номера ошибки.
Вышло из употребления.
Error Statement Имитирует ошибку. Вместо этого используйте Err.Raise.

Введение

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

Если мы считаем, что ошибка может произойти в какой-то
момент, рекомендуется написать специальный код для обработки ошибки, если она
возникнет, и устранить ее.

Для всех остальных ошибок мы используем общий код для их
устранения. Это где оператор обработки ошибок VBA вступает в игру. Они
позволяют нашему приложению корректно обрабатывать любые ошибки, которые мы не
ожидали.

Чтобы понять обработку ошибок, мы должны сначала понять
различные типы ошибок в VBA.

VBA Error Handling

Ошибки VBA

В VBA есть три типа ошибок

  1. Синтаксис
  2. Компиляция
  3. Время выполнения

Мы используем обработку ошибок для устранения ошибок во
время выполнения. Давайте посмотрим на каждый из этих типов ошибок, чтобы было
ясно, что такое ошибка во время выполнения.

Синтаксические ошибки

Если вы использовали VBA в течение какого-то времени, вы
увидите синтаксическую ошибку. Когда вы набираете строку и нажимаете return,
VBA оценивает синтаксис и, если он неверен, выдает сообщение об ошибке.

Например, если вы введете If и забудете ключевое слово Then,
VBA отобразит следующее сообщение об ошибке.

VBA Error Handling

Некоторые примеры синтаксических ошибок

' then отсутствует
If a > b

' не хватает = после i
For i 2 To 7

' отсутствует правая скобка
b = left("АБВГ",1

Синтаксические ошибки относятся только к одной строке. Они
возникают, когда синтаксис одной строки неверен.

Примечание. Диалоговое окно «Ошибка синтаксиса» можно отключить, выбрав «Сервис» -> «Параметры» и отметив «Автосинтаксическая проверка». Строка по-прежнему будет отображаться красным цветом в случае ошибки, но диалоговое окно не появится.

Ошибки компиляции

Ошибки компиляции происходят более чем в одной строке.
Синтаксис в одной строке правильный, но неверный, если учесть весь код проекта.

Примеры ошибок компиляции:

  • Оператор If без соответствующего оператора End If
  • For без Next
  •  Select без End Select
  • Вызов Sub или Function, которые не существуют
  • Вызов Sub или Function с неверными параметрами
  • Присвоение Sub или Function того же имени, что и для модуля
  • Переменные не объявлены (Option Explicit должен присутствовать в верхней части модуля)

На следующем снимке экрана показана ошибка компиляции,
которая возникает, когда цикл For не имеет соответствующего оператора Next.

VBA Error Handling

Использование Debug-> Compile

Чтобы найти ошибки компиляции, мы используем Debug->
Compile VBA Project из меню Visual Basic.

Когда вы выбираете Debug-> Compile, VBA отображает первую
обнаруженную ошибку.

Когда эта ошибка исправлена, вы можете снова запустить
Compile, и VBA найдет следующую ошибку.

Debug-> Compile также будет включать синтаксические
ошибки в поиск, что очень полезно.

Если ошибок не осталось и вы запускаете Debug-> Compile,
может показаться, что ничего не произошло. Однако «Компиляция» будет недоступна
в меню «Отладка». Это означает, что ваше приложение не имеет ошибок компиляции
в текущий момент.

Debug->Compile Error Summary

Debug-> Compile находит ошибки компиляции (проекта).

Он также найдет синтаксические ошибки.

Он находит одну ошибку каждый раз, когда вы ее используете.

Если нет ошибок компиляции, оставленная опция Компиляция
будет отображаться серым цветом в меню.

Debug-> Compile Usage

Вы должны всегда использовать Debug-> Compile, прежде чем
запускать свой код. Это гарантирует, что ваш код не будет иметь ошибок
компиляции при запуске.

Если вы не запускаете Debug-> Compile, то VBA может
обнаружить ошибки компиляции при запуске. Их не следует путать с ошибками
времени выполнения.

Ошибки во время выполнения

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

VBA Error Handling

Например, представьте, что ваше приложение читает из внешней
рабочей книги. Если этот файл будет удален, то VBA отобразит ошибку, когда ваш
код попытается открыть его.

Другие примеры ошибок времени выполнения

  • база данных недоступна
  • пользователь вводит неверные данные
  • ячейка, содержащая текст вместо числа

Как мы уже видели, целью обработки ошибок является обработка
ошибок времени выполнения, когда они возникают.

Ожидаемые и неожиданные ошибки

Когда мы думаем, что может произойти ошибка во время
выполнения, мы помещаем код на место для ее обработки. Например, мы обычно
помещаем код на место, чтобы иметь дело с файлом, который не найден.

Следующий код проверяет, существует ли файл, прежде чем он
пытается его открыть. Если файл не существует, отображается сообщение, удобное
для пользователя, и код выходит из подпрограммы.

Sub OtkritFail()
    
    Dim sFile As String
    sFile = "C:ДокументыОтчет.xlsx"
    
    ' Используйте Dir, чтобы проверить, существует ли файл
    If Dir(sFile) = "" Then
        ' если файл не существует, отобразить сообщение
        MsgBox "Файл не найден" & sFile
        Exit Sub
    End If
    
    ' Код достигнет только если файл существует
    Workbooks.Open sFile
    
End Sub

Когда мы думаем, что в какой-то момент может произойти
ошибка, рекомендуется добавить код для обработки ситуации. Мы обычно называем
эти ошибки ожидаемыми.

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

Ошибки времени выполнения, которые не являются ошибками VBA

Прежде чем мы рассмотрим VBA Handling, мы должны упомянуть
один тип ошибок. Некоторые ошибки во время выполнения не рассматриваются как
ошибки VBA, а только пользователем.

Позвольте мне объяснить это на примере. Представьте, что у
вас есть приложение, которое требует, чтобы вы добавили значения в переменные a
и b

Допустим, вы по ошибке используете звездочку вместо знака
плюс

Это не ошибка VBA. Ваш синтаксис кода является совершенно
законным. Однако, с вашей точки зрения, это ошибка.

Эти ошибки не могут быть обработаны с помощью обработки ошибок, поскольку они, очевидно, не будут генерировать никаких ошибок. Вы можете справиться с этими ошибками, используя Unit Testing and Assertions.

Заявление об ошибке

Как мы видели, есть два способа обработки ошибок во время
выполнения

  1. Ожидаемые ошибки — напишите конкретный код для
    их обработки.
  2. Неожиданные ошибки — используйте операторы
    обработки ошибок VBA для их обработки.

Оператор VBA On Error используется для обработки ошибок.
Этот оператор выполняет некоторые действия при возникновении ошибки во время
выполнения.

Есть четыре различных способа использовать это утверждение

  1. On Error Goto 0 — код останавливается на строке с ошибкой и отображает сообщение.
  2. On Error Resume Next — код перемещается на следующую строку. Сообщение об ошибке не отображается.
  3. On Error Goto [label] — код перемещается на определенную строку или метку. Сообщение об ошибке не отображается. Это тот, который мы используем для обработки ошибок.
  4. On Error Goto -1 — очищает текущую ошибку.

Давайте посмотрим на каждое из этих утверждений по очереди.

On Error Goto 0

Это поведение по умолчанию VBA. Другими словами, если вы не
используете On Error, это поведение вы увидите.

При возникновении ошибки VBA останавливается на строке с
ошибкой и отображает сообщение об ошибке. Приложение требует вмешательства
пользователя с кодом, прежде чем оно сможет продолжить. Это может быть
исправление ошибки или перезапуск приложения. В этом случае обработка ошибок не
происходит.

Давайте посмотрим на пример. В следующем коде мы не
использовали строку On Error, поэтому VBA будет использовать поведение On Error
Goto 0 по умолчанию.

Sub IspDefault()

    Dim x As Long, y As Long
    
    x = 6
    y = 6 / 0
    x = 7

End Sub

Вторая строка присваивания приводит к ошибке деления на ноль. Когда мы запустим этот код, мы получим сообщение об ошибке, показанное на скриншоте ниже.

VBA Error Handling

Когда появляется ошибка, вы можете выбрать End или Debug

Если вы выберете Конец, то приложение просто остановится.

Если вы выберете Отладить, приложение остановится на строке
ошибки, как показано на скриншоте ниже.

VBA Error Handling

Это нормально, когда вы пишете код VBA, поскольку он
показывает вам точную строку с ошибкой.

Это поведение не подходит для приложения, которое вы
передаете пользователю. Эти ошибки выглядят непрофессионально и делают
приложение нестабильным.

Подобная ошибка, по сути, приводит к сбою приложения.
Пользователь не может продолжить работу без перезапуска приложения. Они могут
вообще не использовать его, пока вы не исправите для них ошибку.

Используя On Error Goto [label], мы можем дать пользователю
более контролируемое сообщение об ошибке. Это также предотвращает остановку
приложения. Мы можем заставить приложение работать предопределенным образом.

On Error Resume Next

Использование On Error Resume Next указывает VBA
игнорировать ошибку и продолжать работу.

Есть конкретные случаи, когда это полезно. Большую часть
времени вы должны избегать его использования.

Если мы добавим Resume Next к нашему примеру Sub, то VBA
проигнорирует ошибку деления на ноль

Sub UsingResumeNext()

    On Error Resume Next
    
    Dim x As Long, y As Long
    
    x = 6
    y = 6 / 0
    x = 7

End Sub

Это не очень хорошая идея, чтобы сделать это. Если вы
игнорируете ошибку, то поведение может быть непредсказуемым. Ошибка может
повлиять на приложение несколькими способами. Вы можете получить неверные
данные. Проблема в том, что вы не знаете, что что-то пошло не так, потому что
вы подавили ошибку.

Приведенный ниже код является примером использования Resume
Next.

Sub OtprSoobsch()

   On Error Resume Next
   
    ' Требуется ссылка:
    ' Библиотека объектов Microsoft Outlook 15.0
    Dim Outlook As Outlook.Application
    Set Outlook = New Outlook.Application

    If Outlook Is Nothing Then
        MsgBox " Не удается создать сеанс Microsoft Outlook." _
                   & " Письмо не будет отправлено."
        Exit Sub
    End If
    
End Sub

В этом коде мы проверяем, доступен ли Microsoft Outlook на компьютере. Все,
что мы хотим знать — это доступно или нет. Нас не интересует конкретная ошибка.

В приведенном выше коде мы продолжаем, если есть ошибка.
Затем в следующей строке мы проверяем значение переменной Outlook. Если произошла ошибка, тогда
значение этой переменной будет установлено равным Nothing.

Это пример того, когда Резюме может быть полезным. Дело в
том, что, хотя мы используем Resume,
мы все равно проверяем наличие ошибки. Подавляющее большинство времени вам не
нужно будет использовать Resume.

On Error Goto [label]

Вот как мы используем обработку ошибок в VBA. Это эквивалент функциональности Try and Catch, которую вы видите на
таких языках, как C # и
Java.

При возникновении ошибки вы отправляете ошибку на
определенный ярлык. Обычно это внизу саба.

Давайте применим это к подводной лодке, которую мы
использовали

Sub IspGotoLine()

    On Error Goto eh
    
    Dim x As Long, y As Long
    
    x = 6
    y = 6 / 0
    x = 7
    
Done:
    Exit Sub
eh:
    MsgBox "Произошла следующая ошибка: " & Err.Description
End Sub

Снимок экрана ниже показывает, что происходит при возникновении ошибки.

VBA Error Handling

VBA переходит на метку eh, потому что мы указали это в
строке «Перейти к ошибке».

Примечание 1: Метка, которую мы используем в операторе On… Goto, должна быть в текущей Sub / Function. Если нет, вы получите ошибку компиляции.

Примечание 2: Когда возникает ошибка при использовании On Error Goto [label], обработка ошибок возвращается к поведению по умолчанию, т.е. код остановится на строке с ошибкой и отобразит сообщение об ошибке. См. Следующий раздел для получения дополнительной информации об этом.

On Error Goto -1

Это утверждение отличается от других трех. Он используется
для очистки текущей ошибки, а не для настройки конкретного поведения.

При возникновении ошибки с помощью функции On Error Goto [label] поведение обработки ошибки возвращается к поведению по умолчанию, т.е. On Error Goto 0 . Это означает, что если произойдет другая ошибка, код остановится на текущей строке.

Это поведение относится только к текущей подпрограмме. Как
только мы выйдем из саба, ошибка будет очищена автоматически.

Посмотрите на код ниже. Первая ошибка приведет к переходу
кода на метку eh. Вторая ошибка остановится на строке с ошибкой 1034.

Sub DveOshibki()

    On Error Goto eh
        
    ' генерировать ошибку «Несоответствие типов»
    Error (13)

Done:
    Exit Sub
eh:
    ' генерировать «определенную приложением» ошибку
    Error (1034)
End Sub

Если мы добавим дальнейшую обработку ошибок, она не будет
работать, поскольку ловушка ошибок не была очищена.

В коде ниже мы добавили строку

после того как мы поймаем первую ошибку.

Это не имеет никакого эффекта, так как ошибка не была
очищена. Другими словами, код остановится на строке с ошибкой и отобразит
сообщение.

Sub DveOshibki()

    On Error Goto eh
        
    ' генерировать ошибку «Несоответствие типов»
    Error (13)

Done:
    Exit Sub
eh:
    On Error Goto eh_other
    ' генерировать «определенную приложением» ошибку
    Error (1034)
Exit Sub
eh_other:
    Debug.Print "ehother " & Err.Description
End Sub

Для устранения ошибки мы используем On Error Goto -1.
Думайте об этом как об установке ловушки для мыши. Когда ловушка сработает, вам
нужно установить ее снова.

В приведенном ниже коде мы добавляем эту строку, и вторая
ошибка теперь приведет к переходу кода на метку eh_other.

Sub DveOshibki()

    On Error Goto eh
        
    ' генерировать ошибку «Несоответствие типов»
    Error (13)

Done:
    Exit Sub
eh:
    ' явная ошибка
    On Error Goto -1
    
    On Error Goto eh_other
    ' генерировать «определенную приложением» ошибку
    Error (1034)
Exit Sub
eh_other:
    Debug.Print "ehother " & Err.Description
End Sub

Примечание 1. Вероятно, в редких случаях полезно использовать On Error Goto -1. Мне лично никогда не приходилось пользоваться этой линией. Помните, что как только вы выйдете из Sub, ошибка все равно будет очищена.

Примечание 2. у объекта Err есть член Clear. Использование Clear очищает текст и цифры в объекте Err, но НЕ сбрасывает ошибку.

Использование On Error

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

  • Остановитесь и отобразите ошибку.
  • Игнорируйте ошибку и продолжайте.
  • Перейти к определенной строке.

VBA всегда будет настроен на одно из этих действий. Когда вы
используете On Error, VBA изменит ваше поведение и забудет о любом предыдущем.

В следующем подпункте VBA изменяет поведение ошибки каждый
раз, когда мы используем оператор On Error

Sub ErrorSostoyaniya()

    Dim x As Long
    
    ' Перейти на этикетке, если ошибка
    On Error Goto eh
    
    ' это проигнорирует ошибку в следующей строке
    On Error Resume Next
    x = 1 / 0
    
    ' это отобразит сообщение об ошибке в следующей строке
    On Error Goto 0
    x = 1 / 0
  
Done:  
   Exit Sub
eh:
    Debug.Print Err.Description
End Sub

Err объект

При возникновении ошибки вы можете просмотреть детали
ошибки, используя объект Err.

При возникновении ошибки времени выполнения VBA
автоматически заполняет объект Err деталями.

Приведенный ниже код выведет «Error Number: 13 Type
Mismatch», которое возникает, когда мы пытаемся поместить строковое значение в
длинное целое число.

Sub IspErr()

    On Error Goto eh
    
    Dim total As Long
    total = "aa"

Done:
    Exit Sub
eh:
    Debug.Print "Номер ошибки: " & Err.Number _
            & " " & Err.Description
End Sub

Err.Description предоставляет подробную информацию об ошибке, которая происходит. Это текст, который вы обычно видите, когда возникает ошибка, например, «Несоответствие типов»

Err.Number — это идентификационный номер ошибки, например, номер ошибки для «Несоответствие типов» — 13. Единственное время, когда вам действительно нужно это, если вы проверяете, что произошла конкретная ошибка, и это необходимо только в редких случаях.

Свойство Err.Source кажется отличной идеей, но оно не работает при ошибке VBA. Источник вернет имя проекта, которое вряд ли сузит место возникновения ошибки. Однако, если вы создаете ошибку с помощью Err.Raise, вы можете установить источник самостоятельно, и это может быть очень полезно.

Получение номера строки

Функция Erl используется для возврата номера строки, где
произошла ошибка.

Это часто вызывает путаницу. В следующем коде Erl вернет ноль.

Sub IspErr()

    On Error Goto eh
    
    Dim val As Long
    val = "aa"

Done:
    Exit Sub
eh:
    Debug.Print Erl
End Sub

Это потому, что нет номеров строк. Большинство людей не
понимают этого, но VBA позволяет вам иметь номера строк.

Если мы изменим подпрограмму, указав номер строки, она теперь выведет 20.

Sub IspErr()

10        On Error Goto eh
          
          Dim val As Long
20        val = "aa"

Done:
30        Exit Sub
eh:
40        Debug.Print Erl
End Sub

Добавление номеров строк в код вручную затруднительно.
Однако есть инструменты, которые позволят вам легко добавлять и удалять номера
строк в подпрограмме.

Когда вы закончите работу над проектом и передадите его
пользователю, в этот момент может быть полезно добавить номера строк. Если вы
используете стратегию обработки ошибок в последнем разделе этого поста, то VBA
сообщит строку, где произошла ошибка.

Использование Err.Raise

Err.Raise позволяет нам создавать ошибки. Мы можем
использовать его для создания пользовательских ошибок для нашего приложения,
что очень полезно. Это эквивалент оператора Throw в Java C #.

Формат следующий

Err.Raise [error number], [error source], [error description]

Давайте посмотрим на простой пример. Представьте, что мы
хотим убедиться, что в ячейке есть запись длиной 5 символов. Мы могли бы иметь конкретное сообщение для
этого

Public Const ERROR_INVALID_DATA As Long = vbObjectError + 513

Sub ReadWorksheet()

    On Error Goto eh
    
    If Len(Sheet1.Range("A1")) <> 5 Then
        Err.Raise ERROR_INVALID_DATA, "ReadWorksheet" _
            , "Значение в ячейке A1 должно иметь ровно 5 символов."
    End If
    
    ' продолжить, если ячейка имеет действительные данные
    Dim id As String
    id = Sheet1.Range("A1")
    

Done:
    Exit Sub
eh:
    ' Err.Raise отправит код сюда
    MsgBox " Обнаружена ошибка: " & Err.Description
End Sub

Когда мы создаем ошибку, используя Err.Raise, нам нужно присвоить ей номер. Мы можем использовать любое
число от 513 до 65535 для нашей ошибки. Мы должны использовать vbObjectError с номером,
например

Err.Raise vbObjectError + 513

Использование Err.Clear

Err.Clear используется для очистки текста и чисел из объекта
Err.Object. Другими словами, он очищает описание и номер.

Редко вам понадобится его использовать, но давайте
рассмотрим пример, где вы могли бы.

В приведенном ниже коде мы подсчитываем количество ошибок,
которые могут возникнуть. Для простоты мы генерируем ошибку для каждого
нечетного числа.

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

Sub IspErrClear()

    Dim count As Long, i As Long

    ' Продолжите, если ошибка, так как мы проверим номер ошибки
    On Error Resume Next
    
    For i = 0 To 9
        ' генерировать ошибку для каждого второго
        If i Mod 2 = 0 Then Error (13)
        
        ' Проверьте на ошибку
        If Err.Number <> 0 Then
            count = count + 1
            Err.Clear    ' Очистить Err, как только он считается
        End If
    Next

    Debug.Print " Количество ошибок было: " & count
End Sub

Примечание: Err.Clear сбрасывает текст и цифры в объекте ошибки, но не очищает ошибку — см. On Error Goto -1 для получения дополнительной информации об очистке фактической ошибки.

Логирование

Ведение журнала означает запись информации из вашего
приложения, когда оно запущено. При возникновении ошибки вы можете записать
детали в текстовый файл, чтобы у вас была запись об ошибке.

Код ниже показывает очень простую процедуру регистрации

Sub Logger(sType As String, sSource As String, sDetails As String)
    
    Dim sFilename As String
    sFilename = "C:templogging.txt"
    
    ' Архивный файл определенного размера
    If FileLen(sFilename) > 20000 Then
        FileCopy sFilename _
            , Replace(sFilename, ".txt", Format(Now, "ddmmyyyy hhmmss.txt"))
        Kill sFilename
    End If
    
    ' Откройте файл для записи
    Dim filenumber As Variant
    filenumber = FreeFile 
    Open sFilename For Append As #filenumber
    
    Print #filenumber, CStr(Now) & "," & sType & "," & sSource _
                                & "," & sDetails & "," & Application.UserName
    
    Close #filenumber
    
End Sub

Вы можете использовать это так:

' Создать уникальный номер ошибки
Public Const ERROR_DATA_MISSING As Long = vbObjectError + 514

Sub CreateReport()

    On Error Goto eh
    
    If Sheet1.Range("A1") = "" Then
       Err.Raise ERROR_DATA_MISSING, "CreateReport", "Данные отсутствуют в ячейке A1"
    End If

    ' другой код здесь
Done:
    Exit Sub
eh:
    Logger "Error", Err.Source, Err.Description
End Sub

Журнал не только для записи ошибок. Вы можете записывать
другую информацию во время работы приложения. При возникновении ошибки вы
можете проверить последовательность событий до того, как произошла ошибка.

Ниже приведен пример регистрации. То, как вы реализуете
журналирование, зависит от характера приложения и его полезности.

Sub ReadingData()
    
    Logger "Information", "ReadingData()", "Starting to read data."
       
    Dim coll As New Collection
    ' Read data
    Set coll = ReadData
    
    If coll.Count < 10 Then
        Logger "Warning", "ReadingData()", "Number of data items is low."
    End If
    Logger "Information", "ReadingData()", "Number of data items is " & coll.Count
    
    Logger "Information", "ReadingData()", "Finished reading data."

End Sub

Наличие большого количества информации при работе с ошибкой
может быть очень полезным. Часто пользователь может не дать вам точную информацию
об ошибке, которая произошла. Глядя на журнал, вы можете получить более точную
информацию об информации.

Другие элементы, связанные с ошибками

В этом разделе рассматриваются некоторые другие инструменты
обработки ошибок, которые есть в VBA. Эти элементы считаются устаревшими, но я
включил их, поскольку они могут существовать в устаревшем коде.

Функция ошибки

Функция Error используется для печати описания ошибки с
заданным номером ошибки. Он включен в VBA для обеспечения обратной
совместимости и не нужен, поскольку вместо него можно использовать описание
Err.Description.

Ниже приведены некоторые примеры

' Распечатать текст «Деление на ноль»
Debug.Print Error(11)
' Распечатать текст "Несоответствие типов"
Debug.Print Error(13)
' Распечатать текст "Файл не найден"
Debug.Print Error(53)

Заявление об ошибке

Заявление об ошибке позволяет имитировать ошибку. Он включен
в VBA для обратной совместимости. Вместо этого вы должны использовать
Err.Raise.

В следующем коде мы моделируем ошибку «Разделить на ноль».

Sub ZayavlObOshibke()

    On Error Goto eh
        
    ' Это создаст деление на ноль ошибок
    Error 11
    
    Exit Sub
eh:
    Debug.Print Err.Number, Err.Description
End Sub

Это утверждение включено в VBA для обратной совместимости.
Вместо этого вы должны использовать Err.Raise.

Простая стратегия обработки ошибок

Со всеми различными опциями вы можете быть озадачены тем,
как использовать обработку ошибок в VBA. В этом разделе я покажу вам, как
реализовать простую стратегию обработки ошибок, которую вы можете использовать
во всех своих приложениях.

Основная реализация

Это простой обзор нашей стратегии

  1. Поместите строку On Error Goto Label  в начале нашего верхнего Sub.
  2. Поместите Label у обработки ошибок в конце нашего верхнего
    Sub.
  3. Если происходит ожидаемая ошибка, обработайте ее и продолжайте.
  4. Если приложение не может продолжить работу, используйте Err.Raise для перехода к метке обработки ошибок.
  5. В случае непредвиденной ошибки код автоматически перейдет к метке обработки ошибок.

На следующем рисунке показан обзор того, как это выглядит

error-handling

Следующий код показывает простую реализацию этой стратегии

Public Const ERROR_NO_ACCOUNTS As Long = vbObjectError + 514

Sub BuildReport()

    On Error Goto eh
    
    ' Если ошибка в ReadAccounts, то перейти к ошибке
    ReadAccounts
    
    ' Сделай что-нибудь с кодом
    
Done:
    Exit Sub
eh:
    ' Все ошибки будут прыгать сюда
    MsgBox Err.Source & ": Произошла следующая ошибка  " & Err.Description
End Sub

Sub ReadAccounts()
    
    ' ОЖИДАЕМАЯ ОШИБКА - Может обрабатываться кодом
    ' Приложение может обрабатывать A1 равным нулю
    If Sheet1.Range("A1") = 0 Then
        Sheet1.Range("A1") = 1
    End If
    
    ' ОЖИДАЕМАЯ ОШИБКА - не может быть обработана кодом
    ' Приложение не может быть продолжено, если нет учетной записи
    If Dir("C:ДокументыОтчет.xlsx") = "" Then
        Err.Raise ERROR_NO_ACCOUNTS, "UsingErr" _
                , "There are no accounts present for this month."
    End If

    ' НЕОЖИДАННАЯ ОШИБКА - не может быть обработана кодом
    ' Если ячейка B3 содержит текст, мы получим ошибку несоответствия типов
    Dim total As Long
    total = Sheet1.Range("B3")
    
    
    ' продолжить и читать счета
    
End Sub

Это хороший способ реализации обработки ошибок, потому что

  • Нам не нужно добавлять код обработки ошибок в
    каждую подпрограмму.
  • Если возникает ошибка, то VBA корректно
    завершает работу приложения.

Полная стратегия обработки ошибок

Стратегия выше имеет один недостаток. Он не сообщает вам,
где произошла ошибка. VBA не наполняет Err.Source чем-либо полезным, поэтому мы
должны сделать это сами.

В этом разделе я собираюсь представить более полную
стратегию ошибок. Я написал два сабвуфера, которые выполняют всю тяжелую
работу, поэтому все, что вам нужно сделать, это добавить их в свой проект.

Целью этой стратегии является предоставление вам стека * и
номера строки в случае возникновения ошибки.

* Стек — это список вспомогательных функций, которые
использовались в данный момент при возникновении ошибки.

Это наша стратегия

  1. Разместите обработку ошибок во всех
    подпрограммах.
  2. Когда происходит ошибка, обработчик ошибок
    добавляет подробности к ошибке и вызывает ее снова.
  3. Когда ошибка достигает самой верхней
    подпрограммы, она отображается.

Мы просто «всплываем» из-за ошибки. Следующая диаграмма
показывает простое визуальное представление о том, что происходит, когда в Sub3
возникает ошибка

Error Handling – bubbling

Единственная грязная часть этого — правильное форматирование
строк. Я написал две подводные лодки, которые справляются с этим, поэтому он
позаботится о вас.

Это две вспомогательные подводные лодки

Option Explicit

Public Const MARKER As String = "NOT_TOPMOST"

' Вызывает ошибку и добавляет номер строки и имя текущей процедуры
Sub RaiseError(ByVal errorno As Long, ByVal src As String _
                , ByVal proc As String, ByVal desc As String, ByVal lineno As Long)
    
    Dim sLineNo As Long, sSource As String
    
    ' Если маркера нет, тогда RaiseError вызывается впервые.
    If Left(src, Len(MARKER)) <> MARKER Then

        ' Добавить номер строки ошибки, если она есть
        If lineno <> 0 Then
            sSource = vbCrLf & "Line no: " & lineno & " "
        End If
   
        ' Добавить маркер и процедуру к источнику
        sSource = MARKER & sSource & vbCrLf & proc
        
    Else
        ' Если ошибка уже возникла, просто добавьте имя процедуры
        sSource = src & vbCrLf & proc
    End If
    
    ' Если код останавливается здесь, убедитесь, что DisplayError находится в верхней части Sub
    Err.Raise errorno, sSource, desc
    
End Sub

' Отображает ошибку, когда она достигает самого верхнего sub
' Примечание: вы можете добавить вызов для входа из этого подпункта
Sub DisplayError(ByVal src As String, ByVal desc As String _
                    , ByVal sProcname As String)

    ' Удалить маркер
    src = Replace(src, MARKER, "")
    
    Dim sMsg As String
    sMsg = " Произошла следующая ошибка: " & vbCrLf & Err.Description _
                    & vbCrLf & vbCrLf & " Расположение ошибки: "
    
    sMsg = sMsg + src & vbCrLf & sProcname
    
    ' Показать сообщение
    MsgBox sMsg, Title:="Ошибка "
    
End Sub

Пример использования этой стратегии

Вот простое кодирование, которое использует эти Sub. В этой стратегии мы не размещаем какой-либо код в верхнем подпрограмме. Мы только вызываем подводные лодки.

Sub Topmost()

    On Error Goto EH
    
    Level1

Done:
    Exit Sub
EH:
    DisplayError Err.source, Err.Description, "Module1.Topmost"
End Sub

Sub Level1()

    On Error Goto EH
    
    Level2

Done:
    Exit Sub
EH:
   RaiseError Err.Number, Err.source, "Module1.Level1", Err.Description, Erl
End Sub

Sub Level2()

    On Error Goto EH
    
    ' Ошибка здесь
    Dim a As Long
    a = "7 / 0"

Done:
    Exit Sub
EH:
    RaiseError Err.Number, Err.source, "Module1.Level2", Err.Description, Erl
End Sub

Результат выглядит так

error handling output

Если в вашем проекте есть номера строк, результат будет содержать номер строки ошибки.

error handling output line

Примечание: вы можете получить следующую ошибку при использовании этого кода:

“Programmatic Access to Visual Basic Project is not trusted”

Чтобы решить эту проблему, выполните следующие действия.

  1. Перейдите в раздел «Разработчик» на ленте и
    нажмите «Macro Security», которая находится под кодом.
  2. Нажмите «Настройка макроса» в левом списке.
  3. Поставьте флажок в поле «Доверительный доступ к
    объектной модели проекта VBA».
  4. Нажмите Ok.

Обработка ошибок в двух словах

  • Обработка ошибок используется для обработки ошибок, возникающих во время работы приложения.
  • Вы пишете определенный код для обработки ожидаемых ошибок. Вы используете оператор обработки ошибок VBA
    On Error Goto [label] для отправки VBA на метку при возникновении непредвиденной ошибки.
  • Вы можете получить подробную информацию об ошибке из Err.Description.
  • Вы можете создать свою собственную ошибку, используя Err.Raise.
  • Использование одного оператора On Error в самой верхней подпрограмме перехватит все ошибки в подпрограммах, которые вызываются отсюда.
  • Если вы хотите записать имя Sub с ошибкой, вы можете обновить ошибку и сбросить ее.
  • Вы можете использовать журнал для записи информации о приложении, когда оно запущено.

Return to VBA Code Examples

This tutorial will explain what a VBA Compile Error means and how it occurs.

Before running your code, the VBA Editor compiles the code. This basically means that VBA examines your code to make sure that all the requirements are there to run it correctly – it will check that all the variables are declared (if you use Option Explicit which you should!), check that all the procedures are declared, check the loops and if statements etc. By compiling the code, VBA helps to minimize any runtime errors occurring.

(See our Error Handling Guide for more information about VBA Errors)

Undeclared Variables

If you do not declare variables, but your Option Explicit is switched on at the top of your module, and then you run the macro, a compile error will occur.

VBACompileError VarNotDeclared

If you click OK,  the relevant procedure will go into debug mode.

VBACompileError Debug

Alternatively, before you run your code, you can force a compilation of the code.

In the Menu, select Debug > Compile Project.

VBACompileError Menu

The compiler will find any compile errors and highlight the first one it finds accordingly.

Undeclared Procedures

If you code refers to a procedure that does not exist, you will also get a compile error.

For example:

Sub CallProcedure()
'some code here then 
  Call NextProcedure
End Sub

However, if the procedure – NextProcedure does not exist, then a compile error will occur.

VBACompileError NoProcedure

Incorrect Coding – Expected End of Statement

If you create a loop using For..Each..Next or With..End With and forget to and the Next or the End With… you will also get a compile error.

Sub CompileError()
 Dim wb As Workbook
 Dim ws As Worksheet
 For Each ws In wb
   MsgBox ws.Name
End Sub

VBACompileError NoNext

The same will happen with an If statement if the End If is omitted!

VBACompileError NoEndIf

Missing References

If you are using an Object Library that is not part of Excel, but you are using the objects from the library in your variable declaration, you will also receive a compile error.

VBACompileError MissingRef

This can be solved by either Late Binding – declaring the variables are Objects; or by adding the relevant Object Library to the Project.

In the Menu, select Tools > References and add the relevant object library to your project.

VBACompileError RefBox

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Ошибка компиляции в скрытом модуле — это сообщение об ошибке, которое может отображаться для некоторых Microsoft Word и пользователей Microsoft Excel. Это сообщение обычно отображается, когда пользователи Office открывают Word или Excel. После этого сообщения приложение не запускается.

Эта ошибка возникает, когда код несовместим с версией или архитектурой этого приложения. Например, если код в документе нацелен на 32-разрядные приложения Microsoft Office, но пытается работать в 64-разрядном Office, может возникнуть эта ошибка.

Говорит Microsoft.

Ошибка возникает, если в коде VBA внутри защищенного (скрытого) модуля существует ошибка компиляции. Конкретная ошибка компиляции не отображается, поскольку модуль защищен.

Попробуйте следующие предложения, чтобы устранить проблему:

Снимите защиту с модуля кода VBAПеререгистрируйте файлы OCX с помощью командной строкиОбновление Adobe AcrobatПеремещение файлов PDfmaker в другую папкуОбновление или удаление антивирусного программного обеспечения Norton

Давайте рассмотрим эти способы более подробно.

1] Снимите защиту с модуля кода VBA

Теперь, если вы столкнулись с этой ошибкой, выполните следующие действия:

Если у вас есть доступ к коду VBA в документе или проекте, снимите защиту с модуля, а затем снова запустите код, чтобы просмотреть конкретную ошибку. Если у вас нет доступа к коду VBA в документе или проекте, получить доступ к коду VBA в документе, а затем обратиться к автору документа, чтобы обновить код в скрытом модуле.

Это официальный обходной путь. Если это не помогает, попробуйте следующие предложения:

2] Перерегистрация файлов OCX с помощью командной строки

Ошибка компиляции в скрытом модуле также может быть побочным эффектом обновлений Windows.. Следовательно, регистрация файла mscomctl.ocx может решить проблему. Чтобы перерегистрировать файл OCX, выполните следующие действия:

Нажмите горячую клавишу Windows + X. Выберите Командная строка (Администратор), чтобы запустить приглашение от имени администратора.

В случае 32-разрядного компьютера с Windows введите следующие команды. в приглашении:

regsvr32-uc:windowssystem32mscomctl.ocx regsvr32 c:windowssystem32mscomctl.ocx

В случае 64-разрядного компьютера с Windows введите в приглашении следующие команды:

regsvr32-uc:windowssyswow64mscomctl.ocx regsvr32 c:windowssyswow64mscomctl.ocx

3] Обновление Adobe Acrobat

Это относится к вам, если вы используете Adobe Acrobat.

Ошибка компиляции в скрытой ошибке модуля также может возникать из-за двух файлов шаблонов Adobe Acrobat в папках MS Office. Рекомендуется установить программное обеспечение Adobe с официального сайта, чтобы избежать этой ошибки. Если вы столкнетесь с этой ошибкой, вы можете экспортировать PDF-файлы в другие Microsoft 365, такие как Word, Excel или PowerPoint. Вы можете обновить Adobe, нажав Справка в окне Adobe. Выберите Проверить наличие обновлений, чтобы открыть окно программы обновления. Затем вы можете нажать кнопку Загрузить и установить в случае какого-либо обновления.

4] Перемещение файлов PDFmaker в другую папку

Это относится к вам, если вы используете PDFmaker

Ошибка компиляции в скрытом модуле связана с двумя файлами Adobe Acrobat, т.е. PDFmaker.xla и PDFmaker.dot. Следовательно, перемещение этих файлов из папок MS Office также может исправить ошибку. Вы также можете выполнить следующие шаги:

Нажмите «Введите здесь», чтобы найти кнопку, и откройте окно поиска Cortana. Введите PDfmaker.xla в поле поиска, чтобы найти этот файл. Введите PDFmaker.dot в поле поиска, чтобы найти файл. Щелкните правой кнопкой мыши указанные файлы и выберите «Открыть расположение файла», чтобы открыть папки в проводнике. Если вы не можете найти файлы, вы можете открыть папки запуска MS Office и Xlstart в проводнике. файлы в проводнике и выберите параметр «Вырезать», чтобы переместить файлы PDfmaker на рабочий стол. Щелкните правой кнопкой мыши другую папку, чтобы переместить их, и выберите «Вставить».

5] Обновите или удалите антивирусное программное обеспечение Norton

Это относится к вам, если вы используете программное обеспечение Norton

Norton Антивирус также может быть подключен к ошибке компиляции в скрытой ошибке модуля. Если он установлен, обновление программного обеспечения может решить проблему. Вы можете проверить наличие обновлений, нажав кнопку «Обновить сейчас». Вы можете щелкнуть правой кнопкой мыши значок Norton Antivirus на панели задач и выбрать Norton LiveUpdate.

Если обновление Norton Antivirus не устраняет проблему, вы можете удалить программное обеспечение Norton.

Нажмите Сочетание клавиш Windows + R для открытия окна Выполнить. Введите appwiz.cpl в поле «Выполнить» и нажмите кнопку ОК . Выберите перечисленное программное обеспечение Norton Antivirus и нажмите кнопку «Удалить», чтобы удалить программное обеспечение после подтверждения.

Мы надеемся, что одно из вышеупомянутых решений поможет вам исправить ошибку компиляции в скрытой ошибке модуля и перезапустить Ворд и Эксель. Сообщите нам в случае каких-либо вопросов или предложений.

Как мне открыть Excel в безопасном режиме?

Вы можете открыть Excel в безопасном режиме, нажав и удерживая кнопку Ctrl как вы запускаете программу. Вы также можете использовать безопасный переключатель (excel.exe/safe) при запуске программы из командной строки.

Исправить: файл поврежден и не может быть открыт из-за ошибки в Word, Excel, PowerPoint

Что такое безопасный режим в Microsoft Word?

Если вы не можете нормально использовать Microsoft Office, вы можете использовать встроенную функцию безопасности. Если Word или Excel аварийно завершает работу при каждом открытии, вы можете запустить указанное приложение в безопасном режиме, и это поможет вам нормально работать.

Типы ошибок в VBA

​Смотрите также​ вероятностью 1/5 If​ момент возникновения ошибки​ / 0 j​ On Error Resume​

  • ​. Спасибо.​
  • ​ = wdSeekCurrentPageHeader Do​
  • ​On Error GoTo​

​ будет ошибочным, но​ этот файл повторится.​ = Workbooks.Open(«C:Documents and​ справиться с возникающими​

Ошибки компиляции

​ попытке присвоить переменной​ расшифрованы на сайте​ случае при нажатии​ использовать или обратиться​ Visual Basic во​При выполнении макросов Excel​ Cells(i, 1).Value >​

​ в цикле For​ = «test» If​ Next For i​Грузить файлы запрещено​ Selection.WholeStory Selection.Copy ActiveWindow.ActivePane.View.NextHeaderFooter​ err1 ‘включаем первую​ макрос будет продолжать​ При желании вместо​ SettingsData») ‘Присваиваем переменным​ ошибками, VBA предоставляет​​ значение не соответствующего​​ Microsoft Support (на​

​ на кнопку​​ к переменной, которая​​ введённом коде синтаксической​​ могут возникнуть ошибки,​ 3 Then On​ у меня останавливалось​ Err Then Cells(i,​ = 1 To​ в организации, поэтому​ Loop footercopy: ActiveWindow.ActivePane.View.SeekView​ обработку ‘создаём исключение​ выполняться до завершения.​ попытки открыть нужный​ Val1 и Val2​ разработчику операторы​​ типа – например,​​ английском). Наиболее часто​Debug​​ не была объявлена​​ ошибки, будет показано​​ которые в VBA​​ Error GoTo errH2​

​ выполнение кода и​ 2).Value = Err.Description:​ 10 If Cells(i,​ опишу пример.​ = wdSeekMainDocument Application.Run​ On Error GoTo​Редактор Excel VBA предоставляет​ файл, выполнение процедуры​ данные из рабочей​On Error​ объявлена переменная​ встречающиеся ошибки VBA​

Ошибки в Excel VBA

​(в окне сообщения​​ для текущей области​ соответствующее сообщение. Если​​ делят на три​ x = 1​ переходило на Next?​ Err.Clear: End If​ 1).Value > 3​Есть книга со​ «footercopy» End Sub​ 0 ‘отключаем её​ набор инструментов отладки,​Sub​ книги DataWorkbook Val1​​и​​i​

Ошибки выполнения

​ перечислены в этой​ о необходимости отладки)​ (такая ошибка может​ же этот режим​ категории:​ / 0 End​Казанский​ Next End SubErr.Description​ Then If Err​ значениями на Листе1​ Sub footercopy() On​ On Error GoTo​ которые помогут найти​

​может быть прервано​ = Sheets(«Лист1»).Cells(1, 1)​Resume​типа​ таблице:​​ будет выделена цветом​ возникнуть только если​​ выключен, то редактор​

Ошибки в Excel VBA

​Ошибки компиляции​ If nxt: Next​: Да уж наверно,​ будет выдавать последнюю​ Then Cells(i, 2).Value​ [A1:A5]={1;2;3;4;5} и макрос:​ Error GoTo ExitSub​ err2 ‘включаем вторую​​ и исправить логические​​ в этом месте​ Val2 = Sheets(«Лист1»).Cells(1,​. Эти операторы отслеживают​Integer​5​ строка кода, которая​

Ошибки в Excel VBA

​ используется​ VBA продолжит сообщать​Ошибки выполнения​ Exit Sub ‘Если​ раз не работает​ ошибку, а не​ = «Ошибка 1»:​

​ Sub test() Dim​ ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter​ обработку ‘создаём исключение​ ошибки в коде​ при помощи команды​ 2) DataWorkbook.Close Exit​ ошибки и направляют​, и происходит попытка​Недопустимый вызов процедуры (Invalid​ стала причиной ошибки​Option Explicit​ о синтаксических ошибках,​Логические ошибки (баги)​ ошибка в условии​Resume​​ первую.​​ Err.Clear: Exit Sub​​ i%, x# [B:B].ClearContents​​ Do Selection.WholeStory Selection.Copy​

​ Exit Sub ‘выход​ VBA. В данной​Exit Sub​ Sub ErrorHandling: ‘Если​ выполнение макроса в​ присвоить ей значение​ procedure call)​

​ VBA.​ ​).​ просто выделяя их​
​Далее мы поговорим о​ ​ цикла, значит Netx​нужен для того,​
​А почему в​ ​ x = 1​ For i =​ ActiveWindow.ActivePane.View.NextHeaderFooter Loop ExitSub:​

​ из процедуры err1:​ статье мы не​.​ файл не найден,​ специальный раздел кода​ строкового типа.​7​​Получив такое сообщение и​​Ошибки выполнения возникают в​ красным цветом. Опцию​ каждом из трёх​ errH2: ‘If Err.Number​​ чтобы выйти из​​ моём варианте возникает​

​ / 0 If​ ​ 1 To 10​ ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument​
​ MsgBox Err.Description ‘обрабатываем​ ​ будем рассматривать подробно​

​Логические ошибки (или баги)​ предлагаем пользователю разместить​ VBA, в котором​53​Недостаточно памяти (Out of​​ видя выделенную строку​​ процессе выполнения кода​​Auto Syntax Check​​ типов ошибок VBA​ > 0 Then​ состояния обработки ошибки​

​ ошибка?​ ​ Err Then Cells(i,​ On Error GoTo​

​ End SubЯ здесь​ первое исключение Exit​ эти инструменты. Любознательный​

Перехват ошибок выполнения

​ возникают в процессе​ его в ‘нужном​ происходит обработка ошибки.​Файл не найден (File​ memory)​ кода, как в​ и приводят к​можно включить/выключить в​ подробно.​ ‘проверка не нужна,​ и перейти в​Вроде всё верно​ 2).Value = «Ошибка​ errH1 If Cells(i,​ сделал вызов другого​ Sub ‘выход из​ пользователь может найти​ выполнения кода VBA,​ месте и продолжить​

​ После выполнения кода​ not found)​9​ приведённом выше примере,​​ остановке выполнения программы.​​ меню​​Компилятор VBA рассматривает ошибки​​ т.к. без ошибки​ состояние нормальной работы.​ написано, но обработка​ 2″: Err.Clear: End​ 1).Value > 3​ макроса, т.к. не​ процедуры err2: MsgBox​ обзор инструментов отладки​ но позволяют ему​ работу MsgBox «Рабочая​ обработки ошибки, работа​Иногда возникает при попытке​Индекс вне заданного диапазона​ обнаружить причину ошибки​ Этот тип ошибок​

​Tools​ компиляции как недопустимые​ мы бы сюда​Если при работе​ не срабатывает…​ If Next End​ Then On Error​ знал, как применить​ Err.Description ‘обрабатываем второе​ VBA на сайте​ выполняться до самого​ книга не найдена!​ программы может быть​ открыть не существующий​ (Subscript out of​ будет совсем не​ VBA, как правило,​>​ и выделяет их​ не попали Cells(i,​ обработчика ошибок происходит​Казанский​ Sub​ GoTo errH2 x​ обработку 2 ошибок,​ исключениеНо зачем?​ Microsoft Help &​ завершения. Правда в​ » & _​ продолжена с того​ файл.​ range)​ сложно.​ также не сложно​Options​ в коде ещё​

​ 2).Value = «Ошибка​ ошибка, происходит останов​: 1. Нет выхода​​Евгений​​ = 1 /​ которые должны по-любому​Можно и в​ Support (на английском).​ результате могут выполняться​ «Пожалуйста добавьте книгу​ места, где возникла​Не все ошибки выполнения​​Эта ошибка возникает при​​В случае если код​ обнаружить и исправить,​редактора Visual Basic.​ до того, как​ 2″ ‘ Err.Clear​ (есть правда возможность​​ из обработчика ошибки​​: Т.е. выполняется условие,​ 0 End If​ произойти (это является​​ одной метке обработать​​Урок подготовлен для Вас​

Логические ошибки

​ не те действия,​ Data.xlsx в каталог​ ошибка, или макрос​ бывают вызваны недочётами​ попытке обратиться к​ сложнее, чем в​ так как сообщается​В некоторых случаях ошибка​ дело дойдёт до​ ‘End If Resume​ обойти его:​ — оператор Resume​ а только потом​ ‘Если ошибка в​ функциональностью макроса).​ несколько ошибок​ командой сайта office-guru.ru​ которые ожидалось, и​ C:Documents and Settings​ может быть остановлен​ в коде. Например,​

​ элементу массива за​ нашем примере, то,​ информация о характере​ компиляции может быть​ запуска макроса.​ nxt ‘Если ошибка​On Error Goto -1​2. Нет обхода​

​ проверяется наличие ошибок,​ условии цикла, значит​Евгений​On Error GoTo​Источник: http://www.excelfunctions.net/VBA-Error.html​ может быть получен​ и нажмите OK.»​ полностью. Далее это​ ошибки VBA не​ пределами заданного размера​ чтобы получить больше​ ошибки и место​ обнаружена при выполнении​Если при написании кода​

​ перед условием цикла,​, но это​
​ обработчиков ошибок при​
​ а не в​

​ Netx errH2: If​

office-guru.ru

Обработка ошибок

​: Добрый день!​​ errLabel Open «C:имя_файла»​Перевел: Антон Андронов​ неверный результат. Такие​
​ Resume End Sub​ показано на примере.​ удастся избежать, если​ массива – например,​
​ информации о причине​ в коде, где​ компиляции кода, непосредственно​

​ допущена синтаксическая ошибка,​​ значит End errH1:​
​ крайний случай), а​
​ нормальном выполнении программы.​ момент её возникновения?​ Err.Number > 0​Необходимо построить обработку​ For Input As​Автор: Антон Андронов​ ошибки обнаружить и​В этом коде производится​’Процедура Sub присваивает​ для работы макроса​ если объявлен массив​ возникновения ошибки VBA,​ произошла остановка.​ перед тем, как​ то редактор VBA​ ‘If Err.Number >​
​ если ошибка происходит​Евгений​Так работает, спасибо!​
​ Then Cells(i, 2).Value​ ошибок с двумя​ 0 Exit Sub​Busine2009​ исправить труднее всего,​ попытка открыть файл​ переменным Val1 и​ необходимо открыть файл​ с индексами​ можно проверить значения​Примером такой ошибки может​ макрос будет выполнен.​ сигнализирует об этом​

​ 0 Then ‘проверка​​ после Resume, то​
​: 1. Может я​ Только что делать,​ = «Ошибка 2″​ разными метками выхода​ errLabel: Select Case​: Можно в одной​ так как компилятор​ Excel с именем​ Val2 значения, ‘хранящиеся​ с данными, а​от 1 до 10​ используемых переменных. В​ служить попытка выполнить​ Обычно ошибку компиляции​ немедленно: либо при​ не нужна, т.к.​ вызывается обработчик ошибок,​ неправильно представлял работу​ если будет так:​ Err.Clear End If​ (всё в цикле):​ Err.Number … Case​

CyberForum.ru

Обработка ошибок с двумя разными метками (VBA)

​ процедуре использовать 2​​ VBA их не​
​Data​ в ячейках A1​ этого файла не​, а мы пытаемся​
​ редакторе VBA для​ деление на ноль.​ несложно обнаружить и​ помощи окна с​ без ошибки мы​
​ который назначен в​ обработчика, но зачем​ Sub test() Dim​ Next ‘Если ошибка​
​1. Если возникает​ 52 MsgBox «Неправильный​ раза​:)​ распознаёт и не​
​. Если файл не​ и B1 рабочей​ существует. В таких​
​ обратиться к элементу​ этого достаточно навести​ В результате будет​ исправить, потому что​ сообщением, либо выделяя​ бы сюда не​ данный момент.​ делать Resume, если​ i%, x#, j%​ перед условием цикла,​ ошибка до условия​ дискриптор файла» Case​On Error GoToсоответственно​ может указать на​ найден, то пользователю​ книги Data.xlsx расположенной​ случаях признаком профессионализма​ этого же массива​ указатель мыши на​ показано сообщение «​ компилятор VBA даёт​ ошибку красным цветом,​ попали Cells(i, 2).Value​Ваш код может​ есть GoTo?​ [B:B].ClearContents On Error​ значит End errH1:​ If, то просто​ 53 MsgBox «Файл​

​ для одной части​​ них так, как​
​ будет предложено поместить​ в каталоге C:Documents​ будет перехват ошибок​ с индексом​ имя переменной, или​Run-time error ’11’: Division​ информацию о характере​ в зависимости от​ = «Ошибка 1″​ выглядеть так: Sub​2. Я для​ Resume Next For​ If Err.Number >​ переходим на End​ не найден» …​ кода и для​ это происходит с​ этот файл в​

​ and Settings Sub​​ и написание кода​11​ можно открыть окно​ by zero​ и причине ошибки.​
​ статуса режима​ ‘End If End​ test() Dim i%,​ этого вставил условие​ i = 1​ 0 Then Cells(i,​ Sub.​ Case Else MsgBox​ другой части кода?​ ошибками компиляции и​ нужную папку. После​ Set_Values(Val1 As Double,​ VBA, который будет​.​ отслеживания локальных переменных​«.​Например, сообщение «​Auto Syntax Check​ Sub​ x# [B:B].ClearContents For​ If Err.Number >​ To 10 If​ 2).Value = «Ошибка​2. Если возникает​
​ «Другая ошибка» End​Если можно, то​ выполнения.​:(
​ того, как пользователь​ Val2 As Double)​ выполняться при их​

​11​​ (в меню редактора​В зависимости от структуры​Compile error: Variable not​
​.​Евгений​ i = 1​

​ 0 Then …​​ Cells(i, 1).Value >​ 1″ End If​ ошибка в условии​ Select​ напишите как. Буду​
​Например, при создании макроса​ сделает это и​ Dim DataWorkbook As​ возникновении. Таким образом,​Деление на ноль (Division​

​View​​ проекта VBA, может​ defined​Примечание:​: Спасибо за подробное​ To 10 On​ End If​ 3 Then If​ End Sub​

​ If, то переходим​​Busine2009​ очень признательным.​:)
​ в процедуре случайно​​ нажмёт​ Workbook On Error​ вместо неприятных сбоев​ by zero)​>​
​ быть предложено выполнить​» при попытке запустить​При включённом режиме​ объяснение, всё работает​ Error GoTo errH1​​Евгений​​ Err Then Cells(i,​KuklP​ на Netx.​: Вот конкретный пример:​Abu​ были просуммированы не​ОК​
​ GoTo ErrorHandling ‘Открываем​ будет происходить изящное​13​Locals Window​ отладку кода (как​ выполнение кода VBA​Auto Syntax Check​А то у​ x = 1​: Задам немного другой​ 2).Value = Err.Description:​: Так не проще?:​Прошу помочь разобраться​Sub HeaderCopy() On​: Можно!​ те переменные, которые​, выполнение кода продолжится,​ рабочую книгу с​ завершение работы макроса.​Несоответствие типа (Type mismatch)​).​ показано на рисунке​ говорит о том,​каждый раз, при​ Уокенбаха такого не​ / Int(Rnd *​ вопрос: как сделать​ Err.Clear: Exit Sub​Sub test() Dim​ почему на срабатывает​ Error GoTo footercopy​Можно так​ требовалось просуммировать. Результат​ и попытка открыть​ данными Set DataWorkbook​Для того, чтобы помочь​Эта ошибка возникает при​Коды различных ошибок выполнения​ ниже). В этом​ что происходит попытка​ появлении в редакторе​

​ написано​​ 5) ‘ошибка с​ так, что в​:)
​ x = 1​ i%, x# [B:B].ClearContents​ макрос​:)

planetaexcel.ru

​ Selection.HomeKey Unit:=wdStory ActiveWindow.ActivePane.View.SeekView​

I have a workbook with several sheets with tables on them. I want to aggregate all the rows from the sheets onto the main table in the first. I would like it to be dynamic, so that when I add a row to one of the other sheets, it adds the row to the main table. Here is the code for my Sub:

Public Sub AggregateIssues() 
    For pgNum = 1 To ActiveWorkbook.Sheets.Count
        If ActiveWorkbook.Sheets(pgNum).Name = "Main" Then

          currSheet = ActiveWorkbook.Sheets(pgNum) 'Get Sheet
          flag = True
          RowIndex = 0
          While currSheet.Tables(0).Rows(RowIndex).Cells(0).Text = Null Or currSheet.Tables(0).Rows(RowIndex).Cells(0).Text = ""

            Row = currSheet.Tables(0).Rows(RowIndex)
            ActiveWorkbook.Sheets("Main").Tables("MainTbl").Append (Row)
            RowIndex = RowIndex + 1
          Next
        End If
    Next pgNum
End Sub

Currently, I am getting a compile error: Sub or function is not defined. The error is thrown on the name of the sub. This is the definition. Of course it is not defined yet. Any ideas on why this is happening?

Note: I believe the error is actually be caused by the continue keyword. Is there a continue keyword in VBA?

Community's user avatar

asked Aug 7, 2012 at 19:57

ExceptionLimeCat's user avatar

ExceptionLimeCatExceptionLimeCat

6,0616 gold badges43 silver badges75 bronze badges

6

continue is not used in VBA — you can instead wrap that if around the code in the main loop.

break is not a VBA statement either — you probably want Exit in place of that.

answered Aug 7, 2012 at 21:22

Tim Williams's user avatar

Tim WilliamsTim Williams

146k8 gold badges94 silver badges120 bronze badges

In regards to your Update1,

The problem is in your While loop.

The correct format is this:

Do while [boolean expression]
'do something
Loop

To be more specific add Do before While, and change your first Next to Loop

Technically you can also use this structure which I like for nostalgic reasons:

While [boolean expression]
'do something
Wend

but you should use the Do…Loop structure (click link for examples)

Edit: To clarify, do not include the [] in your actual code. 🙂

Community's user avatar

answered Aug 7, 2012 at 21:24

Daniel's user avatar

I have a workbook with several sheets with tables on them. I want to aggregate all the rows from the sheets onto the main table in the first. I would like it to be dynamic, so that when I add a row to one of the other sheets, it adds the row to the main table. Here is the code for my Sub:

Public Sub AggregateIssues() 
    For pgNum = 1 To ActiveWorkbook.Sheets.Count
        If ActiveWorkbook.Sheets(pgNum).Name = "Main" Then

          currSheet = ActiveWorkbook.Sheets(pgNum) 'Get Sheet
          flag = True
          RowIndex = 0
          While currSheet.Tables(0).Rows(RowIndex).Cells(0).Text = Null Or currSheet.Tables(0).Rows(RowIndex).Cells(0).Text = ""

            Row = currSheet.Tables(0).Rows(RowIndex)
            ActiveWorkbook.Sheets("Main").Tables("MainTbl").Append (Row)
            RowIndex = RowIndex + 1
          Next
        End If
    Next pgNum
End Sub

Currently, I am getting a compile error: Sub or function is not defined. The error is thrown on the name of the sub. This is the definition. Of course it is not defined yet. Any ideas on why this is happening?

Note: I believe the error is actually be caused by the continue keyword. Is there a continue keyword in VBA?

Community's user avatar

asked Aug 7, 2012 at 19:57

ExceptionLimeCat's user avatar

ExceptionLimeCatExceptionLimeCat

6,0616 gold badges43 silver badges75 bronze badges

6

continue is not used in VBA — you can instead wrap that if around the code in the main loop.

break is not a VBA statement either — you probably want Exit in place of that.

answered Aug 7, 2012 at 21:22

Tim Williams's user avatar

Tim WilliamsTim Williams

146k8 gold badges94 silver badges120 bronze badges

In regards to your Update1,

The problem is in your While loop.

The correct format is this:

Do while [boolean expression]
'do something
Loop

To be more specific add Do before While, and change your first Next to Loop

Technically you can also use this structure which I like for nostalgic reasons:

While [boolean expression]
'do something
Wend

but you should use the Do…Loop structure (click link for examples)

Edit: To clarify, do not include the [] in your actual code. 🙂

Community's user avatar

answered Aug 7, 2012 at 21:24

Daniel's user avatar

Ошибка компиляции в скрытом модуле: <module name>

Защищенный модуль содержит ошибку компиляции. Так как эта ошибка находится в защищенном модуле, ее нельзя отобразить.

Эта ошибка обычно возникает в случае несовместимости кода с версией или архитектурой данного приложения (например, код в документе рассчитан на 32-разрядные приложения Microsoft Office, однако предпринимается попытка его запуска в 64-разрядной версии Office).

Эта ошибка имеет следующие причину и решение:

  • Ошибка возникает при наличии ошибки компиляции в коде VBA внутри защищенного (скрытого) модуля. Эта ошибка компиляции не отображается, так как модуль является защищенным.

Если у вас есть доступ к коду VBA в документе или проекте, отмените защиту модуля, а затем запустите код еще раз для просмотра сведений об ошибке.

Если доступ к коду VBA в документе отсутствует, обратитесь к автору документа, чтобы он обновил код вскрытом модуле.

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Ошибка решается, проверкой не включенных модулей в окне VB,проверьте все ли необходимые модули включены,и есть ли эти модули на самом деле на ПК,возможно модуль отмечен,но сам отсутствует у меня проблему решило,включением специфических модулей для конкретного файла с расчетами.

Решение проблемы: Откройте файл в Excel – при помощи комбинации клавиш войдите в окно Visual Basic(ALT+F11), далее выберите меню “Tools-References” и посмотрите все ли отмеченные модули есть на самом деле на компьютере и все ли модули необходимые для работы Вашего макроса включены.

Error in Excel “Compile Error in Hidden Module”
Can be happen when Excel miss some reference to library.
For fix: Open Excel – Go to VB window -(ALT+F11).Open Tools-References and check unchecked modules(only needed for your Document).

Решения для ошибки компиляции в скрытом модуле в Excel или Word [Новости MiniTool]

ошибка компиляции в скрытом модуле

При использовании Excel или Word вы можете получить сообщение об ошибке «Ошибка компиляции в скрытом модуле». Что делать, чтобы избавиться от ошибки компиляции Word или Excel на ПК с Windows? Успокойтесь, и теперь вы можете получить несколько простых методов из этого сообщения, предлагаемого MiniTool .

Ошибка компиляции Excel или Word в скрытом модуле

При запуске Excel или Word на экране вашего компьютера может появиться сообщение «Ошибка компиляции в скрытом модуле». Модуль может быть thisworkbook, hstbarpublic, menuandtoolbar, aowd и т. Д.

Почему возникает ошибка компиляции? Это связано с тем, что Microsoft обновляет Office 2016 с 32-разрядной версии до 64-разрядной версии, но в Office есть несовместимые 32-разрядные надстройки. То есть некоторые надстройки содержат код, несовместимый с текущей версией Office 2016.

Что делать, чтобы избавиться от ошибки? Решения для вас ниже.

исправить не отвечающий Excel эскизУстранение неполадок Excel и спасение ваших данных (несколькими способами)

Вы хотите избавиться от Microsoft Excel, который не отвечает? В этом посте мы покажем вам несколько методов, которые могут эффективно решить эту проблему.

Исправления ошибок компиляции в скрытом модуле Excel или Word

Обновите Adobe Acrobat

Два файла шаблона Adobe Acrobat в папке Office могут вызвать сообщение об ошибке компиляции. Одно из возможных решений — обновить Adobe Acrobat.

Шаг 1. Щелкните это приложение, перейдите в Справка> Проверить обновления .

Шаг 2. Если есть обновления, нажмите Загрузить и установить .

Используйте CMD для регистрации файлов OCX

Чтобы исправить ошибку компиляции Excel, вам необходимо зарегистрировать некоторые файлы, необходимые для работы Excel. Просто следуйте этим инструкциям:

Шаг 1. Запустите командную строку (CMD) с правами администратора.

Шаг 2: Введите следующие команды и нажмите Войти после каждого:

В 32-битной Windows:

regsvr32 -u c: windows system32 mscomctl.ocx

regsvr32 c: windows system32 mscomctl.ocx

В 64-битной Windows:

regsvr32 -u c: windows syswow64 mscomctl.ocx

regsvr32 c: windows syswow64 mscomctl.ocx

Зарегистрируйте файлы OCX

Шаг 3: Запустите Excel и посмотрите, исправили ли вы ошибку компиляции в скрытом модуле.

Переместить файлы Pdfmaker в другую папку

Pdfmaker.xla и pdfmaker.dot — это два файла Adobe Acrobat, вызывающие ошибку компиляции. Итак, вы можете переместить эти файлы из папок MS Office, чтобы исправить проблему.

Шаг 1: введите pdfmaker.xla в поле поиска и щелкните его правой кнопкой мыши, чтобы выбрать Откройте расположение файла .

Шаг 2: В проводнике скопируйте и вставьте этот файл в другую папку, например на рабочий стол.

Шаг 3. Сделайте то же самое с файлом pdfmaker.dot.

Теперь вам нужно избавиться от ошибки компиляции в скрытом модуле.

Удалить файлы .exd

Если описанные выше решения не помогли, попробуйте удалить файлы .exd со своего компьютера. Это может быть полезно для исправления ошибки компиляции Excel или Word в скрытом модуле.

Шаг 1: нажмите Win + R , ввод %данные приложения% и нажмите Хорошо .

Шаг 2: нажмите Microsoft> Формы .

Шаг 3. Щелкните правой кнопкой мыши comctllib.exd и mscomctllib.exd и щелкните удалять чтобы удалить их по одному.

Обновите антивирус Norton

Norton Antivirus может быть связан с ошибкой компиляции в скрытом модуле. Если на вашем настольном компьютере или ноутбуке установлено это программное обеспечение, его обновление может помочь решить проблему.

Шаг 1. Перейти к эта ссылка и нажмите Обновите меня сейчас .

Шаг 2: Щелкните файл .exe, чтобы запустить его и завершить обновление.

Если обновление не может решить вашу проблему, вы можете удалить это антивирусное программное обеспечение со своего компьютера и посмотреть, удаляется ли ошибка. Просто обратитесь к этому сообщению — Четыре идеальных способа: как удалить программы в Windows 10 .

Конец

Вас беспокоит ошибка компиляции в скрытом модуле при использовании Word или Excel? Не принимайте это близко к сердцу. Попробовав эти методы, вы легко и эффективно избавитесь от этой проблемы.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка колумба ложные друзья переводчика 4 класс конспект урока
  • Ошибка компиляции microsoft vbscript предполагается наличие окончания инструкции