Как решить Runtime Ошибка 1004; мы не можем сделать это в объединенной ячейке

Ошибка выполнения 1004 — это код ошибки, относящийся к Microsoft Visual Basic, который, как известно, влиял на пользователей Microsoft Excel. Как известно, эта ошибка наиболее распространена в Excel 2003 и Excel 2007, хотя ни одна из версий популярного приложения Microsoft для работы с электронными таблицами не защищена от угрозы «Ошибка времени выполнения 1004. В большинстве случаев пользователи, затронутые этой проблемой, видят одно из два различных варианта ошибки времени выполнения 1004. В целом два варианта ошибки времени выполнения 1004 имеют вид:

image

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

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

Sub CopySheetTest () Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer Создать новую пустую книгу: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp Добавить определенное имя в книгу 'Относится к диапазону: oBook.Names.Add Name: = "tempRange", _ RefersTo: = "= Лист1 $ A $ 1!" Сохранить рабочую книгу: oBook.SaveAs "c:  test2.xls" 'Скопируйте лист в цикле. В конце концов, 'вы получите ошибку 1004: метод копирования «Класс рабочего листа не выполнен. Для iCounter = 1 до 275 oBook.Worksheets (1). Копия после: = oBook.Worksheets (1) следующий End Sub

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

Читайте также:  Плюсы и минусы использования учетной записи Microsoft с Windows

Решение:

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

Sub CopySheetTest () Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer Создать новую пустую книгу: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp Добавить определенное имя в книгу 'Относится к диапазону: oBook.Names.Add Name: = "tempRange", _ RefersTo: = "= Лист1 $ A $ 1!" Сохранить рабочую книгу: oBook.SaveAs "c:  test2.xls" 'Скопируйте лист в цикле. В конце концов, 'вы получите ошибку 1004: метод копирования «Класс рабочего листа не выполнен. Для iCounter = 1 до 275 oBook.Worksheets (1). Копия после: = oBook.Worksheets (1) «Раскомментируйте этот код для обходного пути: «Сохранять, закрывать и открывать после каждых 100 итераций: Если iCounter Mod 100 = 0, то oBook.Close SaveChanges: = True Set oBook = Nothing Set oBook = Application.Workbooks.Open ("c:  test2.xls") End If следующий End Sub

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

Обходной путь:

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

  1. запуск превосходить.
  2. Создать новую рабочую книгу и удалять каждый отдельный лист содержит только один.image
  3. Формат Рабочая тетрадь.
  4. Добавьте любой текст, данные и / или диаграммы, которые вы хотите иметь в шаблоне по умолчанию, на единственный лист, который теперь содержит книга.
  5. Если вы используете Excel 2003 или более раннюю версию, нажмите на файл Сохранить как. Если вы используете Excel 2007 или более поздней версии, с другой стороны, нажмите на Microsoft Office кнопку, а затем нажмите на Сохранить как.
  6. в Имя файла: В поле введите любой желаемый шаблон.
  7. Откройте раскрывающееся меню рядом с Сохранить как тип: поле и нажмите на превосходить Шаблон (.xlt) если вы используете Excel 2003 или более раннюю версию, или превосходить Шаблон (.xltx) если вы используете Excel 2007 или более поздней версии, чтобы выбрать его.
  8. Нажмите на Сохранить.
  9. После того, как вы успешно создали шаблон, вы можете вставить его программно, используя следующую строку кода: Sheets.Add Type: =дорожкаимя файла

Читайте также:  Исправлено: ошибка Outlook. Программа для создания этого объекта — Outlook —

Замечания: В строке кода, описанной выше, путь имя_файла Необходимо заменить полным путем (включая полное имя файла) для местоположения шаблона листа, который вы только что создали.

Добавил uniteddare 4 года и 3 месяца назад 17742 просмотров Как правило, ошибка с кодом 1004 возникает при копировании листа в Майкрософт Эксель с помощью макроса и дальнейшего его перемещения в ту же самую книгу, с которой информация и была копирована. Подобные манипуляции вызывают сбой системы, и программа отказывается работать дальше. Для того, чтобы решить эту проблему необходимо создать новую книгу. В ней мы удаляем все листы и оставляем только один. Далее, в соответствие с вашими требованиями, производим форматирование, вставляем тексты и диаграммы, и прочие необходимые данные, используя инструменты по умолчанию. После этого, на верхней панели нажимаем на меню «Файл» и выбираем там действие «Сохранить как». В появившемся окне присваиваем имя документу с сохранением его первоначального расширения. Ниже, в выпадающем списке выбираем Шаблон *.xltх (для пакета Офис первых версий позиция будет называться «Шаблон *.xlt»). Нажимаем кнопку «Сохранить». Для того, чтобы вставить шаблон с помощью макроса, необходимо воспользоваться таким кодом: Sheets.Add Type:=Заданный адресПрисвоенное название документа. Также можно решить проблему и другим способом. Просто сохраняем весь файл экселя в формате соответствующего шаблона. Новый файл создаем на основе этого же шаблона. Таким образом, пока файл не будет сохранён, команда COPY не будет провоцировать сбой системы, даже если листы будут копироваться в рамках одной книги. 0 комментариев Правила  Форумы

Название форума Темы Сообщения Обновление
Вопросы по Microsoft Excel Здесь можно получить ответы на вопросы по Microsoft Excel 83340 663389 19.06.2021 15:11:47
Вопросы по Microsoft Excel (архив) Ветка со старого форума 44519 358023 29.01.2017 17:28:40
Копилка идей Лучшие избранные темы с основного форума 13 79 28.06.2018 15:25:11
Вопросы по Excel для Mac Если вы — счастливый обладатель Mac 😉 278 1310 08.06.2021 16:59:50
Работа Раздел для размещения платных вопросов, проектов и задач и поиска исполнителей для них. 3313 19695 19.06.2021 13:15:43
Вопросы по надстройке PLEX Если Вы скачали или приобрели надстройку PLEX для Microsoft Excel и у Вас есть вопросы или пожелания — Вам сюда. 418 2122 19.06.2021 14:56:09
Курилка Оффтопьте на здоровье 1271 19201 18.06.2021 10:04:10
Вопросы по работе форума Обсуждение функционала, правил и т.д. 339 4449 12.06.2021 18:52:01

Всего тем: 133491 Всего сообщений: 1068268 есть новые сообщения нет новых сообщений

Ошибка времени выполнения VBA '1004' Ошибка, определяемая приложением или объектом

У меня возникает проблема с ошибкой 1004 «Ошибка, определяемая приложением или объектом» при выборе диапазона.

Я все еще могу выбирать строки (т.е. Rows('21:21').select) и выбрать диапазоны на других листах той же книги. Я не верю, что ошибка в коде. Может быть, это какая-то настройка, о которой я не знаю?

Я много раз использовал тот же самый код, но по какой-то причине я не могу заставить его работать в этой подпрограмме (я прокомментировал, где возникает ошибка) …

Sub CopySheet1_to_PasteSheet2() Dim CLastFundRow As Integer Dim CFirstBlankRow As Integer 'Finds last row of content Windows('Excel.xlsm').Activate Sheets('Sheet1').Activate Range('C21').Select '>>>Error 1004 'Application-defined or Object-defined error' Occurs Selection.End(xlDown).Select CLastFundRow = ActiveCell.Row 'Finds first row without content CFirstBlankRow = CLastFundRow + 1 'Copy Data Range('A21:C' & CLastFundRow).Select Selection.Copy 'Paste Data Values Sheets('PalTrakExport PortfolioAIdName').Select Range('A21').Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'Bring back to top of sheet for consistancy Range('A21').Select Range('A1').Select End Sub 

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

Dim CLastFundRow As Integer Dim CFirstBlankRow As Integer 'Finds last row of content Windows('Excel.xlsm').Activate Sheets('Sheet1').Activate Range('C21').Select '>>>Error 1004 'Application-defined or Object-defined error' Occurs Selection.End(xlDown).Select CLastFundRow = ActiveCell.Row 'Finds first row without content CFirstBlankRow = CLastFundRow + 1 
  • 5 Всегда лучше избегать использования Select: stackoverflow.com/questions/10714251/…

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

Sheets('Sheet1').Range('C21').Select 

Я не очень знаком с тем, как работает Select, потому что стараюсь по возможности избегать этого :-). Вы можете определять диапазоны и управлять ими, не выбирая их. Также рекомендуется четко указывать все, на что вы ссылаетесь. Таким образом, вы не потеряете счет, переходя с одного листа или книги на другой. Попробуй это:

Option Explicit Sub CopySheet1_to_PasteSheet2() Dim CLastFundRow As Integer Dim CFirstBlankRow As Integer Dim wksSource As Worksheet, wksDest As Worksheet Dim rngStart As Range, rngSource As Range, rngDest As Range Set wksSource = ActiveWorkbook.Sheets('Sheet1') Set wksDest = ActiveWorkbook.Sheets('Sheet2') 'Finds last row of content CLastFundRow = wksSource.Range('C21').End(xlDown).Row 'Finds first row without content CFirstBlankRow = CLastFundRow + 1 'Copy Data Set rngSource = wksSource.Range('A2:C' & CLastFundRow) 'Paste Data Values Set rngDest = wksDest.Range('A21') rngSource.Copy rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'Bring back to top of sheet for consistancy wksDest.Range('A1').Select End Sub 
  • 1 Отделение копии от прошлого, как сказано в этом ответе, помогло нам. благодаря

Это немного поздно, но может быть полезно для справок в будущем. У меня была такая же проблема, и я думаю, это потому, что макрос был размещен на уровне рабочего листа. Щелкните правой кнопкой мыши узел модулей в окне проекта VBA, нажмите «Вставить» => «Модуль», затем вставьте свой макрос в новый модуль (убедитесь, что вы удалили тот, который был записан на уровне рабочего листа).

  • Кажется, в этом и заключается проблема! Я использовал кнопку, записанную на уровне рабочего листа, скопированную и вставленную в модуль, и это сработало потрясающе! Большое спасибо!
  • СПАСИБО X10000! Это была моя проблема. Я просто хотел бы понять, почему это было проблемой. Все, что я делаю, это сравниваю даты между ячейками A и B, а затем меняю цвет. В любом случае большое спасибо!

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

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

Мой Excel поставляется по умолчанию, поэтому я ввожу формулы в ячейку Excel следующим образом:

=COUNTIF(Range; Searchvalue) =COUNTIF(A1:A10; 7) 'Example 

Обратите внимание, что параметры разделяются точкой с запятой.;. Теперь, если вы вставите именно эту строку в формулу в VBA, например, например:

Range('C7').FormulaArray = '=COUNTIF(A1:A10; 7)' 'this will not work 

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

Range('C7').FormulaArray = '=COUNTIF(A1:A10, 7)' 'this works 
  • Обратите внимание, что этот ответ на самом деле может не решить эту конкретную проблему, но поскольку этот вопрос был единственным, который подходил к моей проблеме, я отправляю свой ответ здесь. Пожалуйста, прокомментируйте или проголосуйте против, чтобы у меня был стимул позже открыть свой вопрос и разместить там этот ответ 🙂 Сейчас не произойдет, я занят на работе.
  • +1 Мужик это безумие, ТАКОЕ СПАСИБО. Я был заблокирован на несколько часов по этой проблеме. Вот почему я абсолютно НЕНАВИЖУ VBA.

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

Может появиться сообщение об ошибке «Ошибка выполнения 1004» при программной установке строки большого массива в диапазон в Excel 2003

В Office Excel 2003 при программной установке значения диапазона с помощью массива, содержащего большую строку, может появиться сообщение об ошибке, подобное следующему:

Ошибка времени выполнения «1004». Ошибка, определяемая приложением или операцией.

Эта проблема может возникнуть, если одна или несколько ячеек в массиве (диапазоне ячеек) содержат символьную строку, которая содержит более 911 символов.

Чтобы обойти эту проблему, отредактируйте сценарий так, чтобы никакие ячейки в массиве не содержали символьной строки, содержащей более 911 символов.

Например, следующая строка кода из приведенного ниже примера блока кода определяет символьную строку, содержащую 912 символов:

Sub XLTest() Dim aValues(4) aValues(0) = 'Test1' aValues(1) = 'Test2' aValues(2) = 'Test3' MsgBox 'First the Good range set.' aValues(3) = String(911, 65) Range('A1:D1').Value = aValues MsgBox 'Now the bad range set.' aValues(3) = String(912, 66) Range('A2:D2').Value = aValues End Sub 

Другие версии Excel или бесплатные альтернативы, такие как Calc, также должны работать.

Я мог бы удалить ошибку (ошибка времени выполнения «1004». Ошибка, определяемая приложением или операцией), определяя счетчики как одиночные.

У меня была аналогичная проблема, и я исправил ее, выполнив следующие действия:

  1. Снятие защиты с листа, который я хочу отредактировать
  2. Изменение диапазона, который я выбрал каждой отдельной ячейкой в ​​диапазоне (в разобранном виде)

Надеюсь, это кому-то поможет.

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

Sub DesdeColombia () Dim LastRowFull As Long 'Here we will define the first blank row in the column number 1 of sheet number 1: LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row 'Now we are going to insert information Sheet1.Cells(LastRowFull, 1).Value = 'We got it' End Sub 

Вы можете использовать следующий код (например, если нужно было скопировать данные ячейки из Sheet2 к Sheet1).

Sub Copy Worksheets('Sheet1').Activate Worksheets('Sheet1').Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_ Destination:=Worksheets('Sheet2').Cells(Path2Row, Path2EndColumn + 1) End Sub 
  • Не могли бы вы пояснить свой ответ, включив в него объяснение того, как работает ваш код, и пожалуйста, не пишите это так, как будто вы пишете другу. Если вы не знаете, как отвечать на вопросы о StackOverflow, прочтите это. Приветствую и счастливых ответов!

У меня была аналогичная проблема, но оказалось, что я просто ссылался на ячейку, которая была за пределами страницы {т.е. cells(i,1).cut cells (i-1,2)}

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

dim mySheet as sheet for each mysheet in myWorkbook.sheets mySheet.activate activesheet.range('A1').select with Selection 'any wanted operations here end with next 

И все работало нормально

Надеюсь, ты сможешь адаптировать это к своей ситуации

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

У меня тоже была похожая проблема. После копирования и вставки на лист я хотел, чтобы курсор / выбранная ячейка была A1, а не диапазоном, в который я только что вставил.

Dim wkSheet as Worksheet Set wkSheet = Worksheets() wkSheet('A1').Select 

но получил ошибку 400, которая на самом деле была ошибкой 1004

Вам необходимо активировать лист перед изменением выбранной ячейки, это сработало

Dim wkSheet as Worksheet Set wkSheet = Worksheets() wkSheet.Activate wkSheet('A1').Select 

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

On Error Resume Next //Your Line here which causes 1004 error If Err.Number > 0 Then Debug.Print Err.Number & ':' & Err.Description End If 

Примечание. Сочетания клавиш отладки, которые я использую на ПК: «Шаг с заходом» (F8), «Шаг вперед» (Shift + F8), «Выход» (Ctrl + Shift + F8).

У меня возникла эта проблема во время разработки / отладки VBA внезапно, потому что некоторая (неизвестная мне) функция (ality) вызвала блокировку ячеек (возможно, переименование именованных ссылок на каком-то проблемном этапе).

Разблокировка ячеек вручную работал нормально:

Выбор всех ячеек листа (CTRL+A) и разблокировать right click -> cell formatting -> protection -> [ ] lock (может быть разным — перевод с немецкого: Zellen formatieren -> Schutz -> [ ] Gesperrt)

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

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

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

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

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

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

image

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

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

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

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

image

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

image

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

В случае если код сложнее, чем в нашем примере, то, чтобы получить больше информации о причине возникновения ошибки 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 (на английском).

Урок подготовлен для Вас командой сайта office-guru.ru Источник: http://www.excelfunctions.net/VBA-Error.html Перевел: Антон Андронов Правила перепечатки Еще больше уроков по Microsoft Excel

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий