Меню

Майкрософт визуал базик ошибка

Не так давно очередной раз столкнулся с ошибками приложения Excel при попытке включения макросов после открытия файлов .xlsm. Вспомнил, что подобные проблемы преследуют пользователей довольно давно, но чаще всего они наблюдались с Excel 2013 и Excel 2016. Характерные особенности этой группы ошибок следующие:

  • Приложение Excel закрывается при открытии файла с макросами (при включенном режиме безопасности Включить все макросы);
  • Ошибка приложения Excel возникает при попытке включить содержимое (нажатии соответствующей кнопки);
  • Ошибка приложения Excel возникает при сохранении файла с макросами;

Ну и по горячим следам очередного инцидента, дабы не откладывать на потом, решил для себя собрать небольшой хаб по ошибкам приложения Excel с последующей модификацией, дабы опять не терять время на поиск информации в Сети и на составление облака причин.
Суть в том, что в процессе открытия файла xlsm, и при отключенных макросах, в верхней части основного окна (над таблицей), высвечивается строка уведомления: ПРЕДУПРЕЖДЕНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ Запуск макросов отключен, с кнопкой включения содержимого (макросов). Как только пользователь её нажимает, Excel попросту аварийно завершается (падает) с ошибкой Программа Microsoft Excel не работает и характерным окном уведомления:

excel ошибка макроса

При этом было замечено, что непосредственно перед возникновением ошибки приложения Excel никаких системных обновлений и обновлений пакета Office не устанавливалось. Возможно, каким-то образом задействованы последние обновления на Office, но прямой связи я не заметил, а подробного исследования проблемы не проводил. При этом зависимости от версии операционной системы (мною лично сбои наблюдались на Windows 10 LTSC и Windows 7 Professional) так же выявлено не было. При анализе аварийного дампа приложения (*.hdmp) обычно можно увидеть подобную информацию исключения (вывод урезан):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

. . .

EXCEPTION_RECORD:  (.exr 1)

ExceptionAddress: 00007ff86a1e05ac (VBE7+0x00000000001405ac)

   ExceptionCode: c0000005 (Access violation)

  ExceptionFlags: 00000000

NumberParameters: 2

   Parameter[0]: 0000000000000001

   Parameter[1]: 0000000000000010

Attempt to write to address 0000000000000010

DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_WRITE

PROCESS_NAME:  EXCEL.EXE

ERROR_CODE: (NTSTATUS) 0xc0000005 <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 <Unable to get error code text>

EXCEPTION_CODE_STR:  c0000005

EXCEPTION_PARAMETER1:  0000000000000001

EXCEPTION_PARAMETER2:  0000000000000010

WRITE_ADDRESS:  0000000000000010

. . .

обычно это NTSTATUS с кодом c0000005 — Access violation, доступ запрещен. И чаще всего в дампе можно увидеть такой вот стек потока (вывод оптимизирован для улучшения представления):

. . .

STACK_TEXT:  

000000b9`1acfdd00 000001d3`2fb24e90 : 000001d3`5a0e0ef0 00000000`00000000 : VBE7+0x1405ac

000000b9`1acfdd08 000001d3`24c1fe20 : 00000000`00000000 000001d3`2fda9640 : 0x000001d3`2fb24e90

000000b9`1acfdd10 000001d3`6cf35760 : 000001d3`2fda9640 000001d3`045c9b30 : 0x000001d3`24c1fe20

000000b9`1acfdd18 000001d3`5a0e0ef0 : 000001d3`045c9b30 000001d3`2fcbb2b0 : 0x000001d3`6cf35760

000000b9`1acfdd20 00000000`00000000 : 000001d3`2fcbb2b0 000001d3`2fcbb318 : 0x000001d3`5a0e0ef0

. . .

из которого единственное что понятно, так это то, что падение Excel происходит в недрах функций библиотеки vbe7.dll (среда исполнения VBA), подгруженной в адресное пространство процесса. Это указывает на проблемы с обработчиком VBA-скриптов, в контексте Excel чаще именуемых макросами.

НЕРЕШЕННОЕ: при отладке приложений из комплекта MS Office, вы не увидите имен функций в стеке вызовов, поскольку отсутствуют отладочные символы как к основным исполняемым файлам (Excel/Word/Outlook), так и к многочисленным библиотекам. Интересно, есть ли какое-либо решение?

VBA

Так что же такое VBA и для чего он предназначается?

VBA (Visual Basic for Application) — язык макропрограммирования, основанный на языке Visual Basic.

В приложениях, входящих в комплект MS Office, таких как Excel, Word, PowerPoint и Access, VBA используется для автоматизации множества рутинных задач (напр.: повторяющихся однотипных действий), позволяет создавать формы для общения с пользователем и предлагает множество иного богатого функционала. При помощи VBA доступно управление электронной таблицей посредством объектно-ориентированной модели кода/данных, при помощи VBA-кода входные данные таблиц могут быть обработаны и представлены в итоговых (результирующих) таблицах и диаграммах (графиках). Таблица становится интерфейсом кода, позволяя легко работать, изменять его и управлять расчётами. На выходе VBA проект, используемый в структурах описанных выше приложений (электронные таблицы Excel, презентации PowerPoint, базы Access), компилируется в специальный бинарный исполняемый файл, который размещается внутри файла основного формата. Применительно к Excel это файл vbaProject.bin, который располагается внутри *.xslm-файла в директории /xl, представляющий собой бинарный исполняемый файл проекта, содержащий макрос в откомпилированном (готовом к исполнению) виде.

Наиболее вероятной причиной сбоя является повреждение блока кода VBA, содержащегося в книге Excel. Об истоках этого остается только догадываться, возможно что в структуре .xlsm-файла, в процессе работы с документом, происходят какие-то [непредвиденные разработчиками] изменения, способные приводить блок кода в неработоспособное состояние.

Решение 1: вставка нового листа

Выполните приведенную последовательность действий:

  1. Открываем [проблемный] .xlsm-файл (файл с макросами).
  2. Не нажимаем кнопку Включить содержимое.
  3. Добавляем в книгу Excel новый лист: правая кнопка мыши на ярлыках Лист1/Лист2/Лист3 → ВставитьЛист.
  4. Сохраняем электронную таблицу. Закрываем Excel.
  5. Открываем проблемный файл заново и включаем макросы.

Решение 2: перекомпиляция проекта

Выполните последовательность действий:

  1. Запускаем и открываем новую книгу Excel (не ваш проблемный файл).
  2. Открываем меню Файл — выбираем Параметры — далее открываем Центр управления безопасностью и заходим в Параметры центра управления безопасностью.
  3. В разделе Параметры макросов — выставляем чекбокс Отключить все макросы с уведомлением.
  4. В разделе Надежные расположения — выставляем чекбокс Отключить все надежные расположения.
  5. В разделе Надежные документы — выставляем чекбокс Отключить надежные документы.
  6. Жмем везде OK. Закрываем Excel.

  7. Открываем [проблемный] .xlsm-файл (файл с макросами).
  8. Не нажимаем кнопку Включить содержимое.
  9. Открывает редактор Visual Basic при помощи комбинации клавиш Alt+F11. Либо можно использовать обходной маневр: в настройках включаем меню Разработчик, после этого в появившемся сверху в ленте меню Разработчик выбираем пункт Visual Basic.
  10. В открывшемся окне редактора Visual Basic (VBA редактор) пересохраняем проект: для этого жмем на панели инструментов кнопку Сохранить (изображение дискетки или комбинация Ctrl+S).
  11. Выбираем из меню Debug — выбираем пункт меню Compile VBA Project:

    recompile vba project

  12. Еще раз сохраняем проект кнопкой Сохранить.
  13. Закрываем редактор Visual Basic.

  14. Сохраняем файл Excel через меню Файл — опцию Сохранить (или нажатием на значок дискетки в левом верхнем углу, либо комбинация клавиш Ctrl+S).
  15. Возвращаем все установки безопасности, сделанные на предыдущих шагах (пункты 2-5).
  16. Закрываем xlsm-файл.
  17. Заново открываем [проблемный] файл, в верхней части, в строке статуса — включаем макросы посредством кнопки Включить содержимое.

Решение 3: добавление модуля

Дополнительное решение состоит в том, что бы внести изменения в макрос без перекомпиляции.

  1. Открываем [проблемный] .xlsm-файл (файл с макросами).
  2. Не нажимаем кнопку Включить содержимое.
  3. Открывает редактор Visual Basic (при помощи комбинации клавиш Alt+F11).
  4. Открываем меню Tools → пункт Options. В открывшемся окне переходим на вкладку General и деактивируем чекбокс Compile on Demand:

    compile on demand

    Закрываем окно Опции нажатием клавиши OK.

  5. В левом фрейме окна проекта (Project) спускаемся вниз, находим раздел Modules, жмем на нём правую кнопку → пункт InsertModule:

    vba insert module

  6. Далее просто закрываем окно редактора Visual Basic, сохраняем основной xslm-документ и закрываем Excel.
  7. Заново открываем [проблемный] файл, в верхней части, в строке статуса — включаем макросы посредством кнопки Включить содержимое.

При выполнении макросов 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 (на английском).

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

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

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

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

Типы ошибок

Существуют три типа ошибок в программе:

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

Инструкция On Error

Ошибки времени выполнения можно перехватывать внутри подпрограммы. Для этого используется инструкция On Error, которая имеет три формата:

  • On Error GoTo <Метка> — при возникновении ошибки управление передается инструкции, помеченной меткой <Метка>. Метка должна быть допустимым идентификатором, к которому предъявляются такие же требования как и к переменным. Внутри подпрограммы метка указывается в самом начале помечаемой строки и после метки ставится двоеточие. В качестве примера создадим функцию для деления двух целых чисел. Внутри функции предусмотрим обработку ошибки деления на 0:
Function Деление(x As Integer, y As Integer) As Double
   On Error GoTo ПриОшибке
   Деление = x / y
   Exit Function
ПриОшибке:
   Деление = 0
End Function

Если при вызове функции во втором параметре передать значение 0, то управление будет передано в строку, помеченную с помощью метки ПриОшибке. Обратите внимание на то, что метка расположена после инструкции Exit Function. В этом случае код после инструкции Exit Function будет выполнен только в том случае, если возникнет ошибка;

  • On Error Resume Next — при возникновении ошибки управление передается следующей инструкции;
  • On Error GoTo 0 — отключает перехват ошибок.

Если внутри подпрограммы не предусмотрен перехват ошибки, то при возникновении ошибки работа программы прерывается и выводится стандартное окно с описанием и несколькими кнопками: Continue (продолжить), End (завершить выполнение программы), Debug (перейти в режим отладки) и Help (вывод справки).

Инструкция Resume

Инструкция Resume позволяет указать куда следует переходить после обработки ошибки. Инструкция имеет несколько форматов:

  • Resume [0] — управление передается инструкции, вызвавшей ошибку;
  • Resume Next — управление передается инструкции, следующей за инструкцией, вызвавшей ошибку;
  • Resume <Метка> — управление передается инструкции, помеченной меткой <Метка>.

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

Получение информации об ошибке и генерация ошибки

Вся информация о последней ошибке доступна через объект Err. Объект содержит следующие свойства:

  • Number — код ошибки, например, код 11 для ошибки деления на 0. Если ошибки не произошло, то свойство содержит значение 0;
  • Description — описание ошибки, например, строка "Division by zero" для ошибки деления на 0. Пример вывода кода и описания ошибки:
Debug.Print Err.Number; Err.Description
  • Source — название текущего проекта;
  • HelpFile — путь к файлу справки;
  • HelpContext — идентификатор раздела в справочном файле;
  • LastDLLError — системный код ошибки при работе с DLL.

Объект Err содержит следующие методы:

  • Clear() — очищает всю информацию о последней ошибке. Этот метод следует вызвать после успешной обработки ошибки. Информация об ошибке автоматически очищается при выходе из подпрограммы и ряде других случаев;
  • Raise() — позволяет сгенерировать ошибку в программе. Формат метода:
Raise Number[, Source][, Description][, HelpFile][, HelpContext]

В параметре Number указывается код генерируемой ошибки (целое число от 0 до 65 535). Коды от 0 до 512 зарезервированы под системные ошибки, а остальные коды можно использовать под пользовательские ошибки. Чтобы сгенерировать ошибку с пользовательским кодом необходимо сложить код с константой vbObjectError. Остальные параметры являются необязательными и полностью аналогичны одноименным свойствам объекта Err. Пример генерации и обработки пользовательской ошибки:

Sub ГенерацияОшибки()
   On Error GoTo ПриОшибке
   Err.Raise vbObjectError + 513
   Exit Sub
ПриОшибке:
   Debug.Print Err.Number; Err.Description
   ' -2147220991 Automation error
End Sub

Способы поиска ошибок в программе

В предыдущих разделах мы научились обрабатывать ошибки времени выполнения. Однако, наибольшее количество времени программист затрачивает на другой тип ошибок — логические ошибки. В этом случае программа компилируется без ошибок, но результат выполнения программы не соответствует ожидаемому результату. Ситуация еще более осложняется, когда неверный результат проявляется лишь периодически, а не постоянно. Инсценировать такую же ситуацию, чтобы получить этот же неверный результат, бывает крайне сложно и занимает очень много времени. В этом разделе мы рассмотрим лишь «дедовские» (но по прежнему актуальные) способы поиска ошибок, а современные способы отладки приложений, доступные в VBA, изучим в следующем разделе.

Первое, на что следует обратить внимание, — на объявления переменных. Например, рассмотрим простой пример:

Как вы думаете, какое значение отобразится в окне Immediate после выполнения этого кода? Думаете, что число 10? Не факт! Вот тут-то и кроется проблема не видная на первый взгляд. В первой инструкции присваивается значение переменной x, имя которой набрано на английской раскладке клавиатуры, а вот во второй инструкции выводится значение переменной x, имя которой набрано на русской раскладке клавиатуры. В результате значение присваивается одной переменной, а выводится значение другой переменной. Такие ситуации очень часто встречаются в программах на языке VBA, так как объявлять переменную не обязательно. Чтобы избежать такой ситуации следует обязательно объявлять переменные явным образом. Контроль за соблюдением этого правила можно возложить на компилятор, добавив в начале модуля следующую инструкцию:

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

Option Explicit
...
Dim x As Integer
x = 10
Debug.Print x ' 10

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

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

Dim Массив As Variant, i As Integer, j As Integer
Массив = Array(Array(0, 1), Array(2, 3), Array(4, 5))
For i = 0 To 2
   For j = 0 To 1
      Debug.Print Массив(i)(j)
   Next
Next

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

Если программа слишком большая, то следует задуматься о разделении программы на отдельные подпрограммы или классы, которые выполняют логически законченные действия. Помните, что отлаживать отдельную подпрограмму гораздо легче, чем «спагетти»-код. Причем прежде чем вставить подпрограмму (или класс) в основную программу ее следует протестировать в отдельном проекте, передавая подпрограмме различные значения и проверяя результат ее выполнения.

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

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

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

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

Проверить значение константы позволяет следующая конструкция:

#If MY_DEBUG Then
   ' Здесь размещаем инструкции вывода значений
#End If

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

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

Прежде чем начать отладку необходимо пометить строки внутри программы с помощью точек останова. Для добавления точки останова делаем строку активной, а затем из меню Debug выбираем пункт Toggle Breakpoint. Слева от строки появится кружок, обозначающий точку останова. Добавить точку останова можно еще быстрее. Для этого достаточно щелкнуть слева от строки левой кнопкой мыши. Повторный щелчок позволяет удалить точку останова. Кроме того, для добавления или удаления точки отстанова можно воспользоваться клавишей <F9>. Чтобы удалить все точки останова следует из меню View выбрать пункт Clear All Breakpoints.

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

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

При отладке можно контролировать значения отдельных переменных, а не всех сразу. Для этого следует выделить название переменной и из меню Debug выбрать пункт Add Watch. Можно также выделить название переменной и из контектного меню выбрать пункт Add Watch. В открывшемся окне устанавливаем флажок Watch Expression и нажимаем кнопку OK. Значение переменной будет отображаться в окне Watches. Чтобы отобразить окно Watches из меню View выбираем пункт Watch Window. Чтобы отменить отслеживание нужно выделить строку в окне Watches и нажать клавишу <Delete>.

Для пошагового выполнения программы предназначены следующие пункты в меню Debug или соответствующие кнопки на панели инструментов Debug (View | Toolbars | Debug):

  • Step Into (клавиша <F8>) — выполняет переход к следующей инструкции;
  • Step Over — выполняет одну инструкцию. Если в этой инструкции производится вызов подпрограммы, то подпрограмма выполняется за один шаг и отладчик переходит в режим ожидания после выхода из подпрограммы;
  • Step Out — при заходе в подпрограмму этот пункт позволяет выполнить подпрограмму за один шаг и выйти из нее. Отладчик переходит в режим прерывания после выхода из подпрограммы;
  • Run To Cursor — выполняет переход к инструкции, в которой расположен курсор.

Если необходимо посмотреть последовательность вызова подпрограмм, то следует открыть окно Call Stack, выбрав в меню View пункт Call Stack.

Подача звукового сигнала

При возникновении ошибки или при неправильном вводе данных имеет смысл привлечь внимание пользователя звуковым сигналом. Сгенерировать звуковой сигнал позволяет инструкция Beep. Пример:

Dim Результат
Beep
Результат = InputBox("Необходимо ввести значение")

Visual Basic for Applications (VBA)
Статьи по Visual Basic for Applications (VBA)

№ На английском языке На русском языке 3 Return without GoSub Инструкция Return без GoSub 5 Invalid procedure call Недопустимый вызов процедуры 6 Overflow Переполнение 7 Out of memory Недостаточно памяти 9 Subscript out of range Индекс вне заданного диапазона 10 This array is fixed or temporarily locked Этот массив имеет фиксированную длину или он временно заблокирован 11 Division by zero Деление на 0 13 Type mismatch Несоответствие типа 14 Out of string space Недостаточно памяти для строки 16 Expression too complex Выражение слишком сложное 17 Can’t perform requested operation Невозможно выполнить требуемую операцию 18 User interrupt occurred Выполнение прервано пользователем. 20 Resume without error Оператор Resume применен за пределами кода, отвечающего за обработку ошибки 28 Out of stack space В стеке не хватает памяти 35 Sub, Function, or Property not defined Процедура типа Sub, Function или Property не определена 47 Too many DLL application clients Слишком много приложений обращаются к DLL 48 Error in loading DLL Ошибка при загрузке DLL 49 Bad DLL calling convention Неправильное соглашение о вызове DLL 51 Internal error Внутренняя ошибка 52 Bad file name or number Неправильное имя или номер файла 53 File not found Файл не найден 54 Bad file mode Неправильный режим файла 55 File already open Файл уже открыт 57 Device I/O error Ошибка устройства ввода/вывода 58 File already exists Файл уже существует 59 Bad record length Неправильная длина записи 61 Disk ftill Переполнение диска 62 Input past end of file Ввод за меткой конца файла 63 Bad record number Неправильный номер записи 67 Too many files Слишком много файлов 68 Device unavailable Устройство недоступно 70 Permission denied Доступ запрещен 71 Disk not ready Диск не готов 74 Can’t rename with different drive Невозможно переименование с другим именем диска файл 75 Path/File access error Ошибка при доступе файлу/каталогу 76 Path not found Путь определен неверно 91 Object variable or With block variable not set Переменная объекта или переменная блока With не задана 92 For loop not initialized Цикл For не инициализирован 93 Invalid pattern string Неправильный шаблон строки 94 Invalid use of Null Недопустимое использование Null 260 No timer available Ни один таймер недоступен 282 No foreign application responded to a DDE initiate Ни одно внешнее приложение не ответило на инициативу DDE 285 Foreign application won’t perform DDE method or operation Внешнее приложение не может выполнить метод или операцию DDE 286 Timeout while waiting for DDE response Простой при ожидании ответа DDE 287 User pressed Escape key during DDE ope ratio Во время операции DDE пользователь нажал клавишу [Esc] 288 Destination is busy Адресат занят 290 Data in wrong format Неправильный формат данных 293 DDE Method invoked with no channel open Метод DDE вызван без открытого канала 294 Invalid DDE Link format Недопустимый формат данных в DDE-диалоге 296 PasteLink already performed on this control PasteLink для этого элемента управления уже выполнен 297 «Can’t set LinkMode; invalid LinkTopic» «Нельзя установить LinkMode; неправильный LinkTopic» 298 System DLL ‘dll’ could not be loaded Системная DLL не может быть загружена 320 Can’t use character device names in specified file names Нельзя использовать имя устройства в определении имени файла 321 Invalid file format Недопустимый формат файла 325 Invalid format in resource file Недопустимый формат файла ресурсов 326 Resource with identifier ‘item’ not found Ресурс с идентификатором ‘имя’ не найден 335 Could not access system registry Доступ к системному реестру невозможен 336 ActiveX component not correctly registered Компонент ActiveX зарегистрирован неправильно 337 ActiveX component not found Компонент ActiveX не найден 338 ActiveX component did not run correctly Компонент ActiveX не может быть корректно выполнен 340 Control array element ‘item’ doesn’t exist Элемент управления ‘имя’ не найден 341 Invalid control array index Недопустимый индекс массива элементов управления 342 Not enough room to allocate control array ‘item’ Недостаточно памяти для создания элемента управления ‘имя’ 343 Object not an array Объект не является массивом 344 Must specify index for object array Необходимо указать индекс массива объектов 345 Reached limit: cannot create any more controls on this form Достигнута верхняя граница: нельзя создать больше ни одного элемента управления в этой форме 360 Object already loaded Объект уже загружен 361 Can’t load or unload this object Невозможно загрузить или выгрузить данный объект 362 Can’t unload controls created at design time Нельзя выгрузить элементы управления 363 ActiveX control specified not found Элемент управления ActiveX не найден 364 Object was unloaded Объект был выгружен 365 Unable to unload within this context Нет возможности в данном контексте произвести выгрузку 366 No MDI form available to load Форма, не определенная как MDI, не может быть загружена 380 Invalid property value Недопустимое значение свойства 381 Invalid property-array index Недопустимый индекс массива свойств 382 Property Set can’t be executed at : time Инструкция Property Set не может использоваться во время выполнения 383 Property Set can’t be used with a read-only property Инструкция Property Set не поддерживается (свойство доступно только для чтения) 384 A form can’t be moved or sized while minimized or maximized Если форма максимизирована или минимизирована, ее нельзя переместить или изменить ее размер 385 Need property-array index Для массива свойств надо указать индекс 387 Property Set not permitted Применение Property Set не разрешено 388 Can’t set Visible property from a parent menu Для команды подменю нельзя установить свойство Visible из программного кода, относящегося к обработке команд родительского меню 389 Invalid key Нажата недопустимая клавиша 393 Property Get can’t be executed at run time Инструкция Property Get не поддерживается во время выполнения 394 Property Get can’t be executed on write- only property Инструкция Property Get не поддерживается (свойство доступно только для записи) 395 Cannot use separator bar as menu name for this Разделительная линия не может использоваться как имя команды меню 396 ‘Item’ property cannot be set within a page Свойство ‘имя’ нельзя установить для страницы (объект Printer) 397 Can’t load, unload, or set Visible property for top level menus while they are merged Свойство Visible нельзя устанавливать пока элемент управления типа меню находится в контейнере формы 400 «Form already displayed; can’t show modally» Форма уже отображена, ее нельзя отобразить как модальную 401 Can’t show non-modal form when modal form is displayed Немодальную форму нельзя отобразить одновременно с модальной 402 Must close or hide topmost modal form first Сначала необходимо закрыть верхнюю модальную форму 403 MDI forms cannot be shown modally MDI-формы не могут быть отображены как модальные 404 MDI child forms cannot be shown modally Дочерние MDI-формы формы не мо- гут быть отображены модальными 419 Permission to use object denied Использование объекта запрещено 423 Property or method not found Свойство или метод не найдены 424 Object required Требуется объект 426 Only one MDI Form allowed Допустима только одна форма MDI 427 «Invalid object type; Menu control required» «Недопустимый тип объекта; требуется элемент управления типа «»меню» 428 Popup menu must have at least one submenu Всплывающее меню должно иметь хотя бы один элемент 429 ActiveX component can’t create object or return reference to this object Невозможно создание объекта или возвращение ссылки на этот объект компонентом ActiveX 430 Class doesn’t support Automation Класс не поддерживает программирование объектов 432 File name or class name not found during Automation operation Не найдено имя файла или класса при программировании объектов 438 Object doesn’t support this property or method Объект не поддерживает это свойство или метод 440 Automation error Ошибка программирования объектов 443 Automation object doesn’t have a default value Программируемый объект не имеет значения по умолчанию 444 Method not applicable in this context Метод в этом контексте недоступен 445 Object doesn’t support this action Эта команда не поддерживается указанным объектом 446 Object doesn’t support named arguments Именованные аргументы не поддерживаются указанным объектом 447 Object doesn’t support current locale setting Объект не поддерживает текущие национальные стандарты 448 Named argument not found Именованный аргумент не найден 449 Argument not optional Аргумент обязателен 450 Wrong number of arguments Неправильное количество аргументов 451 Object not a collection Объект не является коллекцией 452 Invalid ordinal Недопустимый порядковый номер 453 Specified DLL function not found Указанная функция DLL не найдена 457 This key is already associated with an element of this collection Запись уже связана с элементом данной коллекции 460 Invalid Clipboard format Недопустимый формат буфера обмена 461 Specified format doesn’t match format of data Указанный формат не соответствует формату данных 480 Can’t create AutoRedraw image Нельзя создать автоматически восстанавливаемое изображение 481 Invalid picture Недопустимый рисунок 482 Printer error Ошибка принтера 483 Printer driver does not support specified property Драйвер принтера не поддерживает указанное свойство 484 Problem getting printer information from the system. Make sure the printer is set up correctly Проблемы с получением системной информации. Проверьте правильность установок принтера 485 Invalid picture type Недопустимый тип рисунка 520 Can’t empty Clipboard Нельзя очистить буфер обмена 521 Can’t open Clipboard Нельзя открыть буфер обмена 2420 Syntax error in number Число содержит синтаксическую ошибку 2421 Syntax error in date Дата содержит синтаксическую ошибку 2422 Syntax error in string Строка содержит синтаксическую ошибку 2423 Invalid use of’.’, ‘!’, or ‘()’ Недопустимое использование ‘.’, ‘!’ или ‘()’ 2424 Unknown name Неизвестное имя 2425 Unknown function name Неизвестное имя функции 2426 Function isn’t available in expressions Функция недоступна в выражениях 2427 Object has no value Объект не имеет значения 2428 Invalid arguments used with domain function Недопустимые аргументы статистической функции по подмножеству 2429 In operator without () Оператор In требует наличия скобок: () 2430 Between operator without And За оператором Between отсутствует оператор And 2431 Syntax error (missing operator) Ошибка синтаксиса (отсутствует оператор) 2432 Syntax error (comma) Ошибка синтаксиса (запятая) 2433 Syntax error Ошибка синтаксиса 2434 Syntax error (missing operator) Ошибка синтаксиса (отсутствует оператор) 2435 Extra ) Непарная правая скобка: ) 2436 Missing ), ], or Item Отсутствует ), ] или элемент 2437 Invalid use of vertical bars Недопустимое использование символов вертикальной черты 2438 Syntax error Ошибка синтаксиса 2439 Wrong number of arguments used with function Неверное число аргументов функции 2440 IIF function without () Требуются скобки после функции IIF:() 2442 Invalid use of parentheses Недопустимое использование скобок 2443 Invalid use of Is operator Недопустимое использование оператора Is 2445 Expression too complex Слишком сложное выражение 2446 Out of memory during calculation Недостаточно памяти при вычислениях 2447 Invalid use of’.’, ‘!’, or ‘()’ Недопустимое использование ‘.’, ‘!’ или ‘()’ 2448 Can’t set value Не удается задать значение 3000 «Reserved error <Item>;» Зарезервированная ошибка элемента 3001 Invalid argument Ошибочный аргумент 3002 Couldn’t start session Запуск сеанса невозможен 3003 «Couldn’t start transaction;» Транзакция не может быть запущена 3005 < Database name> isn’t a valid database name Имя базы данных не является допустимым именем базы данных 3006 Database <name> is exclusively locked Для базы данных <name> установлен монопольный доступ 3007 Can’t open library database <name> Не удается открыть библиотечную базу данных <name> 3008 The table <name> is already opened exclusively by another user, or it is already open through the user interface and cannot be manipulated program Таблица <name> уже открыта другим пользователем для монопольного доступа или открыта в интерактивном режиме и не может быть изменена в программе 3009 You tried to lock a table while opening it, but the table can’t be locked because it is currently in use. Wait a moment, and then try the operation again «Не удается блокировать таблицу<name> при открытии; она в данное время используется. Подождите немного и повторите операцию» 3010 Table <name> already exists Таблица <name> уже существует 3011 The Microsoft Jet database engine could not find the object <name>. Make sure the object exists and that you spell its name and the path name correctly Объект <name> не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути 3012 Object <name> already exists Объект <name> уже существует 3013 Couldn’t rename installable ISAM file Не удается переименовать файл устанавливаемого драйвера ISAM 3014 Can’t open any more tables Открытие большего числа таблиц невозможно 3015 <Index name > isn’t an index in this table. Look in the Indexes collection of the TableDef object to determine the valid index names <Index name > не является индексом данной таблицы. Для определения допустимых имен индексов просмотрите семейство Indexes объекта TableDef 3016 Field won’t fit in record Поле не помещается в записи 3017 The size of a field is too long Слишком большая длина поля 3018 Couldn’t find field <name> Не удается найти поле <name> 3019 Operation invalid without a current index Недопустимая операция без текущего индекса 3020 Update or CancelUpdate without Попытка вызвать метод Update или 3021 No current record Текущая запись отсутствует 3022 The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index Изменения не были успешно завершены из-за повторяющихся значений в индексе, ключевых полях или связях. Измените, данные в поле или полях, содержащих повторяющиеся значения, удалите индекс или переопределите его, чтобы разрешить повторяющиеся значения 3023 AddNew or Edit already used Методы AddNew или Edit уже используются 3024 Couldn’t find file <name> Не удается найти файл <name> 3025 Can’t open any more files Открытие дополнительных файлов невозможно 3026 Not enough space on disk Недостаточно места на диске 3027 Can’t update. Database or object is read-only Обновление невозможно. База данных или объект доступны только для чтения 3028 Can’t start your application. The workgroup information file is missing or opened exclusively by another user Не удается запустить приложение. Системная база данных отсутствует или открыта с монопольным доступом другим пользователем 3029 Not a valid account name or password Недопустимое имя учетной записи или пароль 3030 <Account name> isn’t a valid account name <Account name> не является допустимым именем учетной записи 3031 Not a valid password Неверный пароль 3032 Can’t perform this operation Невозможно выполнение данной операции. 3033 You don’t have the necessary permissions to use the <name> object. Have your system administrator or the person who created this object establish the appropriate permissions for you Отсутствуют разрешения на использование объекта <name>. Необходимые разрешения должны быть предоставлены системным администратором или пользователем, создавшим объект 3034 You tried to commit or roll back a transaction without first using Begin- Trans Попытка занесения или свертывания транзакции без предварительного вызова BeginTrans 3036 Database has reached maximum size Достигнут максимальный размер базы данных 3037 Can’t open any more tables or queries Открытие дополнительных таблиц или запросов невозможно 3039 «Couldn’t create index; too many indexes already defined» «Не удается создать индекс; уже определено слишком много индексов» 3040 Disk I/O error during read Ошибка ввода/вывода при чтении диска 3041 Can’t open a database created with a previous version of your application Не удается открыть базу данных, созданную в предыдущей версии приложения 3042 Out of MS-DOS file handles Не хватает дескрипторов файлов MS-DOS 3043 Disk or network error Дисковая или сетевая ошибка 3044 <Path> isn’t a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides Строка <Path> задает ошибочный путь. Проверьте, что путь задан правильно и имеется подключение к серверу, на котором находятся файлы 3045 «Couldn’t use <name>; file already in use» «Невозможно использовать <name>; файл уже используется» 3046 «Couldn’t save; currently locked by another user» «Сохранение невозможно; блокировка другим пользователем» 3047 Record is too large Слишком большая длина записи 3048 Can’t open any more databases Открытие дополнительных баз данных невозможно 3049 Can’t open database <name>. It may not be a database that your application recognizes, or the file may be corrupt Открытие базы данных <name> невозможно. Вероятно, это не база данных приложения пользователя, или ее файл поврежден 3051 The Microsoft Jet database engine cannot open the file <name>. It is already opened exclusively by another user, or you need permission to view its data Файл <name> не может быть открыт ядром базы данных Microsoft Jet. Файл уже открыт другим пользователем для монопольного доступа или требуется разрешение на просмотр данных 3052 MS-DOS file sharing lock count exceeded. You need to increase the number of locks installed with SHARE.EXE Достигнуто максимальное число блокировок файлов общего доступа MS- DOS. Необходимо увеличить число блокировок, установленных при запуске файла SHARE.EXE 3053 Too many client tasks Запущено слишком много задач- клиентов 3054 Too many Memo or OLE Object fields Слишком много полей Memo или объектов ActiveX 3055 Not a valid file name Недопустимое имя файла 3056 Couldn’t repair this database Не удается восстановить эту базу данных 3057 Operation not supported on linked tables Невозможно выполнение данной операции для присоединенных или связанных таблиц 3058 Index or primary key can’t contain a Null value Индекс или ключ не может содержать пустое значение (Null) 3059 Operation canceled by user Операция прервана пользователем 3060 Wrong data type for parameter<parameter> Недопустимый тип данных для параметра <parameter> 3061 Too few parameters. Expected <number> Слишком мало параметров. Требуется <number> 3062 Duplicate output alias <name> Повторение выходного псевдонима<name> 3063 Duplicate output destination <name> Повторение получателя <name> 3064 Can’t open action query <name> Не удается открыть запрос на изменение <name> 3065 Can’t execute a select query Невозможен запуск запроса на выборку 3066 Query must have at least one destination field Запрос должен иметь хотя бы одно поле для вывода 3067 Query input must contain at least one table or query В качестве входных данных запрос должен иметь хотя бы одну таблицу или запрос 3068 Not a valid alias name Недопустимое имя псевдонима 3069 The action query <name> cannot be used as a row source Не допускается применение запроса на изменение <name> в качестве источника строк 3070 The Microsoft Jet database engine does not recognize <name> as a valid field name or expression <name> не распознается ядром базы данных Microsoft Jet как допустимое имя поля или выражение 3071 This expression is typed incorrectly, or it is too complex to be evaluated. For example, a numeric expression may contain too many complicated elements. Try simplifying the expression by assigning parts of the expression to variables Выражение неверно введено или является слишком сложным для расчета. Например, числовое выражение может содержать слишком много элементов. Попытайтесь упростить выражение, определив его части как переменные 3073 Operation must use an updatable query В операции должен использоваться обновляемый запрос 3074 Can’t repeat table name <name> in FROM clause Невозможно повторение имени таблицы <name> в предложении FROM 3075 <Message> in query expression<expression> <Message> в выражении запроса<expression> 3076 <Name> in criteria expression <Name> в выражении для условия отбора 3077 <Message> in expression <Message> в выражении 3078 The Microsoft Jet database engine cannot find the input table or query<name>. Make sure it exists and that its name is spelled correctly Ядро базы данных Microsoft Jet не может найти входную таблицу или запрос <name>. Проверьте существование таблицы или запроса и правильность имени 3079 The specified field reference could refer to more than one table listed in the FROM clause of your SQL statement Ссылка на поле <пате> может относиться к полям нескольких таблиц, перечисленных в предложении FROM инструкции SQL 3080 Joined table <name> not listed in FROM clause Связанная таблица <name> отсутствует в предложении FROM 3081 Can’t join more than one table with the same name <name> Объединение не может содержать несколько таблиц с одинаковым именем <name> 3082 JOIN operation <operation> refers to a field that isn’t in one of the joined tables Операция JOIN <operation> содержит ссылку на несвязанную таблицу 3083 Can’t use internal report query Невозможно использование внутреннего запроса отчета 3084 Can’t insert data with action query Невозможно добавление данных с помощью запроса на изменение 3085 Undefined function <name> in expression Неопределенная функция <name> в выражении 3086 Couldn’t delete from specified tables Невозможно удаление записей из указанных таблиц 3087 Too many expressions in GROUP BY clause Слишком много выражений в предложении GROUP BY 3088 Too many expressions in ORDER BY clause Слишком много выражении в предложении ORDER BY 3089 Too many expressions in DISTINCT output Слишком много выражении в предложении DISTINCT 3090 Resultant table not allowed to have more than one AutoNumber field Результирующая таблица не должна иметь более одного поля счетчика 3092 Can’t use HAVING clause in TRANSFORM statement Нельзя использовать предложение HAVING в инструкции TRANS- FORM 3093 ORDER BY clause <clause> conflicts with DISTINCT Предложение ORDER BY <clause> конфликтует с DISTINCT 3094 ORDER BY clause <clause> conflicts with GROUP BY clause Предложение ORDER BY <clause> конфликтует с предложением GROUP BY 3095 Can’t have aggregate function in expression <expression> Невозможно использование статистической функции в выражении<expression> 3096 Can’t have aggregate function in WHERE clause <clause> Невозможно использование статистической функции в предложении WHERE <clause> 3097 Can’t have aggregate function in ORDER BY clause <clause> Невозможно использование статистической функции в предложении ORDER BY <clause> 3098 Can’t have aggregate function in GROUP BY clause <clause> Невозможно использование статистической функции в предложении GROUP BY <clause> 3099 Can’t have aggregate function in JOIN operation <operation> Невозможно использование статистической функции в операции JOIN <operation> 3100 Can’t set field <name> in join key to Null Для поля ключа связи <name> невозможно задание значения Null 3101 The Microsoft Jet database engine can’t find a record in the table <name> with key matching field(s) <name> В таблице <name> ядром базы данных Microsoft Jet не найдены записи с совпадающим ключевым полем<name> 3102 Circular reference caused by <query reference> Циклическая ссылка, связанная с<query reference> 3103 Circular reference caused by alias<name> in query definition’s SELECT list Псевдоним <name> из списка определений SELECT запроса привел к возникновению циклической ссылки 3104 Can’t specify fixed column heading<value> in a crosstab query more than once Невозможно более одного раза задать заголовок столбца <value> перекрестного запроса 3105 Missing destination field name in SELECT INTO statement <statement> В инструкции SELECT INTO <statement> пропущено имя результирующего поля 3106 Missing destination field name in UPDATE statement <statement> В инструкции UPDATE <statement пропущено имя результирующего поля 3107 «Record(s) can’t be added; no insert permission on <name>» «Записи не могут быть добавлены; отсутствует разрешение на вставку данных для объекта <name>» 3108 «Record(s) can’t be edited; no update permission on <name>» «Записи не могут быть изменены; отсутствует разрешение на обновление данных для объекта <name>» 3109 «Record(s) can’t be deleted; no delete permission on <name>» «Записи не могут быть удалены; отсутствует разрешение на удаление данных для объекта <name>» 3110 «Couldn’t read definitions; no read definitions permission for table or query<name>» «Не удается прочитать описания; отсутствует разрешение на чтение описания для объекта <name>» 3111 «Couldn’t create; no modify design permission for table or query <name>» «Создание невозможно; отсутствует разрешение на изменение макета для таблицы или запроса <name>» 3112 «Record(s) can’t be read; no read permission on <name>» «Записи не могут быть прочитаны; отсутствует разрешение на чтение данных для <name>» 3113 «Can’t update <field name>; field not updatable» «Невозможно обновить поле <field name>; не обновляемое поле» 3114 Can’t include Memo or OLE Object when you select unique values <statement> При отборе уникальных значений в<statement> нельзя использовать поле Memo или объекта ActiveX 3115 Can’t have Memo or OLE Object fields in aggregate aigument <statement> Поле Memo или объекта ActiveX не может присутствовать в аргументе статистической функции в <statement> 3116 Can’t have Memo or OLE Object fields in criteria <criteria> for aggregate function Поле Memo или объекта ActiveX не может присутствовать в условии отбора <criteria> для статистической функции 3117 Can’t sort on Memo or OLE Object<clause> Невозможна сортировка по полю Memo или объекта ActiveX в <clause> 3118 Can’t join on Memo or OLE Object<name> Невозможно объединение с полем Memo или объекта ActiveX <name> 3119 Can’t group on Memo or OLE Object<clause> Невозможна группировка по полю Memo или объекта ActiveX в <clause> 3120 Can’t group on fields selected with ‘*'»table name» Невозможна группировка по полям, выбранным с помощью символа ‘*'<table name> 3121 Can’t group on fields selected with ‘*’ Невозможна группировка по полям, выбранным с помощью символа ‘*’ 3122 You tried to execute a query that doesn’t include the specified expression <name> as part of an aggregate function Попытка выполнить запрос, который не включает указанное выражение <name> как часть статистической функции или группы 3123 Can’t use ‘*’ in crosstab query Невозможно использование символа ‘*’ в перекрестном запросе 3124 Can’t input from internal report query<name> Невозможен ввод из внутреннего запроса отчета <name> 3125 The database engine can’t find <name>. Make sure it is a valid parameter or alias name, that it doesn’t include invalid characters or punctuation, and that the name isn’t too long <Name> не найдено ядром базы данных. Проверьте, что оно представляет допустимый параметр или псевдоним, не содержит недопустимые символы или знаки препинания, а также не является слишком длинным 3126 Invalid bracketing of name <name> Недопустимое использование скобок с именем <name> 3127 The INSERT INTO statement contains the following unknown field name: <field name>. Make sure you’ve typed the name correctly, and try the ope- ration again Инструкция INSERT INTO содержит неизвестное имя <field name>. Проверьте, что имя задано без ошибок, и повторите операцию 3128 Specify the table containing the records you want to delete Необходимо указать таблицу, содержащую удаляемые записи 3129 «Invalid SQL statement; expected DE- LETE, INSERT, PROCEDURE, SE- LECT, or UPDATE» «Ошибочная инструкция SQL; предполагалось DELETE, INSERT, PRO- CEDURE, SELECT или UPDATE» 3130 Syntax error in DELETE statement Ошибка синтаксиса в инструкции DELETE 3131 Syntax error in FROM clause Ошибка синтаксиса в предложении FROM 3132 Syntax error in GROUP BY clause Ошибка синтаксиса в предложении GROUP BY 3133 Syntax error in HAVING clause Ошибка синтаксиса в предложении HAVING 3134 Syntax error in INSERT INTO statement Ошибка синтаксиса в инструкции INSERT INTO 3135 Syntax error in JOIN operation Ошибка синтаксиса в операции JOIN 3136 The LEVEL clause includes a reserved word or argument that is misspelled or missing, or the punctuation is incorrect Ошибочное или пропущенное зарезервированное слово или аргумент в предложении LEVEL или неверная пунктуация 3138 Syntax error in ORDER BY clause Ошибка синтаксиса в предложении ORDER BY 3139 Syntax error in PARAMETER clause Ошибка синтаксиса в предложении PARAMETER 3140 Syntax error in PROCEDURE clause Ошибка синтаксиса в предложении PROCEDURE 3141 The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect Ошибочное или пропущенное зарезервированное слово или аргумент в инструкции SELECT или неверная пунктуация 3143 Syntax error in TRANSFORM statement Ошибка синтаксиса в инструкции TRANSFORM 3144 Syntax error in UPDATE statement Ошибка синтаксиса в инструкции UPDATE 3145 Syntax error in WHERE clause Ошибка синтаксиса в предложении WHERE 3146 ODBC — call failed ODBC — ошибка вызова 3151 ODBC — connection to <name> failed ODBC — ошибка подключения к<name> 3154 ODBC — couldn’t find DLL <name> ODBC — не удается найти DLL<name> 3155 ODBC — insert on a linked table failed ODBC — вставка для присоединенной (связанной) таблицы <name> не выполнена 3156 ODBC — delete on a linked table failed ODBC — удаление для присоединенной (связанной) таблицы не выполнено 3157 ODBC — update on a linked table failed ODBC — обновление для присоединенной (связанной) таблицы не выполнено 3158 «Couldn’t save record; currently locked by another user» «Сохранение записи невозможно; установлена блокировка другим пользователем» 3159 Not a valid bookmark Недопустимая закладка 3160 Table isn’t open Таблица не открыта 3161 Couldn’t decrypt file Не удается дешифровать файл 3162 You tried to assign the Null value to a variable that isn’t a Variant data type Попытка присвоить значение Null переменной, не принадлежащей к типу Variant 3163 The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data «Выполнение операции невозможно; объем данных велик для поля» 3164 The field can’t be updated because another user or process has locked the corresponding record or table Не удается обновить поле, поскольку соответствующая запись или таблица блокирована другим пользователем или процессом 3165 Couldn’t open .inf file Не удается открыть INF-файл 3166 Cannot locate the requested Xbase memo file Не удается найти затребованный файл Memo Xbase 3167 Record is deleted Запись удалена 3168 Invalid .inf file Недопустимый INF-файл 3169 The Microsoft Jet database engine could not execute the SQL statement because it contains a field that has an invalid data type Инструкция SQL не может быть выполнена ядром базы данных Microsoft Jet, так как содержит поле с недопустимым типом данных 3170 Couldn’t find installable ISAM Невозможно найти устанавливаемый драйвер ISAM 3171 Couldn’t find network path or user name Невозможно найти сетевой путь или имя пользователя 3172 Couldn’t open Paradox.net Невозможно открыть файл Paradox.net 3173 Couldn’t open table ‘MsysAccounts’ in Не удается открыть таблицу MsysAccounts 3174 Couldn’t open table ‘MSysGroups’ in the workgroup information file Не удается открыть таблицу MSysGroups в файле системной базы данных 3175 Date is out of range or is in an invalid format Дата выходит за пределы допустимого диапазона или имеет ошибочный формат 3176 Couldn’t open file <name> Не удается открыть файл <name> 3177 Not a valid table name Недопустимое имя таблицы 3179 Encountered unexpected end of file Обнаружен ошибочный конец файла 3180 Couldn’t write to file <name> Невозможна запись в файл <name> 3181 Invalid range Недопустимый диапазон 3182 Invalid file format Недопустимый формат файла 3183 Not enough space on temporary disk Недостаточно места на временном диске 3184 «Couldn’t execute query; couldn’t find linked table» «Выполнение запроса невозможно; не удается найти присоединенную (связанную) таблицу» 3185 SELECT INTO on a remote database tried to produce too many fields Инструкция SELECT INTO для удаленной базы данных осуществляет попытку создать слишком много полей 3186 «Couldn’t save; currently locked by user<name> on machine <name>» «Сохранение невозможно; блокировка пользователем <name> на машине <name>» 3187 «Couldn’t read; currently locked by user<name> on machine <name>» «Чтение невозможно; блокировка пользователем <name> на машине<name>» 3188 «Couldn’t update; currently locked by another session on this machine» «Обновление невозможно; блокировка другим сеансом данной машины» 3189 Table <name> is exclusively locked by user <name> on machine <name> Таблица <name> открыта с монопольным доступом пользователем<name> на машине <name> 3190 Too many fields defined Определено слишком много полей 3191 Can’t define field more than once Нельзя определить поле более одного раза 3192 Couldn’t find output table <name> Не удается найти выходную таблицу<name> 3196 The database <database name> is already in use by another person or proccess. When the database is available, try the operation again База данных <name> уже используется другим пользователем или процессом. Повторите операцию, когда база данных снова станет доступной 3197 The Microsoft Jet database engine stopped the process because you and another user are attempting to change the same data at the same time Процесс остановлен ядром базы данных Microsoft Jet, так как другой пользователь пытается одновременно изменить те же данные 3198 Couldn’t start session. Too many sessions already active Невозможно начать сеанс. Уже запущено слишком много сеансов 3199 Couldn’t find reference Не удается найти ссылку 3200 The record cannot be deleted or changed because table <name> includes related records Удаление или изменение записи невозможно. В таблице <name> имеются связанные записи 3201 You can’t add or change a record because a related record is required in table <name> Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице <name> 3202 «Couldn’t save; currently locked by another user» «Сохранение невозможно; блокировка другим пользователем» 3203 Subqueries cannot be used in the expression <expression> В выражении <expression> нельзя указывать подчиненный запрос 3204 Database already exists База данных уже существует 3205 Too many crosstab column headers<value> Слишком много заголовков столбцов <value> для перекрестной таблицы 3206 Can’t create a relationship between a field and itself Невозможно создать связь поля с этим же полем 3207 Operation not supported on a Paradox table with no primary key Операция не поддерживается для таблиц Paradox без ключевых полей 3208 Invalid Deleted setting in the Xbase key of the Windows Registry Недопустимое значение параметра Deleted в записи Xbase реестра Windows 3210 The connection string is too long Слишком длинная строка подключения 3211 The database engine couldn’t lock table<name> because it’s already in use by another person or process Таблица <name> не может быть заблокирована ядром базы данных. Она уже используется другим пользователем или процессом 3212 «Couldn’t lock table <name>; currently in use by user <name> on machine<name>» «Не удается блокировать таблицу<name>; она используется пользователем <name> на машине <name>» 3213 Invalid Date setting in the Xbase key of the Windows Registry Недопустимое значение параметра ‘Date’ в записи Xbase реестра Windows 3214 Invalid Mark setting in the Xbase key of the Windows Registry Недопустимое значение параметра ‘Mark’ в записи Xbase реестра Windows 3215 Too many Btrieve tasks Слишком много задач Btrieve 3216 Parameter <name> specified where a table name is required Параметр <name> задан вместо имени таблицы 3217 Parameter <name> specified where a database name is required Параметр <name> задан вместо имени базы данных 3218 «Couldn’t update; currently locked» «Обновление невозможно; установлена блокировка» 3219 Invalid operation Недопустимая операция 3220 Incorrect collating sequence Ошибочная таблица сортировки 3221 Invalid settings in the Btrieve key of the Windows Registry Недопустимые значения параметров в записи Btrieve реестра Windows 3222 Query can’t contain a Database parameter Запрос не может иметь параметр ‘База данных’ (Database) 3223 <Parameter name> is invalid because it’s longer than 64 characters or contains invalid characters Недопустимое имя параметра < Parameter name>, имеющее слишком большую длину или содержащее недопустимые символы 3224 Can’t read Btrieve data dictionary Невозможно прочитать словарь данных Btrieve 3225 Encountered a record locking deadlock while performing a Btrieve operation Данная блокировка записи накладывает условие взаимоблокировки при выполнении операции Btrieve 3226 Errors encountered while using the Btrieve DLL Ошибки при использовании библиотеки Btrieve 3227 Invalid Century setting in the Xbase key of the Windows Registry Недопустимое значение параметра Century в записи Xbase реестра Windows 3228 Invalid CollatingScqucnce setting in the Paradox key of the Windows Registry Недопустимое значение параметра CollatingScquence в записи Paradox реестра Windows 3229 Btrieve — can’t change field Btrieve — изменение значения поля невозможно 3230 Out-of-date Paradox lock file Устаревший файл блокировок Paradox 3231 «ODBC — field would be too long; data truncated» «ODBC — слишком большое поле; произошло усечение данных» 3232 ODBC — couldn’t create table ODBC — создание таблицы невозможно 3234 ODBC — remote query timeout expired ODBC — время ожидания для выполнения удаленного запроса истекло 3235 ODBC — data type not supported on server ODBC — тип данных не поддерживается сервером 3238 ODBC — data out of range ODBC — данные выходят за пределы допустимого диапазона 3239 Too many active users Слишком много пользователей 3240 Btrieve — missing Btrieve engine Btrieve — отсутствует ядро Btrieve 3241 Btrieve — out of resources Btrieve — недостаток ресурсов 3242 Invalid reference in SELECT statement Недопустимая ссылка в инструкции SELECT 3243 None of the import field names match fields in the appended table Ни одно из имен импортируемых полей не совпадает с именами полей таблицы-получателя 3244 Can’t import password-protected spreadsheet Невозможен импорт электронной таблицы, защищенной паролем 3245 Couldn’t parse field names from the first row of the import table Невозможно выделить имена полей из первой строки, импортируемой таблицы 3246 Operation not supported in transactions Операция не поддерживается в транзакциях 3247 ODBC — linked table definition has changed ODBC — было изменено описание связанной таблицы 3248 Invalid NetworkAccess setting in the Windows Registry Недопустимое значение параметра NetworkAccess в записи реестра Windows 3249 Invalid PageTimeout setting in the Windows Registry Недопустимое значение параметра PageTimeout в записи реестра Windows 3250 Couldn’t build key Невозможно построение ключа 3251 Operation is not supported for this type of object Операция не поддерживается для объектов этого типа 3252 Can’t open a form whose underlying query contains a user-defined function that attempts to set or get the form’s RecordsetClone property Невозможно открыть форму: базовый запрос содержит определяемую пользователем функцию, задающую или получающую значение свойства RecordsetClone 3254 ODBC — can’t lock all records ODBC — блокировка всех записей невозможна 3256 Index file not found Не найден индексный файл 3257 Syntax error in WITH OWNER- ACCESS OPTION declaration Ошибка синтаксиса в описании WITH OWNERACCESS OPTION 3258 The SQL statement couldn’t be executed because it contains ambiguous outer joins. To force one of the joins to be performed first, create a separate query that performs the first join and then include that query in your SQL statement Невозможно выполнить инструкцию SQL, так как запрос содержит неоднозначные внешние связи. Для указания связи, выполняемой первой, создайте отдельный запрос и включите его в инструкцию SQL 3259 Invalid field data type Недопустимый тип данных поля 3260 «Couldn’t update; currently locked by user <name> on machine <name>» «Обновление невозможно; блокировка установлена пользователем<name> на машине <name>» 3261 Table <name> is exclusively locked by user <name> on machine <name> Таблица <name> блокирована с монопольным доступом пользователем<name> на машине <name> 3262 «Couldn’t lock table <name>; currently in use by user <name> on machine<name>» «Блокировка таблицы <name> невозможна; используется пользователем<name> на машине <name>» 3263 Invalid Database object Недопустимый объект Database 3264 No field defined — cannot append TableDef or Index Поля не определены — невозможно добавление объектов TableDef или Index 3265 Item not found in this collection Элемент не обнаружен в данном семействе 3266 Can’t append a Field that is already a part of a Fields collection Добавление невозможно. Поле является частью семейства Fields 3267 Property can be set only when the Field is part of a Recordset object’s Fields collection Свойство может быть определено, только если это поле является частью семейства Fields объекта Recordset 3268 Can’t set this property once the object is part of a collection Невозможно задание данного свойства, если объект является частью семейства 3269 Can’t append an Index that is already a part of an Indexes collection Добавление невозможно. Индекс является частью семейства Indexes 3270 Property not found Свойство не найдено 3271 Invalid property value Недопустимое значение свойства 3272 Object isn’t a collection Объект не является семейством 3273 Method not applicable for this object Метод неприменим к данному объекту 3274 External table isn’t in the expected format Внешняя таблица не имеет предполагаемый формат 3275 Unexpected error from external database driver <error number> Непредвиденная ошибка драйвера внешней базы данных <error number> 3276 Invalid database object reference Недопустимая ссылка на объект Database 3277 Can’t have more than 10 fields in an index Индекс не может содержать более десяти полей 3278 The Microsoft Jet database engine has not been initialized Не выполнена инициализация ядра базы данных Microsoft Jet 3279 The Microsoft Jet database engine has already been initialized Инициализация ядра базы данных Microsoft Jet уже выполнена 3280 Can’t delete a field that is part of an index or is needed by the system Невозможно удаление поля, являющегося частью индекса или необходимого системе 3281 Can’t delete this index or table. It is either the current index or is used in a relationship Удаление индекса или таблицы невозможно. Объект является текущим индексом или используется для 3282 Operation not supported on a table that contains data Операция не поддерживается для таблицы, содержащей данные 3283 Primary key already exists Ключ уже существует 3284 Index already exists Индекс уже существует 3285 Invalid index definition Недопустимое определение индекса 3286 Format of memo file doesn’t match specified external database format Формат файла Memo не соответствует указанному формату внешней базы данных 3287 Can’t create index on the given field Невозможно создание индекса для данного поля 3288 Paradox index is not primary Индекс Paradox не является первичным 3289 Syntax error in CONSTRAINT clause Ошибка синтаксиса в предложении CONSTRAINT 3290 Syntax error in CREATE TABLE statement Ошибка синтаксиса в инструкции CREATE TABLE 3291 Syntax error in CREATE INDEX statement Ошибка синтаксиса в инструкции CREATE INDEX 3292 Syntax error in field definition Ошибка синтаксиса при определении поля 3293 Syntax error in ALTER TABLE statement Ошибка синтаксиса в инструкции ALTER TABLE 3294 Syntax error in DROP INDEX statement Ошибка синтаксиса в инструкции DROP INDEX 3295 Syntax error in DROP TABLE or DROP INDEX Ошибка синтаксиса в инструкции DROP TABLE или DROP INDEX 3296 Join expression not supported Не поддерживается выражение объединения 3297 Couldn’t import table or query. No records found, or all records contain errors Невозможен импорт таблицы или запроса. Записи не обнаружены, или все записи содержат ошибки 3298 There are several tables with that name. Please specify owner in the format’owner.table’ Существует несколько таблиц с данным именем. Укажите владельца в формате ‘owner.table’ 3299 ODBC Specification Conformance Error <message>. Report this error to the developer of your application Ошибка согласования спецификации ODBC <message>. Сообщите о данной ошибке разработчику используемого приложения 3300 Can’t create a relationship Не удается установить связь 3301 «Can’t perform this operation; features in this version are not available in databases with older formats» «Выполнение операции невозможно; возможности данной версии недоступны в базах данных старого формата» 3303 Can’t delete this field. It’s part of one or more relationships Удаление данного поля невозможно. Оно участвует в одной или нескольких связях 3304 You must enter a personal identifier(PID) consisting of at least 4 and no more than 20 characters and digits Необходимо ввести код учетной записи, содержащий от 4 до 20 символов и цифр 3305 Invalid connection string in pass-through query Недопустимая строка подключения в запросе к серверу 3306 You’ve written a subquery that can return more than one field without using the EXISTS reserved word in the main query’s FROM clause. Revise the SELECT statement of the subquery to request only one field Из подчиненного запроса, который не использует ключевое слово EXISTS, возвращается не более одного поля. Укажите в инструкции SELECT подчиненного запроса возвращение только одного поля 3307 The number of columns in the two selected tables or queries of a union query don’t match В таблицах или запросах, выбранных в запросе на объединение, не совпадает число столбцов 3308 Invalid TOP argument in select query Недопустимый аргумент ТОР запроса на выборку 3309 Property setting can’t be larger than 2K Размер значения свойства не должен превышать 2 Кбайт 3310 This property isn’t supported for external data sources or for databases created with a previous version of Microsoft Jet Данное свойство не поддерживается для внешних источников данных или для баз данных, созданных в предыдущей версии ядра Microsoft Jet 3311 Property specified already exists Указанное свойство уже определено 3312 Validation rules and default values can’t be placed on system or linked tables Нельзя задавать условия на значения или значения по умолчанию для системных или присоединенных (связанных) таблиц 3313 Can’t place this validation expression on this field Невозможно задать выражение условия на значения для этого поля 3314 The field <name> can’t contain a Null value because the Required property for this field is set to True. Enter a value in this field Поле <name> не может содержать значение Null, так как свойство Required имеет значение True. Введите значение в поле 3315 Field <name> can’t be a zero-length string Поле <name> не допускает ввод пустых строк 3316 <Tablelevel validation text> Текст условия на значение уровня таблицы 3317 One or more values are prohibited by the validation rule <rule> set for <name>. Enter a value that the expression for this field can accept Одно или несколько из введенных значений нарушают условие на значение <rule>, заданное для <name>. Введите значение, допускаемое выражением для данного поля 3318 Values specified in a TOP clause are not allowed in delete queries or reports Значения, указанные в предложении ТОР, не допускаются в запросах на удаление записей или в отчетах 3319 Syntax error in union query Ошибка синтаксиса в запросе на объединение 3320 <Error> in table-level validation expression <Еггог> в выражении условия на значение уровня таблицы 3321 No database specified in connection string or IN clause He задана база данных в строке подключения или в предложении IN 3322 Crosstab query contains one or more invalid fixed column headings Перекрестный запрос содержит один или несколько недопустимых заголовков столбцов 3323 The query cannot be used as a row source Не допускается использование этого запроса в качестве источника строк 3324 The query is a DDL query and cannot be used as a row source Данный запрос является управляющим запросом и его нельзя использовать в качестве источника строк 3325 Pass-through query with Returns- Records property set to True did not return any records Запрос к серверу, свойство ReturnsRecords которого имеет значение True, не вернул ни одной записи 3326 This Recordset is not updatable Объект Recordset не является обновляемым 3334 Can be present only in version 1.0 format Возможно представление только в формате версии 1.0 3336 Btrieve: Invalid IndexDDF option in initialization setting Btrieve: недопустимое значение параметра инициализации IndexDDF 3337 Invalid DataCodePage option in initialization setting Недопустимое значение параметра инициализации DataCodePage 3338 Btrieve: Xtrieve options aren’t correct in initialization setting Btrieve: не исправлены параметры инициализации Xtrieve 3339 Btrieve: Invalid IndexDeleteRenumber option in initialization setting Btrieve: недопустимое значение параметра инициализации IndexDeleteRenumber 3340 Query <name> is corrupt Запрос <name> поврежден 3341 The current field must match the join key <name> in the table that serves as the ‘one’ side of one-to-many relationship. Enter a record in the ‘one’ side table with the desired key value, and then make the entry with the desired join key in the ‘many’ side Текущее поле после обновления должно содержать подходящий ключ связи <name> со стороны ‘один’ внешнего объединения. Введите на стороне ‘один’ запись с требуемым значением ключа связи, а затем создайте запись с тем же значением ключа в таблице на стороне ‘многие’ 3342 Invalid Memo or OLE Object in sub- query <name> Ошибочное поле Memo или поле объекта ActiveX в подчиненном запросе <name> 3343 Unrecognized database format<filename> Нераспознаваемый формат базы данных <filename> 3344 The database engine does not recognize either the field <name> in a validation expression, or the default value in the table <name> Имя поля <name> в выражении для условия на значение или в значении по умолчанию в таблице <name> не распознается ядром базы данных 3345 Unknown or invalid field reference<name> Недопустимая или неизвестная ссылка на поле <name> 3346 Number of query values and destination fields aren’t the same Не совпадает число значении запроса и число результирующих полей 3349 Numeric field overflow Переполнение числового поля 3350 Object is invalid for operation Недопустимый объект для данной операции 3351 The ORDER BY expression <expression> includes fields that aren’t selected by the query. Only those fields requested in the first query can be in- cluded in an ORDER BY expression В выражение ORDER BY <expression> включены поля, не выбранные в запросе. Выражение ORDER BY может содержать только поля, затребованные в первом запросе 3352 No destination field name in INSERT INTO statement <statement> В инструкции INSERT INTO <statement> отсутствует имя результирующего поля 3353 Btrieve: Can’t find file RELD.DDF Btrieve: He удается найти файл FIELD.DDF 3354 At most one record can be returned by this subquery Данный подчиненный запрос должен возвращать не более одной записи 3355 Syntax error in default value Ошибка синтаксиса в значении по умолчанию 3356 You attempted to open a database that is already opened exclusively by user<name> on machine <name>. Try again when the database is available Попытка открыть базу данных, открытую пользователем <name> на машине <name> для монопольного доступа. Повторите попытку, когда база данных освободится 3357 This query is not a properly formed data-definition query Данный запрос не является правильно заданным управляющим запросом 3358 Can’t open the Microsoft Jet engine workgroup information file Не удается открыть системную базу данных ядра Microsoft Jet 3359 Pass-through query must contain at least one character Запрос к серверу должен содержать, по крайней мере, один символ 3360 Query is too complex Слишком сложный запрос 3361 Unions not allowed in a subquery В подчиненном запросе не допускаются объединения 3362 Single-row update/delete affected more than one row of a linked table. Unique index contains duplicate values Обновление/удаление строки влияет на несколько строк присоединенной таблицы. Повтор значений в уникальном индексе 3364 Can’t use Memo or OLE Object field<name> in the SELECT clause of a union query В предложении SELECT запроса на объединение не допускается использование поля Memo или поля объекта ActiveX <name> 3365 Can’t set this property for remote objects Невозможно установить значение данного свойства для внешних объектов 3366 Can’t append a relation with no fields defined Невозможно добавить связь, не определив поля 3367 Can’t append. An object with that name already exists in the collection Добавление объекта невозможно. Он уже входит в семейство 3368 Relationship must be on the same number of fields with the same data types Отношение должно быть задано для одинакового количества полей с одинаковыми типами данных 3370 Can’t modify the design of table<name> It’s in a read-only database Невозможно изменение структуры таблицы «name». База данных доступна только для чтения 3371 Can’t find table or constraint Не удается найти таблицу или индекс 3372 No such index <name> on table<name> Индекс <name> не существует в таблице <name> 3373 Can’t create relationship. Referenced Не удается создать связь. Указанная 3374 The specified fields are not uniquely indexed in table <name> Указанные поля не имеют уникального индекса в таблице <name> 3375 Table <name> already has an index named <name> Таблица <name> уже имеет индекс с именем <name> 3376 Table <name> doesn’t exist Таблица <name> не существует 3377 No such relationship <name> on table<name> Отношение <name> для таблицы<name> не существует 3378 There is already a relationship named<name> in the current database Связь <name> уже существует в текущей базе данных 3379 Can’t create relationships to enforce referential integrity. Existing data in table <name> violates referential integrity rules in table <name> Невозможно обеспечить целостность данных. Данные таблицы<name> нарушают условия для связи с таблицей <name> 3380 Field <name> already exists in table<name> Поле <name> уже существует в таблице <name> 3381 There is no field named <name> in table <name> Поле <name> отсутствует в таблице<name> 3382 Size of field <name> is too long Слишком длинное поле <name> 3383 Can’t delete field <name> It’s part of one or more relationships Невозможно удалить поле <name>. Оно является частью одной или нескольких связей 3384 Can’t delete a built-in property Невозможно удаление встроенного свойства 3385 User-defined properties don’t support a Null value Свойства, определяемые пользователем, не допускают задание пустых значении (Null) 3386 Property <name> must be set before using this method Перед использованием данного метода необходимо задать значение свойства <name> 3388 Unknown function <name> in validation expression or default value on<name> Неизвестная функция <name> в выражении условия на значение или в значении по умолчанию для <name> 3389 Query support unavailable Поддержка запроса недоступна 3390 Account name already exists Имя учетной записи уже существует 3393 Can’t perform join, group, sort, or indexed restriction. A value being searched or sorted on is too long Невозможно выполнить объединение, группировку, сортировку или отбор по индексу. Слишком длинное значение, используемое для поиска или сортировки 3394 «Can’t save property; property is a schema property» «Сохранение свойства невозможно; свойство схемы» 3396 Can’t perform cascading operation. Since related records exist in table<name>, referential integrity rules would be violated Невозможно выполнить каскадную операцию, поскольку наличие в таблице <name> связанных записей приведет к нарушению целостности данных 3397 Can’t perform cascading operation. There must be a related record in table<name> Невозможно выполнение каскадной операции. Необходимо наличие связанных записей в таблице <name> 3398 Can’t perform cascading operation. It would result in a null key in table<name> Невозможно выполнить каскадную операцию, которая приведет к появлению пустого ключевого поля в таблице <name> 3399 Can’t perform cascading operation. It would result in a duplicate key in table<name> Невозможно выполнить каскадную операцию, которая приведет к появлению повторяющихся значений в ключевом поле таблицы <name> 3400 Can’t perform cascading operation. It would result in two updates to field <name> in table <name> Невозможно выполнить каскадную операцию, которая приведет к повторному обновлению поля <name> в таблице <name> 3401 Can’t perform cascading operation. It would cause field <name> to become Null, which is not allowed Невозможно выполнить каскадную операцию, которая приведет к появлению недопустимого пустого (Null) значения в поле <name> 3402 Can’t perform cascading operation. It would cause field <name> to become a zero-length string, which is not allowed Невозможно выполнить каскадную операцию, которая приведет к появлению недопустимой пустой строки в поле <name>

Отказ макроса или надстройки от выполнения своих функций имеет ряд причин. Рассмотрим наиболее распространенные из них.

Операционная система

Вплоть до Office 2016 пакет приложений Microsoft Office выпускается в различных версиях, для Windows и для Mac OS. Встроенный в приложения Office язык программирования при этом использует отличающиеся друг от друга библиотеки операционной системы. В связи с этим макрос/надстройка, написанная для работы в приложениях под Windows, может не работать, либо работать некорректно в MacOS. Проверьте операционную систему, для которой разрабатывался макрос/надстройка.

Разработчик пакета офисных приложений

Кроме Microsoft Office, пользователи достаточно часто используют альтернативные пакеты офисных приложений, такие как OpenOffice или LibreOffice. Приложения этих пакетов также имеют встроенные языки программирования, но эти языки отличаются друг от друга. Макросы или надстройки, написанные в Visual Basic for Application в приложениях пакета Microsoft Office, не будут работать в приложениях OpenOffice или LibreOffice. Уточните, для какого пакета офисных программ разработан макрос/надстройка.

Наличие компонента VBA

Для того, чтобы можно было запустить макрос или надстройку в каком-либо приложении пакета Office, необходимо, чтобы с этим пакетом был установлен компонент VBA – встроенный язык программирования Visual Basic for Application. В некоторых версиях Office этот пакет может устанавливаться отдельно. Проверьте, установлен ли этот компонент на компьютере. Нажмите сочетание клавиш Alt+F11, если после этого появляется окно редактора Visual Basic, то компонент установлен. В случае, если компонент отсутствует, его необходимо установить.

Версия Microsoft Office

Microsoft Office 2003 использует надстройки с расширением .xla (для Excel), .dot (для Word) и так далее. В более поздних версиях расширения надстроек изменились: .xlam (для Excel), .dotm (для Word). При установке надстроек старого формата в приложения Office 2007 и выше никаких проблем не происходит, а вот при попытке установить надстройку нового формата в приложения пакета Office 2003, возникает сообщение о том, что надстройки не обнаружены. Убедитесь в том, что используемая надстройка предназначена именно для той версии Office, в которой Вы работаете.

Активация Microsoft Office

Убедитесь в том, что Microsoft Office не требует активации. Проведите активацию, чтобы избежать каких-либо ограничений при использовании приложений.

Снятие блокировки файла

Файл, полученный с другого компьютера или из сети интернет может быть заблокирован. Чтобы разблокировать такой файл, необходимо кликнуть на нем правой кнопкой мыши и на вкладке «Общие» нажать кнопку «Разблокировать».

snyatie blokirovki s fajla

Система безопасности

Если все вышеизложенное не ответило на вопрос «почему не работает макрос?», то, скорее всего, дело в настройках системы безопасности. Перейдите на страницу https://macros-vba.ru/knigi/vba/nastrojki-sistemy-bezopasnosti и проделайте то, что написано в разделах «Надежные расположения» и «Настройка доступа к объектной модели VBA».

Используемые библиотеки

Еще одна ситуация при которой не работает макрос сопровождается появлением сообщения Can’t find project or library при этом тот же самый макрос может без нареканий работать на другом компьютере. В разных версиях приложений, в которые встроен VBA могут использоваться разные библиотеки, в связи с чем могут возникать подобные ошибки. Ошибку можно устранить, если в окне, которое следует за сообщением об ошибке снять флажки, установленные в пунктах, содержащих слово MISSING.

cant find project or library

Это окно также можно вызвать и самостоятельно, если в редакторе VB выбрать пункт меню Tools/References.

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

Другие материалы по теме:

Последнее обновление Ноя 12, 2021

Некоторые пользователи, похоже, получают ошибку VBA 400 при попытке запустить свой макрос в Excel. Дальнейших указаний нет, только окошко с кнопкой ОК.

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

Как исправить ошибку 400 в Excel?

1 Переместите ваши макросы в новый модуль

Ошибка VBA 400: что это такое и как ее исправить

  1. Чтобы создать новый модуль, перейдите в меню «Инструменты».
  2. Щелкните Макрос – редактор Visual Basic.
  3. В VBA щелкните ” Модуль” в меню “Вставка”.
  4. Вставьте код VBA, который хотите использовать.
  5. В меню «Файл» выберите «Сохранить глобально».
  6. Обязательно удалите старый модуль.

2 Включите доверенный доступ к VBA

Ошибка VBA 400: что это такое и как ее исправить

  1. Перейдите на вкладку «Разработчик» (если она недоступна, нажмите «Файл» > «Параметры» > «Настроить ленту»> установите флажок «Разработчик» ).
  2. В группе Код – перейдите на вкладку Разработчик.
  3. Щелкните Безопасность макросов.
  4. Выберите «Параметры макроса разработчика» – выберите «Надежный доступ к проекту VBA».

3 Проверьте свой код

Ошибка VBA 400: что это такое и как ее исправить

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


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

Источник записи: windowsreport.com

В этой статье мы обсудим методы исправления ошибки VBA 400 в Excel. Ошибка 400 в Excel обычно возникает при запуске макроса Microsoft Visual Basic для приложений (VBA). Это вызывает сбой макроса или сбой при запуске и возвращает сообщение об ошибке 400. Причины такой ошибки могут быть разными; давайте обсудим их.

vba-error-400-в-Excel

Что вызывает ошибку VBA 400 в Excel?

Вот причины, из-за которых возникает ошибка 400 при запуске макроса в Excel:

  • Неправильная установка программного обеспечения Office.
  • В коде VBA есть ошибка.
  • Недопустимое значение аргумента.
  • Запущенный макрос поврежден.
  • Файлы, связанные с Excel, заражены каким-либо вредоносным ПО.
  • Ошибка чтения / записи из файла.
  • Неверные записи в реестре.

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

