Ошибка 1004 vba excel

Обновлено: 03.07.2024

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

Синтаксис

On Error GoTo line
On Error Resume Next
On Error GoTo 0

Синтаксис оператора On Error может принимать любую из следующих форм:

Аргумент line представляет собой любую метку строки или любой номер строки.

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

Примечания

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

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

Процедура обработки ошибок не является процедурой Sub или Функцией. Это фрагмент кода, отмеченный меткой строки или номером строки.

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

При обработке ошибок, возникающих при обращении к другим объектам, конструкция On Error Resume Next предпочтительнее, чем On Error GoTo. Проверка объекта Err после каждого взаимодействия с объектом позволяет устранить неоднозначность в плане того, к какому объекту обращался код. Вы можете точно определить, какой объект поместил код ошибки в свойство Err.Number, а также какой объект изначально сгенерировал ошибку (объект, указанный в свойстве Err.Source).

Оператор On Error GoTo 0 отключает обработку ошибок в текущей процедуре. Он не указывает строку 0 в качестве начала кода обработки ошибки, даже если процедура содержит строку с номером 0. Без оператора On Error GoTo 0 обработчик ошибок автоматически отключается, когда выполняется выход из процедуры.

Чтобы не допустить выполнения кода обработки ошибки, когда ошибка не произошла, поместите оператор Exit Sub, Exit Function или Exit Property непосредственно перед программой обработки ошибок, как показано в следующем фрагменте:

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

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

Если создается объект, имеющий доступ к другим объектам, следует попытаться обработать ошибки, передаваемые из этих объектов необработанными. Если вам не удается обрабатывать такие ошибки, сопоставьте код ошибки в Err.Number с одной из собственных ошибок и затем передайте их обратно вызывающей стороне объекта. Следует указать ошибку, добавив код ошибки в константу vbObjectError. Например, если код вашей ошибки — 1052, назначьте его следующим образом:

Системные ошибки во время вызовов ресурсов кода библиотек динамической компоновки (DLL) Windows или Macintosh не вызывают исключений и не могут быть перехвачены при перехвате ошибок Visual Basic. При вызове функций DLL необходимо проверить каждое возвращаемого значения на успешность или сбой (в соответствии со спецификациями API), а в случае сбоя проверьте значение в свойстве lastDLLError объекта Err. Свойство LastDLLError всегда возвращает ноль в Macintosh.

Пример

В этом примере сначала используется оператор On Error GoTo для указания местоположения программы обработки ошибок в процедуре. В примере попытка удалить открытый файл генерирует ошибку номер 55. Ошибка обрабатывается в программе обработки ошибок, и затем управление возвращается к оператору, вызвавшему ошибку. Оператор On Error GoTo 0 выключает перехват ошибок.

Затем заявление On Error Resume Next используется для отсрочки улавливания ошибок, чтобы можно было точно знать контекст ошибки, порожденной следующим утверждением. Обратите внимание, что Err.Clear используется для очистки свойств объекта Err после обработки ошибки.

См. также

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

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


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

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

Существуют различные типы причин, по которым мы получаем VBA Runtime Error 1004 в Excel, давайте рассмотрим некоторые из них.

  • Ошибка выполнения VBA 1004: сбой метода «Диапазон» объекта «_ Global»:

Эта ошибка возникает, когда значение диапазона, которое мы ссылаемся на VBA, неверно. Он также называется метод «Диапазон» объекта «_ Global» не удалось.

  • Ошибка выполнения VBA 1004: это имя уже занято.Попробуйте другой:

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

  • Ошибка выполнения VBA 1004: невозможно получить свойство select класса Range:

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

  • Ошибка выполнения VBA 1004: сбой метода «Открыть» объекта «Книги»:

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

  • Ошибка выполнения VBA 1004: извините, мы не смогли найти:

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

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

Пример VBA Runtime Ошибка 1004 в Excel

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

Вы можете скачать этот шаблон Excel с ошибкой VBA 1004 здесь - Шаблон Excel с ошибкой VBA 1004

Ошибка выполнения VBA 1004 - Пример № 1

Как объяснено об этой ошибке, эта ошибка возникает, когда мы ссылаемся на неверное значение именованного диапазона в VBA. Это может произойти, если мы допустим орфографическую ошибку именованного диапазона, чтобы сослаться на диапазон, который даже не существует. Чтобы продемонстрировать это, давайте сначала создадим именованный диапазон. У меня есть следующие данные здесь.


  • Давайте назовем этот заголовок таблицы как DATA .


  • Перейдите на вкладку Разработчик, нажмите на Visual Basic, чтобы открыть VB Editor.


Код:


  • Вызовите заголовок, который мы назвали следующим кодом, написанным ниже.

Код:


  • Когда мы запускаем код, мы видим в Excel, что он был выбран, поскольку мы правильно вызвали заголовок.
  • Теперь мы неправильно написали орфографию имени заголовка.

Код:


  • Запустите код еще раз, чтобы увидеть результат.

Мы получаем Excel VBA Runtime Ошибка 1004, потому что мы неправильно написали имя диапазона.

Ошибка выполнения VBA 1004 - Пример № 2

Мы получаем эту ошибку, когда пытаемся переименовать лист с именем, которое уже занято. Например, я переименовал лист 1 в « Ананд », и я постараюсь переименовать лист 2 в тот же, чтобы увидеть результат.


  • Перейдите на вкладку Разработчик, нажмите на Visual Basic, чтобы открыть VB Editor.
  • Объявите подфункцию, чтобы начать писать код.

Код:


  • Попробуйте переименовать лист 2 в Anand с помощью следующего кода ниже,

Код:


  • Запустите приведенный выше код и посмотрите результат.

Ошибка выполнения VBA 1004 - Пример № 3

Я попытаюсь добавить значение из листа 2 к переменной на листе 3. Но я не буду активировать лист 2 и посмотрю, что произойдет.

  • Перейдите на вкладку Разработчик, нажмите на Visual Basic, чтобы открыть VB Editor.
  • Объявите подфункцию, чтобы начать писать код.

Код:


  • Объявите две переменные A и B как целое число.

Код:


  • В переменной B сохраните значение A в дополнение к ячейке A1 листа 2.

Код:


  • Давайте предположим, что код работает, и используем функцию msgbox для отображения значения B.

Код:


  • Запустите код, чтобы увидеть полученный результат.

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

Ошибка выполнения VBA 1004 - Пример № 4

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

В этом примере я уже переименовал свою книгу в VBA 1004 Error.xlsm, и я попытаюсь снова открыть ее, которая уже открыта, и посмотреть, получу ли я ошибку VBA 1004.

  • Перейдите на вкладку Разработчик, нажмите на Visual Basic, чтобы открыть VB Editor.
  • Объявите подфункцию, чтобы начать писать код.

Код:


  • Объявите переменную в качестве рабочей книги.

Код:


Попробуйте открыть книгу, которую мы уже открыли, с помощью следующего кода.

Код:


Запустите приведенный выше код, чтобы увидеть результат.

Мы получаем эту ошибку, потому что мы уже открыли ту же книгу.

Ошибка выполнения VBA 1004 - Пример № 5

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

  • Перейдите на вкладку Разработчик, нажмите на Visual Basic, чтобы открыть VB Editor.
  • Объявите подфункцию, чтобы начать писать код.

Код:


  • Попробуйте открыть любую книгу с помощью следующего кода,

Код:


  • Я уже удалил лист с места.
  • Запустите код, чтобы увидеть результат.

Поскольку лист не существует в данном месте, мы получаем эту ошибку.

То, что нужно запомнить

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

Рекомендуемые статьи

Это было руководство к VBA 1004 Ошибка. Здесь мы обсудили Excel VBA Runtime Error 1004 вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -


Пример индекса VBA Excel вне диапазона

Ниже приведены различные примеры VBA Subscript вне диапазона в Excel.

Вы можете скачать этот VBA Subscript вне шаблона Excel здесь - VBA Subscript вне шаблона Excel

Индекс VBA вне диапазона - пример № 1

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


Мы получим белое пустое окно модуля. Это где мы должны сделать работу кодирования.

Теперь напишите «Подкатегория выполняемой функции», для лучшей практики сохраните имя функции в «Подкатегории», как мы делали здесь для VBA Subscript вне диапазона.

Код:


Здесь, в Excel, у нас есть только один лист с именем «Лист1», как показано ниже.


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

Теперь перейдите в окно VBA и напишите Sheets (2), а затем выберите функцию Select, как показано ниже. Это означает, что мы выбираем последовательность листов 2- й позиции с помощью функции выбора.

Код:


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


Теперь снова запустите код. И поскольку мы не увидели никакой ошибки, это означает, что наш код завершает успешный запуск.

Индекс VBA вне диапазона - пример № 2

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

Код:


Теперь с помощью Worksheet мы активируем Sheet1, как показано ниже.

Код:



Снова скомпилируйте и запустите код.

Как мы видим выше, даже если наш полный процесс и способ написания кода верны, но мы взяли правильное имя листа как «Лист 1». Который на самом деле не имеет места между «Лист1».

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

Индекс VBA вне диапазона - пример № 3

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

Код:


Теперь с помощью DIM определите массив любого размера и передайте его в строку или целое число. Что зависит от того, что мы хотим хранить в массиве, числа или текст.

Здесь мы рассмотрели массив 2 × 3 как String, как показано ниже.

Код:


Таким образом, он сформирует таблицу для 2 строк и 3 столбцов, и мы можем хранить любые значения в соответствии с нашими потребностями. Поскольку мы выбрали строку, то мы будем рассматривать текст или алфавиты в нем.

Теперь во второй строке кода выберите созданный массив, но с дополнительным или большим столбцом и назначьте текст как ABC или любой другой текст по вашему выбору. Здесь мы выбрали массив 2 × 5, как показано ниже.

Код:


Причина получения этой ошибки заключается в том, что мы выбрали неверный диапазон массива в пределах 2 дополнительных столбцов от 2 × 3 до 2 × 5, что выходит за пределы кода. Теперь, если мы снова выберем правильный диапазон массива как 2 × 3 и посмотрим, что произойдет.


После компиляции и запуска кода. Мы увидим, что не получили никакой ошибки, что означает, что наш код был успешно выполнен.

Плюсы Excel VBA Subscript вне диапазона

  • Индекс VBA вне диапазона позволяет нам узнать, что за ошибка произошла. Так что мы можем конкретно найти решение полученного кода ошибки.
  • Поскольку индекс VBA выходит за пределы диапазона «Ошибка времени выполнения 9», очень полезно знать, какая ошибка произошла в Excel.

То, что нужно запомнить

  • Рекомендуется использовать подкатегорию в имени выполняемой функции с последовательностью кода, чтобы ее было легко отслеживать.
  • Сохраните файл как Macro-Enabled Workbook, чтобы избежать потери написанного кода.
  • Если у вас огромные строки кода, лучше скомпилировать каждую строку кода одну за другой, нажав клавишу F8. Этот метод компилирует каждый шаг кода, чтобы мы могли сразу узнать, какая часть кода действительно имеет ошибку с первого раза.

Рекомендуемые статьи

Это было руководство по Excel VBA Subscript вне диапазона. Здесь мы обсудили причину возникновения ошибки VBA Subscript out of Range (Ошибка времени выполнения 9), а также некоторые практические примеры и загружаемый шаблон Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

Некоторые люди жаловались на Excel ошибка времени выполнения 1004. С самого начала эта ошибка может показаться серьезной проблемой, но по правде говоря, это больше отвлекает, чем что-либо еще. Ошибка времени выполнения 1004 может возникнуть, если Excel не получает доступ к Microsoft Visual Basic для приложений (VBA) или макросам.

Ошибка Excel 1004

Что такое ошибка времени выполнения 1004 в Excel

  • Ошибка выполнения 1004: ошибка, определяемая приложением или объектом
  • Ошибка выполнения 1004: сбой метода копирования класса листа
  • Ошибка 1004: программный доступ к проекту Visual Basic не является доверенным.

Первое, что вам здесь потребуется, это открыть Параметры Excel, что очень просто. Просто откройте Microsoft Excel, затем нажмите «Файл» и выберите «Параметры».


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

Сразу должен появиться раздел Параметры доверия. Оттуда выберите Настройки макроса.


Наконец, нажмите на Доверять доступ к объектной модели проекта VBA, затем нажмите Ok кнопку и все тут.

Сканирование на наличие вредоносных программ

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

Читайте также: