Аннотация
При использовании в Microsoft Visual Basic оператора New или функции CreateObject для создания экземпляра приложения Microsoft Office может появиться приведенное ниже сообщение об ошибке.
Ошибка времени выполнения "429": компоненту ActiveX не удается создать объект
Эта ошибка возникает, если com-модель компонента не может создать запрошенный объект службы автоматизации, и поэтому объект службы автоматизации недоступен для Visual Basic. Эта ошибка возникает не на всех компьютерах.
В этой статье описывается, как диагностировать и устранять распространенные проблемы, которые могут вызвать эту ошибку.
Дополнительная информация
В Visual Basic существует несколько причин ошибки 429. Ошибка возникает, если выполняется одно из следующих условий:
-
Наличие ошибки в приложении.
-
Наличие ошибки в конфигурации системы.
-
Отсутствие какого-либо компонента.
-
Наличие поврежденного компонента.
Чтобы найти причину возникновения ошибки, необходимо изолировать проблему. Если на клиентском компьютере появляется сообщение об ошибке "429", используйте следующие сведения, чтобы изолировать и устранить ошибку в приложениях Microsoft Office.
Примечание Некоторые из приведенных ниже сведений также могут применяться к COM-серверам, отличным от Office. Однако в данной статье предполагается, что ошибка связана с автоматизацией приложений Microsoft Office.
Проверка кода
Перед устранением ошибки попробуйте изолировать одну строку кода, которая может быть причиной проблемы.
Если вы обнаружите, что одна строка кода может вызвать проблему, выполните следующие процедуры:
-
Убедитесь, что код использует явное создание объекта.
Проблемы легче выявить, если они сужаются до одного действия. Например, найдите неявное создание объекта, которое используется в качестве одного из следующих вариантов.
Пример кода 1Application.Documents.Add 'DON'T USE THIS!!
Пример кода 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
В обоих примерах используется неявное создание объекта. Microsoft Office Word 2003 не запускается до первого вызова переменной. Поскольку код вызова переменной может быть расположен в различных частях программы, локализация проблемы может оказаться непростой задачей. Может быть трудно убедиться, что проблема вызвана при создании объекта Application или при создании объекта Document .
Вместо этого можно выполнять явные вызовы для создания каждого объекта отдельно, как показано ниже.Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.Add
При использовании явных вызовов для создания каждого объекта по отдельности изолировать проблему легче. Это также может сделать код более удобным для чтения.
-
При создании экземпляра приложения Office используйте функцию CreateObject вместо оператора New.
Функция CreateObject тесно сопоставляет процесс создания, используемый большинством клиентов Microsoft Visual C++. Функция CreateObject также позволяет изменять идентификатор CLSID сервера между версиями. Функцию CreateObject можно использовать с объектами с ранней привязкой и с объектами с поздним связыванием. -
Убедитесь, что строка ProgID, передаваемая
в CreateObject, правильна, а затем убедитесь, что строка ProgID не зависит от версии. Например, используйте строку "Excel.Application" вместо строки "Excel.Application.8". В системе, где возникает проблема, может быть установлена более старая или более новая версия Microsoft Office, отличная от версии, указанной в строке "ProgID". -
Используйте команду Erl , чтобы сообщить номер строки кода, которая не завершается успешно. Это может облегчить отладку приложений, которые не запускаются в интегрированной среде разработки. Следующий код указывает, какой объект службы автоматизации нельзя создать (Microsoft Word или Microsoft Office Excel 2003):
Dim oWord As Word.Application Dim oExcel As Excel.Application On Error Goto err_handler 1: Set oWord = CreateObject("Word.Application") 2: Set oExcel = CreateObject("Excel.Application") ' ... some other code err_handler: MsgBox "The code failed at line " & Erl, vbCritical
Для отслеживания ошибки используйте функцию MsgBox и номер строки.
-
Используйте позднюю привязку следующим образом:
Dim oWordApp As Object
Для объектов с ранней привязкой необходимо, чтобы их настраиваемые интерфейсы были маршалированы через границы процессов. Если пользовательский интерфейс не может быть маршалирован во время CreateObject или Во время создания, вы получите сообщение об ошибке "429". Объект с поздней привязкой использует определенный системой интерфейс IDispatch, который не требует маршалирования настраиваемого прокси. Используйте объект с поздним связыванием, чтобы убедиться, что эта процедура работает правильно.
Если проблема возникает только при ранней привязке объекта, проблема возникает в серверном приложении. Как правило, чтобы устранить проблему, достаточно переустановить приложение, как описано в разделе "Проверка сервера автоматизации" данной статьи.
Проверка сервера автоматизации
Наиболее распространенной причиной возникновения ошибки при использовании CreateObject или New является проблема, которая влияет на серверное приложение. Обычно причиной возникновения проблемы является установка или конфигурация приложения. Для устранения неполадок используйте следующие методы:
-
Убедитесь в том, что приложение Microsoft Office, которое необходимо автоматизировать, установлено на локальном компьютере. Убедитесь в возможности запуска приложения. Для этого нажмите кнопку Пуск, нажмите кнопку
Выполнить, а затем попробуйте запустить приложение. Если приложение не запускается вручную, автоматизировать его нельзя. -
Перерегистрируйте приложение описанным ниже образом.
-
Нажмите кнопку Пуск, а затем — Выполнить.
-
В диалоговом окне Выполнить введите путь к серверу и в конце строки добавьте параметр /RegServer.
-
Нажмите кнопку ОК.
Приложение выполняется автоматически. Приложение будет перерегистрировано как COM-сервер.
Если причиной возникновения проблемы является отсутствие раздела реестра, в большинстве случаев выполнение перечисленных ниже действий приводит к устранению проблемы.
-
-
Проверьте раздел LocalServer32 в разделе CLSID приложения, которое необходимо автоматизировать. Убедитесь в том, что раздел LocalServer32 указывает на правильное местоположение приложения. Проверьте, чтобы путь был указан в кратком формате (DOS 8.3). Сервер не обязательно регистрировать с использованием краткого пути. Однако длинные пути, включающие пробелы, в некоторых системах могут являться причиной возникновения проблем.
Чтобы изучить ключ пути, хранящийся для сервера, запустите редактор реестра Windows следующим образом:-
Нажмите кнопку Пуск, а затем — Выполнить.
-
Введите regedit и нажмите кнопку ОК.
-
Перейдите в раздел HKEY_CLASSES_ROOT\CLSID.
Идентификаторы CLSID для зарегистрированных серверов автоматизации в системе находятся под этим ключом. -
Чтобы найти раздел, представляющий приложение Microsoft Office, которое необходимо автоматизировать, используйте приведенные ниже значения раздела CLSID. Поверьте в разделе CLSID путь, указанный в разделе LocalServer32.
Сервер Office
Раздел CLSID
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.Application
{00024500-0000-0000-C000-000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.Application
{000209FF-0000-0000-C000-000000000046}
-
Проверьте путь, чтобы убедиться, что он соответствует фактическому расположению файла.
Примечание. Краткие пути могут иногда казаться правильными ошибочно. Например, Office и Microsoft Internet Explorer (если они установлены в расположениях по умолчанию) имеют короткий путь, аналогичный C:\PROGRA~1\MICROS~X\ (где
X — это число). Этот путь может сначала не показаться кратким путем.
Чтобы определить, правильный ли путь, выполните следующие действия.-
Нажмите кнопку Пуск, а затем — Выполнить.
-
Скопируйте значение из реестра и вставьте его в поле диалогового окна Выполнить.
Примечание Перед запуском приложения удалите параметр /automation . -
Нажмите кнопку ОК.
-
Проверьте правильность запуска приложения.
Если приложение запускается после нажатия кнопки ОК, сервер зарегистрирован правильно. Если приложение не запускается после нажатия кнопки ОК, замените значение ключа LocalServer32 правильным путем. По возможности используйте краткий путь.
-
-
Проверьте шаблон Normal.dot или файл ресурсов Excel.xlb на предмет возможного повреждения. Проблемы при автоматизации Microsoft Word или Microsoft Excel могут возникать вследствие повреждения шаблона Normal.dot в Microsoft Word или файла ресурсов Excel.xlb в Microsoft Excel. Чтобы протестировать эти файлы, найдите на локальных жестких дисках все экземпляры Normal.dot или Excel.xlb.
Примечание Вы можете найти несколько копий этих файлов. Для каждого профиля пользователя, установленного в системе, имеется одна копия каждого из этих файлов.
Временно переименуйте файлы Normal.dot или Excel.xlb, а затем повторно запустите тест автоматизации. Если Microsoft Word и Microsoft Excel не находят эти файлы, они создают их снова. Убедитесь, что код работает. Если при создании нового файла Normal.dot код работает, удалите переименованные файлы. Эти файлы повреждены. Если код не работает, необходимо вернуть эти файлы в исходные имена файлов, чтобы сохранить все пользовательские параметры, сохраненные в этих файлах. -
Запустите приложение под учетной записью администратора. Серверам Office требуется доступ на чтение и запись к реестру и диску. Серверы Office могут загружаться неправильно, если текущие параметры безопасности запрещают доступ на чтение и запись.
Проверка системы
Конфигурация системы также может вызвать проблемы при создании внепроцессных COM-серверов. Для устранения неполадок используйте следующие методы в системе, в которой произошла ошибка:
-
Определите, возникает ли проблема с каким-либо сервером вне процесса. Если у вас есть приложение, использующее определенный COM-сервер (например, Word), протестируйте другой внепроцессный сервер, чтобы убедиться, что проблема не возникает на самом уровне COM. Если вы не можете создать внепроцессный COM-сервер на компьютере, переустановите системные файлы OLE, как описано в разделе "Переустановка Microsoft Office" этой статьи, или переустановите операционную систему, чтобы устранить проблему.
-
Проверьте номера версий системных файлов OLE, которые управляют автоматизацией. Эти файлы обычно устанавливаются в наборе. Номера сборки этих файлов должны совпадать. Неправильно настроенная программа установки может по ошибке установить файлы отдельно. В этом случае файлы не будут сочетаться. Чтобы избежать проблем с автоматизацией, проверьте файлы, чтобы убедиться, что сборки файлов совпадают.
Файлы автоматизации находятся в каталоге Windows\System32. Проверьте перечисленные ниже файлы.Имя файла
Версия
Дата изменения
Asycfilt.dll
10.0.16299.15
29 сентября 2017 г.
Ole32.dll
10.0.16299.371
29 марта 2018 г.
Oleaut32.dll
10.0.16299.431
3 мая 2018 г.
Olepro32.dll
10.0.16299.15
29 сентября 2017 г.
Stdole2.tlb
3.0.5014
29 сентября 2017 г.
Чтобы изучить версию файла, щелкните файл правой кнопкой мыши в проводнике и выберите пункт Свойства. Обратите внимание на последние четыре цифры версии файла (номер сборки) и дату последнего изменения файла. Убедитесь в том, что эти значения одинаковы для всех файлов автоматизации.
Примечание Следующие файлы предназначены для Windows 10 версии 1709 сборки 16299.431. Эти числа и даты являются только примерами. Реальные значения могут быть иными. -
Используйте служебную программу конфигурации системы (Msconfig.exe) для проверки служб и запуска системы на наличие сторонних приложений, которые могут ограничить выполнение кода в приложении
OfficeПримечание. Отключите антивирусную программу только временно в тестовой системе, которая не подключена к сети.
Кроме того, выполните следующие действия в Outlook, чтобы отключить сторонние надстройки:
Если этот метод устраняет проблему, обратитесь к стороннему поставщику антивирусной программы для получения дополнительных сведений об обновлении антивирусной программы.-
В меню Файл выберите пункт Параметры, а затем — Надстройки.
-
Щелкните Управление надстройками COM и нажмите кнопку Перейти.
Примечание Откроется диалоговое окно надстройки COM. -
Снимите флажок для любой сторонней надстройки и нажмите кнопку ОК.
-
Перезапустите Outlook.
-
Переустановка Microsoft Office
Если ни одна из предыдущих процедур не устраняет проблему, удалите и переустановите Office.
Дополнительные сведения см. в следующей статье Office:
Скачивание и установка или повторная установка Office 365 или Office 2016 на ПК или Mac
Ссылки
Дополнительные сведения об автоматизации Office и примерах кода см. на следующем веб-сайте Майкрософт: