Аннотация
При использовании в Microsoft Visual Basic оператора New или функции CreateObject для создания экземпляра приложения Microsoft Office может появиться приведенное ниже сообщение об ошибке.
Ошибка времени выполнения «429»: компоненту ActiveX не удается создать объект
Эта ошибка возникает, если com-модель компонента не может создать запрошенный объект службы автоматизации, и поэтому объект службы автоматизации недоступен для Visual Basic. Эта ошибка возникает не на всех компьютерах.
В этой статье описывается, как диагностировать и устранять распространенные проблемы, которые могут вызвать эту ошибку.
Дополнительная информация
В Visual Basic существует несколько причин ошибки 429. Ошибка возникает, если выполняется одно из следующих условий:
-
Наличие ошибки в приложении.
-
Наличие ошибки в конфигурации системы.
-
Отсутствие какого-либо компонента.
-
Наличие поврежденного компонента.
Чтобы найти причину возникновения ошибки, необходимо изолировать проблему. Если на клиентском компьютере появляется сообщение об ошибке «429», используйте следующие сведения, чтобы изолировать и устранить ошибку в приложениях Microsoft Office.
Примечание Некоторые из приведенных ниже сведений также могут применяться к COM-серверам, отличным от Office. Однако в данной статье предполагается, что ошибка связана с автоматизацией приложений Microsoft Office.
Проверка кода
Перед устранением ошибки попробуйте изолировать одну строку кода, которая может быть причиной проблемы.
Если вы обнаружите, что одна строка кода может вызвать проблему, выполните следующие процедуры:
-
Убедитесь, что код использует явное создание объекта.
Проблемы легче выявить, если они сужаются до одного действия. Например, найдите неявное создание объекта, которое используется в качестве одного из следующих вариантов.
Пример кода 1
Application.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_ROOTCLSID.
Идентификаторы 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~1MICROS~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, которые управляют автоматизацией. Эти файлы обычно устанавливаются в наборе. Номера сборки этих файлов должны совпадать. Неправильно настроенная программа установки может по ошибке установить файлы отдельно. В этом случае файлы не будут сочетаться. Чтобы избежать проблем с автоматизацией, проверьте файлы, чтобы убедиться, что сборки файлов совпадают.
Файлы автоматизации находятся в каталоге WindowsSystem32. Проверьте перечисленные ниже файлы.
Имя файла
Версия
Дата изменения
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 и примерах кода см. на следующем веб-сайте Майкрософт:
Начало работы с разработкой Office
|
|
|
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] …текст программы… [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.
Полезные ссылки:
FAQ Сайта FAQ Раздела Кладовка Наши Исходники API-Guide Поиск по Разделу MSDN Library Online Google
Ваше мнение о модераторах: SCINER, B.V.
Ошибка при CreateObject(«Excel.Application»)
, Ошибка Run-time error ‘7’: Out of memory
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Здравствуйте!
Dim ExcelObj As Excel.Application Dim ExWorkbook As Excel.Workbook Dim ExSh As Excel.Worksheet Set ExcelObj = CreateObject(«Excel.Application») Set ExWorkbook = ExcelObj.Workbooks.Open(«C:_КаталогFTPPutFiles.xlsm») ExcelObj.Visible = True
Ошибка появляется на 4-й строчке — CreateObject(«Excel.Application»). Кстати проверял и с Word — то же самое. Создавал пустой проект и получал ту же ошибку. Переустановил VB6, Office — все то же самое. Добавлено 07.10.13, 20:11 |
Akina |
|
Цитата dec0rator @ 07.10.13, 20:01 Запустил на другом компе — все нормально работает…
Более чем странно. Должно давать ошибку «Не выпрямлены руки у программиста». |
dec0rator |
|
Цитата Akina @ 08.10.13, 04:39 Более чем странно. Должно давать ошибку «Не выпрямлены руки у программиста».
Хотя я еще совсем начинающий программист, я понимаю что такое раннее и позднее связывание (или думаю что понимаю).
Set ExcelObj = CreateObject(«Excel.Application») при том что переменная изначально описана как ссылка именно на Excel:
Dim ExcelObj As Excel.Application — где тут ошибка?
Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.WorkSheet Set xlApp = CreateObject(«Excel.Application») Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1)
Akina, объясните почему нельзя использовать CreateObject(«Excel.Application») при раннем связывании?
Dim ExcelObj As Object Set ExcelObj = CreateObject(«Excel.Application») ExcelObj.Visible = True Дает у меня ошибку «Run-time error ‘424’: Object required» на той же строчке… Добавлено 08.10.13, 18:32 |
Akina |
|
Цитата dec0rator @ 08.10.13, 18:04 почему нельзя использовать CreateObject(«Excel.Application») при раннем связывании? Потому что при раннем связывании делают так:
Dim xlApp As Excel.Application Set xlApp = New Excel.Application Это гарантирует, что созданный экземпляр объекта будет иметь ту же версию, что и использованная при сборке проекта референсная библиотека, а при отсутствии компонента требуемой версии приложение не запустится и вменяемо скажет, почему именно. |
dec0rator |
|
2Akina, спасибо за объяснения. Как вернусь домой посмотрю что мне напишет VB при раннем связывании |
dec0rator |
|
При раннем опять ошибка out of memory…есть идеи что делать…кроме как переустановить Windows? |
dec0rator |
|
Только теперь ошибка появляется если сделать какую либо операцию с этим объектом, например здесь:
Dim ExcelObj As Excel.Application Set ExcelObj = New Excel.Application Dim ExWorkbook As Excel.Workbook Set ExWorkbook = ExcelObj.Workbooks.Add ExcelObj.Visible = True на 4-й строчке |
Akina |
|
В общем, есть подозрение. что не всё у тебя в системе благополучно. И на этом фоне вполне нормальный код выписывает кренделя. |
dec0rator |
|
Только что снес и поставил офис, все то же самое ((( Неужто систему переустанавливать? Может есть какие-нибудь идеи как поискать ошибку? |
Akina |
|
Получается, что у тебя на этом компе не (только) с офисом проблемы… на самом деле других вменяемых идей, кромее перестановки ОС, у меня лично не завалялось. |
dec0rator |
|
я думаю что не в офисе дело. Еще наблюдение: откомпилированная программа (тоже на vb6), которая всегда открывала Excel на этом компе теперь не работает. НО! Ведь этот же код из под VBA на этом компе работает! Добавлено 09.10.13, 18:38 |
Akina |
|
VB6 и VBA — это не просто две большие разницы… |
dec0rator |
|
Понимаю, но хочется за что то зацепиться… |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Visual Basic: Общие вопросы
- Следующая тема
[ Script execution time: 0,0438 ] [ 16 queries used ] [ Generated: 3.06.23, 23:37 GMT ]
- Remove From My Forums
-
Question
-
Hello,
Background: vbscript is located on windows server 2003, the client is on windows 7 with IE10 and Excel 2010. The asp page is calling the vbscript from windows 7 to open excel file on windows 7. (xls).
Issue: set app = CreateObject(«Excel.Application») is causing the problem as app is not set and the error is: Could not start Excel application.
Could I get a hint where to look at to attack this issue? Thx in advance
-
Moved by
George123345
Wednesday, May 27, 2015 7:22 AM
-
Moved by
All replies
-
Hello,
Background: vbscript is located on windows server 2003, the client is on windows 7 with IE10 and Excel 2010. The asp page is calling the vbscript to open excel file on windows 7. (xls).
Issue: set app = CreateObject(«Excel.Application») is causing the problem as app is not set and the error is: Could not start Excel application.
Could I get a hint where to look at to attack this issue? Thx in advance
-
Merged by
L.Hl
Saturday, May 23, 2015 3:48 PM
repeat thread
-
Merged by
-
Re: creating an excel.application
I wasn’t going to respond to your question, as it is out of my comfort range.
Since it has been a day and you have now posted on a second forum (frowned on), I’ll say this…How is «app» declared? It should be As Object or As Excel.Application.
Also, I think that in order to start an Excel application on your server, you need Excel installed on the server.This MS article might be of help…
«Considerations for server-side Automation of Office»
https://support.microsoft.com/en-us/kb/257757/en-us?wa=wsignin1.0‘—
(free & commercial excel add-ins & workbooks)
-
Edited by
James Cone
Tuesday, November 1, 2016 2:25 AM
-
Edited by
-
Dim app — that’s how it is declared
If I use this declaration
Dim app as Excel.Application
then it doesn’t work at all. That is the error message is not displayed, Excel not started. There is ‘on error resume next’ at the top of the function.
I am not trying to start an Excel application on the server, but on client machine running windows 7 and Excel 2010.
The server has Excel 2003 installed.
-
Re: CreateObject
Dim App makes app a Variant, thats OK.
I can’t provide any further direction and am going to bow out.
I do suggest that you try your code in the client machine to eliminate that as the source of the problem.
‘—
Jim Cone -
Hello mirekriek,
In my opinion, only create the object of Excel is not enough, should set the visible to true, and if you use VBScript (not VBA), about the DIM statement, please don’t write the part of «as type»,
so the code which can work properly on my laptop(Windows 7 64 bit) is :Dim oExcel
Set oExcel = CreateObject(«Excel.Application»)
oExcel.Visible = TruePlease take a shot and let us know whether the code works properly on your pc.
Best Regards,
Sniperhgy
-
Edited by
sniperhgy
Wednesday, May 27, 2015 5:48 AM
-
Edited by
-
— top of vbs function
on error resume next
err.clear
MsgBox «DisplayExcelFile «, vbOKOnly+vbCritical, «START» —> this is displayed
Dim app
Set app = CreateObject(«Excel.Application»)
app.visible = true
MsgBox «DisplayExcelFile «, vbOKOnly+vbCritical, err.number —> this displayed Error: 424 (object not set)— end of block
The file with vbscript is not located on local windows 7, but on windows server 2003 server and it is triggered from asp page. If I run vbscript locally on windows 7 then it works, starts excel and opens worksheet.
Hi,
I am trying to open a password protected Excel 2010 file from within Access 2010. The file contains a list of passwords which I do not want the user to see in Access — so instead Access should open the file behind the scenes and extract the relevant password
data, without the user seeing what’s happening in the background.
I tried using ADODB.Connection to do this but realised that it will not work with a password protected file. I also tried importing the Excel sheet into a table using VBA but yet again the password creates a problem.
Instead, I’m now using CreateObject(«Excel.Application») which works but with 1 problem: Excel loads but comes up with a message saying it cannot find an XLA file which it is looking for (unsure why — seems to be related to the ribbon). The problem
is I don’t want the user to see or interact with Excel so any errors should just be bypassed by Excel and not displayed on the screen. I saw the idea of using
Application.Visible = False and Application.DisplayAlerts = False, but these can only be set after the object is created so they do not help.
Is there any way of supressing these error messages at the point when the Excel.Application object is created? Alternatively if anyone can suggest a better way of accessing a password protected Excel file, feel free!
Another alternative I tried was to use CreateObject(«Excel.Sheet«) instead. This got rid of the XLA error as it loads all add-ins. However, all the addin splash screens appear and while all the add-ins are loading, I get error
«Automation error. The message filter indicated that the application is busy«. I can’t seem to win!
Many thanks for your help!
As a background, I am trying to delete the 2nd row of my 2007 Excel work book. I dont have MS Office installed on the server and installing them is not a possibility. Using interop Assemblies is of no use since I cant install office.
When I tried using the VB script (below) to manipulate the file, it gives me all sorts of errors:
Dim filename As String
Dim appExcel As Object
Dim newBook As Object
Dim oSheet1 As Object
appExcel = CreateObject("Excel.Application")
filename = "C:test.xls"
appExcel.DisplayAlerts = False
newBook = appExcel.Workbooks.Open(filename)
oSheet1 = newBook.worksheets("Sheet1")
oSheet1.Range("A2").Entirerow.Delete()
newBook.SaveAs(filename, FileFormat:=56)
appExcel.Workbooks.Close()
appExcel.Quit()
I kinda get it that without excel and assemblies, I cant manipulate the file. Is there any other way to achieve this? I dont know what assemblies I can try using. Thanks for reading.
asked May 10, 2016 at 18:47
7
No, without the required Excel Objects library you can’t successfully delete rows from an Excel file* via a scripting language in this way.
You can query the workbook using ADO and SQL but this won’t allow you to delete rows.
*by Excel file, I mean an .xls file which is what you appear to be working with — .xlsx files (Excel 2007 and newer) are actually just compressed XML files and can be edited as such if you have the know-how
answered May 10, 2016 at 19:22
SierraOscarSierraOscar
17.5k6 gold badges40 silver badges68 bronze badges
3