Вот способы исправить ошибку 400, возникшую при запуске макроса в Excel:

  1. Переместите макросы в новый модуль.
  2. Включите доверенный доступ к VBA.
  3. Просмотрите свой код VBA.
  4. Восстановите Microsoft Excel.
  5. Удалите, а затем повторно установите Excel.
  6. Некоторые другие методы, такие как сканирование на наличие вредоносных программ и т. Д.

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

1]Переместить макросы в новый модуль

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

Перейдите на вкладку «Разработчики» и выберите «Визуальный редактор». Если вы не видите вкладку «Разработчики» на главной ленте в Excel, перейдите в «Файл»> «Параметры» и на вкладке «Настройка лент» установите флажок «Разработчики» в разделе «Основные вкладки».

Теперь в окне Microsoft Visual Basic для приложений щелкните меню «Вставка» и выберите параметр «Модуль».

После этого вставьте код макроса в этот новый модуль и сохраните его, используя специальную опцию в меню «Файл».

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

Наконец, щелкните Файл> Закрыть и вернуться в Microsoft Excel и посмотрите, устранена ли ошибка 400 в Excel.

2]Включить надежный доступ к VBA

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

  1. Перейдите на вкладку «Разработчики» и нажмите «Безопасность макросов».
  2. В окне центра управления безопасностью включите параметр Надежный доступ к объектной модели проекта VBA.
  3. Нажмите кнопку ОК.

3]Проверьте свой код

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

4]Восстановить Microsoft Excel

Если ничего из вышеперечисленного не работает, проблема может быть в приложении Excel. Возможно, приложение установлено неправильно или что-то нужно исправить. Итак, восстановите Microsoft Excel, используя следующие шаги:

  1. Запустите приложение «Настройки» и выберите «Приложения»> «Приложения и функции».
  2. Справа найдите и щелкните Программа Office 365 / Microsoft 365.
  3. Нажмите на кнопку «Изменить», а затем выберите вариант «Онлайн-ремонт» или «Быстрое восстановление».
  4. Нажмите кнопку «Восстановить», чтобы восстановить Excel и другие приложения Office.

5]Удалите, а затем повторно установите Excel.

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

6]Некоторые другие методы

Кроме того, некоторые другие решения также могут работать, например:

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

Надеюсь, что приведенные выше решения помогут!

Теперь прочтите: Как исправить ошибку выполнения 1004 в Excel

vba-error-400-в-Excel .

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

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

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

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Майнкрафт не запустился изза неизвестной ошибки
  • Мазила ошибка при установлении защищенного соединения