Невозможно создание объекта контейнером activex excel application
Компонент ActiveX не может создать объект
Причина
Такое поведение может произойти, если любое из следующих условий является верным:
- Объекты доступа к данным (DAO) не регистрируются должным образом.
- Отсутствуют одна или несколько ссылок.
- Существует ссылка на базу данных утилиты, которая не является допустимой.
- У вас нет необходимых разрешений для необходимых библиотек.
- Существует поврежденный файл мастера.
Решение
Причина 1: DAO не регистрируется должным образом
Перерегистрируйте библиотеку DAO 3.6. Для этого выполните следующие действия:
- На компьютере, на котором установлен Microsoft Access, или на компьютере, на котором находится Microsoft Терминал Windows Server, нажмите кнопку Пуск и нажмите кнопку Запустить. (Если вы не видите Run, вы можете найти его или открыть командную подсказку).
- В текстовом поле Run введите regsvr32 , а затем путь к файлу DAO. Заключим этот путь в кавычках. Например, чтобы зарегистрировать библиотеку DAO 3.6, используйте следующую команду, которая включает путь по умолчанию к файлу библиотеки DAO: regsvr32 "C:\Program Files\Common Files\Microsoft Shared\DAO\DAO360.DLL" .
Причина 2. Отсутствуют одна или несколько ссылок
Проверьте отсутствие ссылок. Для этого выполните следующие действия:
Кроме того, вы можете нажать кнопку Обзор в диалоговом окне Ссылки, чтобы просмотреть расположение файла библиотеки, связанного с отсутствующих ссылок.
Причина 3. Существует ссылка на базу данных утилиты, которая не является допустимой
С выпуском Microsoft Access 2000 ссылка на Utility не требуется. Если вы преобразовали базу данных из предыдущей версии, в списке ссылок по-прежнему может появиться ссылка на Utility. Ото всех ссылок на utility или Utility.mda. Для этого выполните следующие действия:
Причина 4. У вас нет необходимых разрешений для необходимых библиотек
Все пользователи Microsoft Access должны иметь разрешения на Windows системных папок.
Убедитесь, что у пользователей есть разрешения на чтение для всех файлов в следующих папках.
Если вы не можете предоставить разрешения на чтение, вы можете использовать такую утилиту, как Process Monitor, чтобы определить, какие файлы или файлы пользователи не имеют необходимых разрешений для использования. Чтобы получить монитор процесса, посетите следующий веб-сайт Sysinternals: Sysinternals.
Причина 5. Существует поврежденный файл мастера
Чтобы восстановить поврежденные файлы мастера, выполните следующие действия:
- Используйте Windows Explorer, чтобы найти следующие файлы мастера: Acwzmain.mde, Acwztool.mde и Acwzlib.mde.
- Измените расширение имени файла каждого файла на "старый". Например, измените Acwzmain.mde на Acwzmain.old.
- Ремонт Microsoft Access или Microsoft Office Professional, чтобы переустановить файлы мастера.
Дополнительная информация
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Добрый день! подскажите пожалуйста есть скрипт в windows xp работает а на 7 нет:((( Заранее благодарю!
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "All Files|*.*"
objDialog.FilterIndex = 1
objDialog.InitialDir = objFS.GetParentFolderName(WScript.ScriptFullName)
intResult = objDialog.ShowOpen
If intResult = 0 Then Wscript.Quit
strFilePath = objDialog.FileName
Const FOR_READING = 1
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.Workbooks.Add
objExcel.ActiveWorkbook.Worksheets(1).Range("C:C").NumberFormat = "@" ' текстовый формат
objExcel.ActiveWorkbook.Worksheets(1).Range("F:F").NumberFormat = "@"
objExcel.Cells(1, 1).Value = "Дата платежа"
objExcel.Cells(1, 2).Value = "Плательщик"
objExcel.Cells(1, 3).Value = "Р/С плательщика"
objExcel.Cells(1, 4).Value = "Банк плательщика"
objExcel.Cells(1, 5).Value = "Получатель"
objExcel.Cells(1, 6).Value = "Р/С получателя"
objExcel.Cells(1, 7).Value = "Банк получателя"
objExcel.Cells(1, 8).Value = "Сумма"
n = 2
While Not objTS.AtEndOfStream
str = objTS.ReadLine
If str = "СекцияДокумент=Платежное поручение" Then
str2 = ""
While str <> "КонецДокумента"
str = objTS.ReadLine
str2 = str2 & str & ";"
Wend
' Дата
pos1 = InStr(str2, "Дата=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-5
If l>0 Then
value = Trim(Mid(str2, pos1+5, l))
objExcel.Cells(n, 1).Value = value
End If
End If
' Плательщик
pos1 = InStr(str2, "Плательщик1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-12
If l>0 Then
value = Trim(Mid(str2, pos1+12, l))
objExcel.Cells(n, 2).Value = value
End If
Else
pos1 = InStr(str2, "Плательщик=") ' Если нет поля "Плательщик1"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-11
If l>0 Then
value = Trim(Mid(str2, pos1+11, l))
objExcel.Cells(n, 2).Value = value
End If
End If
End If
' Р/с плательщика
pos1 = InStr(str2, "ПлательщикРасчСчет=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-19
If l>0 Then
value = Trim(Mid(str2, pos1+19, l))
objExcel.Cells(n, 3).Value = value
End If
Else
pos1 = InStr(str2, "ПлательщикСчет=") ' Если нет поля "ПлательщикРасчСчет"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-15
If l>0 Then
value = Trim(Mid(str2, pos1+15, l))
objExcel.Cells(n, 3).Value = value
End If
End If
End If
' Банк плательщика
pos1 = InStr(str2, "ПлательщикБанк1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-16
If l>0 Then
value = Trim(Mid(str2, pos1+16, l))
objExcel.Cells(n, 4).Value = value
End If
End If
' Получатель
pos1 = InStr(str2, "Получатель1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-12
If l>0 Then
value = Trim(Mid(str2, pos1+12, l))
objExcel.Cells(n, 5).Value = value
End If
Else
pos1 = InStr(str2, "Получатель=") ' Если нет поля "Получатель1"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-11
If l>0 Then
value = Trim(Mid(str2, pos1+11, l))
objExcel.Cells(n, 5).Value = value
End If
End If
End If
' Р/с получателя
pos1 = InStr(str2, "ПолучательРасчСчет=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-19
If l>0 Then
value = Trim(Mid(str2, pos1+19, l))
objExcel.Cells(n, 6).Value = value
End If
Else
pos1 = InStr(str2, "ПолучательСчет=") ' Если нет поля "ПолучательРасчСчет"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-15
If l>0 Then
value = Trim(Mid(str2, pos1+15, l))
objExcel.Cells(n, 6).Value = value
End If
End If
End If
' Банк получателя
pos1 = InStr(str2, "ПолучательБанк1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-16
If l>0 Then
value = Trim(Mid(str2, pos1+16, l))
objExcel.Cells(n, 7).Value = value
End If
End If
' Сумма
pos1 = InStr(str2, "Сумма=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-6
If l>0 Then
value = Trim(Mid(str2, pos1+6, l))
objExcel.Cells(n, 8).Value = value
End If
End If
n = n + 1
End If
Wend
Добрый день! подскажите пожалуйста есть скрипт в windows xp работает а на 7 нет:((( Заранее благодарю!
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "All Files|*.*"
objDialog.FilterIndex = 1
objDialog.InitialDir = objFS.GetParentFolderName(WScript.ScriptFullName)
intResult = objDialog.ShowOpen
If intResult = 0 Then Wscript.Quit
strFilePath = objDialog.FileName
Const FOR_READING = 1
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.Workbooks.Add
objExcel.ActiveWorkbook.Worksheets(1).Range("C:C").NumberFormat = "@" ' текстовый формат
objExcel.ActiveWorkbook.Worksheets(1).Range("F:F").NumberFormat = "@"
objExcel.Cells(1, 1).Value = "Дата платежа"
objExcel.Cells(1, 2).Value = "Плательщик"
objExcel.Cells(1, 3).Value = "Р/С плательщика"
objExcel.Cells(1, 4).Value = "Банк плательщика"
objExcel.Cells(1, 5).Value = "Получатель"
objExcel.Cells(1, 6).Value = "Р/С получателя"
objExcel.Cells(1, 7).Value = "Банк получателя"
objExcel.Cells(1, 8).Value = "Сумма"
n = 2
While Not objTS.AtEndOfStream
str = objTS.ReadLine
If str = "СекцияДокумент=Платежное поручение" Then
str2 = ""
While str <> "КонецДокумента"
str = objTS.ReadLine
str2 = str2 & str & ";"
Wend
' Дата
pos1 = InStr(str2, "Дата=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-5
If l>0 Then
value = Trim(Mid(str2, pos1+5, l))
objExcel.Cells(n, 1).Value = value
End If
End If
' Плательщик
pos1 = InStr(str2, "Плательщик1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-12
If l>0 Then
value = Trim(Mid(str2, pos1+12, l))
objExcel.Cells(n, 2).Value = value
End If
Else
pos1 = InStr(str2, "Плательщик=") ' Если нет поля "Плательщик1"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-11
If l>0 Then
value = Trim(Mid(str2, pos1+11, l))
objExcel.Cells(n, 2).Value = value
End If
End If
End If
' Р/с плательщика
pos1 = InStr(str2, "ПлательщикРасчСчет=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-19
If l>0 Then
value = Trim(Mid(str2, pos1+19, l))
objExcel.Cells(n, 3).Value = value
End If
Else
pos1 = InStr(str2, "ПлательщикСчет=") ' Если нет поля "ПлательщикРасчСчет"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-15
If l>0 Then
value = Trim(Mid(str2, pos1+15, l))
objExcel.Cells(n, 3).Value = value
End If
End If
End If
' Банк плательщика
pos1 = InStr(str2, "ПлательщикБанк1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-16
If l>0 Then
value = Trim(Mid(str2, pos1+16, l))
objExcel.Cells(n, 4).Value = value
End If
End If
' Получатель
pos1 = InStr(str2, "Получатель1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-12
If l>0 Then
value = Trim(Mid(str2, pos1+12, l))
objExcel.Cells(n, 5).Value = value
End If
Else
pos1 = InStr(str2, "Получатель=") ' Если нет поля "Получатель1"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-11
If l>0 Then
value = Trim(Mid(str2, pos1+11, l))
objExcel.Cells(n, 5).Value = value
End If
End If
End If
' Р/с получателя
pos1 = InStr(str2, "ПолучательРасчСчет=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-19
If l>0 Then
value = Trim(Mid(str2, pos1+19, l))
objExcel.Cells(n, 6).Value = value
End If
Else
pos1 = InStr(str2, "ПолучательСчет=") ' Если нет поля "ПолучательРасчСчет"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-15
If l>0 Then
value = Trim(Mid(str2, pos1+15, l))
objExcel.Cells(n, 6).Value = value
End If
End If
End If
' Банк получателя
pos1 = InStr(str2, "ПолучательБанк1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-16
If l>0 Then
value = Trim(Mid(str2, pos1+16, l))
objExcel.Cells(n, 7).Value = value
End If
End If
' Сумма
pos1 = InStr(str2, "Сумма=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-6
If l>0 Then
value = Trim(Mid(str2, pos1+6, l))
objExcel.Cells(n, 8).Value = value
End If
End If
n = n + 1
End If
Wend
Добрый день! подскажите пожалуйста есть скрипт в windows xp работает а на 7 нет:((( Заранее благодарю!
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "All Files|*.*"
objDialog.FilterIndex = 1
objDialog.InitialDir = objFS.GetParentFolderName(WScript.ScriptFullName)
intResult = objDialog.ShowOpen
If intResult = 0 Then Wscript.Quit
strFilePath = objDialog.FileName
Const FOR_READING = 1
Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.Workbooks.Add
objExcel.ActiveWorkbook.Worksheets(1).Range("C:C").NumberFormat = "@" ' текстовый формат
objExcel.ActiveWorkbook.Worksheets(1).Range("F:F").NumberFormat = "@"
objExcel.Cells(1, 1).Value = "Дата платежа"
objExcel.Cells(1, 2).Value = "Плательщик"
objExcel.Cells(1, 3).Value = "Р/С плательщика"
objExcel.Cells(1, 4).Value = "Банк плательщика"
objExcel.Cells(1, 5).Value = "Получатель"
objExcel.Cells(1, 6).Value = "Р/С получателя"
objExcel.Cells(1, 7).Value = "Банк получателя"
objExcel.Cells(1, 8).Value = "Сумма"
n = 2
While Not objTS.AtEndOfStream
str = objTS.ReadLine
If str = "СекцияДокумент=Платежное поручение" Then
str2 = ""
While str <> "КонецДокумента"
str = objTS.ReadLine
str2 = str2 & str & ";"
Wend
' Дата
pos1 = InStr(str2, "Дата=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-5
If l>0 Then
value = Trim(Mid(str2, pos1+5, l))
objExcel.Cells(n, 1).Value = value
End If
End If
' Плательщик
pos1 = InStr(str2, "Плательщик1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-12
If l>0 Then
value = Trim(Mid(str2, pos1+12, l))
objExcel.Cells(n, 2).Value = value
End If
Else
pos1 = InStr(str2, "Плательщик=") ' Если нет поля "Плательщик1"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-11
If l>0 Then
value = Trim(Mid(str2, pos1+11, l))
objExcel.Cells(n, 2).Value = value
End If
End If
End If
' Р/с плательщика
pos1 = InStr(str2, "ПлательщикРасчСчет=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-19
If l>0 Then
value = Trim(Mid(str2, pos1+19, l))
objExcel.Cells(n, 3).Value = value
End If
Else
pos1 = InStr(str2, "ПлательщикСчет=") ' Если нет поля "ПлательщикРасчСчет"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-15
If l>0 Then
value = Trim(Mid(str2, pos1+15, l))
objExcel.Cells(n, 3).Value = value
End If
End If
End If
' Банк плательщика
pos1 = InStr(str2, "ПлательщикБанк1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-16
If l>0 Then
value = Trim(Mid(str2, pos1+16, l))
objExcel.Cells(n, 4).Value = value
End If
End If
' Получатель
pos1 = InStr(str2, "Получатель1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-12
If l>0 Then
value = Trim(Mid(str2, pos1+12, l))
objExcel.Cells(n, 5).Value = value
End If
Else
pos1 = InStr(str2, "Получатель=") ' Если нет поля "Получатель1"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-11
If l>0 Then
value = Trim(Mid(str2, pos1+11, l))
objExcel.Cells(n, 5).Value = value
End If
End If
End If
' Р/с получателя
pos1 = InStr(str2, "ПолучательРасчСчет=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-19
If l>0 Then
value = Trim(Mid(str2, pos1+19, l))
objExcel.Cells(n, 6).Value = value
End If
Else
pos1 = InStr(str2, "ПолучательСчет=") ' Если нет поля "ПолучательРасчСчет"
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-15
If l>0 Then
value = Trim(Mid(str2, pos1+15, l))
objExcel.Cells(n, 6).Value = value
End If
End If
End If
' Банк получателя
pos1 = InStr(str2, "ПолучательБанк1=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-16
If l>0 Then
value = Trim(Mid(str2, pos1+16, l))
objExcel.Cells(n, 7).Value = value
End If
End If
' Сумма
pos1 = InStr(str2, "Сумма=")
If pos1>0 then
pos2 = InStr(pos1, str2, ";")
l = pos2-pos1-6
If l>0 Then
value = Trim(Mid(str2, pos1+6, l))
objExcel.Cells(n, 8).Value = value
End If
End If
n = n + 1
End If
Wend
Версия данной статьи для Microsoft Office XP, Office 2000 и Office 97: .
Аннотация
Ошибка выполнения '429': Компоненту ActiveX не удается создать объект
Данная ошибка возникает, когда модели COM (Component Object Model) не удается создать необходимый объект Automation, и поэтому объект Automation оказывается недоступен для Visual Basic. Эта ошибка возникает не на всех компьютерах.
В данной статье описывается диагностика и устранение часто встречающихся проблем, которые могут приводить к возникновению этой ошибки.
Дополнительная информация
В Visual Basic существует несколько причин ошибки 429. Данная ошибка возникает при выполнении одного из следующих условий:
Наличие ошибки в приложении.
Наличие ошибки в конфигурации системы.
Отсутствие какого-либо компонента.
Наличие поврежденного компонента.
Чтобы найти причину возникновения ошибки, необходимо изолировать проблему. Если ошибка 429 возникает на клиентском компьютере, используйте приведенные ниже сведения, чтобы изолировать и устранить ошибку в приложениях Microsoft Office.
Примечание. Некоторые из приведенных ниже сведений применимы также к COM-серверам без Microsoft Office. Однако в данной статье предполагается, что ошибка связана с автоматизацией приложений Microsoft Office.
Проверка кода
Прежде чем приступить к устранению ошибки, следует попытаться изолировать отдельную строку кода, из-за которой может возникать проблема.
В случае обнаружения отдельной строки кода, которая является причиной возникновения проблемы, выполните перечисленные ниже действия.
Проверьте, что в коде используется явное создание объекта.
Проблемы легче обнаружить, если можно сузить поле поиска до отдельного действия. Например, найдите использование неявного создания объекта в приведенных ниже примерах.
В обоих примерах используется неявное создание объекта. Microsoft Office Word 2003 не запускается до первого вызова переменной. Поскольку код вызова переменной может быть расположен в различных частях программы, локализация проблемы может оказаться непростой задачей. Бывает сложно определить, когда возникает проблема: при создании объекта Application или при создании объекта Document.
Вместо этого можно указать явные вызовы для создания каждого объекта в отдельности, как показано ниже.
При использовании явных вызовов для создания каждого объекта по отдельности изолировать проблему легче. Это также может сделать код более удобным для чтения.
При создании экземпляра приложения Microsoft Office используйте функцию CreateObject вместо оператора New.
Функция CreateObject устанавливает тесное соответствие с процессом создания, который используется большинством клиентов Microsoft Visual C++. Функция CreateObject также позволяет изменять идентификатор CLSID сервера между версиями. Функцию CreateObject можно использовать с объектами с ранней и поздней привязкой.
Убедитесь, что строка "ProgID", переданная функции
CreateObject, является верной, а затем убедитесь, что она не зависит от версии. Например, используйте строку "Excel.Application" вместо строки "Excel.Application.8". В системе, где возникает проблема, может быть установлена более старая или более новая версия Microsoft Office, отличная от версии, указанной в строке "ProgID".
Используйте команду Erl, чтобы вывести номер строки кода, в которой возникает ошибка. Это может облегчить отладку приложений, которые не запускаются в интегрированной среде разработки. Следующий код сообщает, какой объект
Automation не удается создать (Microsoft Word или Microsoft Office Excel 2003):
Для отслеживания ошибки используйте функцию MsgBox и номер строки.
Используйте позднюю привязку следующим образом:
Для объектов с ранней привязкой необходимо, чтобы их настраиваемые интерфейсы были маршалированы через границы процессов. Если настраиваемый интерфейс нельзя маршалировать при
выполнении функции CreateObject или оператора New, выводится ошибка 429. Объект с поздней привязкой использует определенный системой интерфейс IDispatch, который не требует маршалирования настраиваемого прокси. Чтобы проверить правильность выполнения этой процедуры, используйте объект с поздней привязкой.
Если проблема возникает только при использовании объекта с ранней привязкой, это свидетельствует о наличии проблемы в серверном приложении. Как правило, чтобы устранить проблему, достаточно переустановить приложение, как описано в разделе "Проверка сервера автоматизации" данной статьи.
Проверка сервера автоматизации
Наиболее распространенной причиной возникновения ошибки при выполнении функции CreateObject или оператора New является проблема с серверным приложением. Обычно причиной возникновения проблемы является установка или конфигурация приложения. Чтобы устранить неполадки, выполните перечисленные ниже действия.
Убедитесь в том, что приложение Microsoft Office, которое необходимо автоматизировать, установлено на локальном компьютере. Убедитесь в возможности запуска приложения. Для этого нажмите кнопку Пуск, выберите команду
Выполнить и попробуйте запустить приложение. Если приложение не запускается вручную, автоматизировать его нельзя.
Перерегистрируйте приложение описанным ниже образом.
В меню Пуск выберите
команду Выполнить.
В диалоговом окне Выполнить введите путь к серверу и в конце строки добавьте параметр /RegServer.
Приложение будет запущено без запроса. Приложение будет перерегистрировано как COM-сервер.
Если причиной возникновения проблемы является отсутствие раздела реестра, в большинстве случаев выполнение перечисленных ниже действий приводит к устранению проблемы.
Проверьте раздел LocalServer32 в разделе CLSID приложения, которое необходимо автоматизировать. Убедитесь в том, что раздел LocalServer32 указывает на правильное местоположение приложения. Проверьте, чтобы путь был указан в кратком формате (DOS 8.3). Сервер не обязательно регистрировать с использованием краткого пути. Однако длинные пути, включающие пробелы, в некоторых системах могут являться причиной возникновения проблем.
Чтобы проверить раздел пути, сохраненного для сервера, запустите редактор реестра описанным ниже образом.
В меню Пуск выберите
команду Выполнить.
Введите regedit, а затем нажмите кнопку
ОК.
Перейдите в раздел HKEY_CLASSES_ROOT\CLSID.
Чтобы найти раздел, представляющий приложение Microsoft Office, которое необходимо автоматизировать, используйте приведенные ниже значения раздела CLSID. Поверьте в разделе CLSID путь, указанный в разделе LocalServer32.
Сервер Microsoft Office Server
Проверьте, чтобы путь соответствовал реальному местоположению файла.
Примечание. Краткие пути могут иногда казаться правильными ошибочно. Например: и Microsoft Office, и Microsoft Internet Explorer (если они установлены в папки по умолчанию) имеют краткий путь вида C:\PROGRA~1\MICROS~X\ (где
X — это число). Этот путь может сначала не показаться кратким путем.
Чтобы определить, что путь указан верно, выполните перечисленные ниже действия.
В меню Пуск выберите
команду Выполнить.
Скопируйте значение из реестра и вставьте его в поле диалогового окна Выполнить.
Примечание. Перед запуском приложения удалите параметр /automation.
Проверьте правильность запуска приложения.
Проверьте шаблон Normal.dot или файл ресурсов Excel.xlb на предмет возможного повреждения. Проблемы при автоматизации Microsoft Word или Microsoft Excel могут возникать вследствие повреждения шаблона Normal.dot в Microsoft Word или файла ресурсов Excel.xlb в Microsoft Excel. Чтобы проверить эти файлы, выполните поиск всех экземпляров Normal.dot или Excel.xlb на локальном жестком диске.
Примечание. В системах с Microsoft Windows 2000 или Microsoft Windows XP может присутствовать несколько копий этих файлов. Для каждого профиля пользователя, установленного в системе, имеется одна копия каждого из этих файлов.
Временно переименуйте файлы Normal.dot или Excel.xlb и повторно запустите проверку автоматизации. Если Microsoft Word и Microsoft Excel не находят эти файлы, они создают их снова. Убедитесь, что код работает. Если при создании нового файла Normal.dot код работает, удалите переименованные файлы. Эти файлы повреждены. Если код не работает, необходимо обратно переименовать эти файлы, чтобы сохранить пользовательские параметры, сохраненные в этих файлах.
На компьютере с операционной системой Windows 2000 можно запустить приложение с учетной записью администратора. Серверы Microsoft Office Server должны иметь доступ на чтение и запись к реестру и дисковому накопителю. Если текущие параметры безопасности запрещают доступ на чтение и запись, загрузка серверов Microsoft Office Server может выполняться с ошибками.
Проверка системы
Конфигурация системы также может являться причиной возникновения проблем при создании внепроцессных COM-серверов. Чтобы устранить неполадки в системе, в которой возникают ошибки, выполните перечисленные ниже действия.
Определите, возникает ли проблема с каким-либо сервером вне процесса. Если приложение использует определенный COM-сервер (например, Microsoft Word), проверьте другой сервер вне процесса, чтобы убедиться в том, что проблема не связана непосредственно с уровнем COM. Если на компьютере не удается создать внепроцессный COM-сервер, переустановите системные файлы OLE, как описано в разделе "Переустановка Microsoft Office" данной статьи, или переустановите операционную систему, чтобы устранить проблему.
Проверьте номера версий системных файлов OLE, которые управляют автоматизацией. Эти файлы обычно устанавливаются в наборе. Номера сборки этих файлов должны совпадать. Неправильно настроенная программа установки может ошибочно установить файлы по отдельности. В этом случае файлы не будут сочетаться. Чтобы избежать проблем при автоматизации, убедитесь, что номера сборки этих файлов совпадают.
Файлы автоматизации расположены в каталоге Windows\System32 или в каталоге Winnt\System32. Проверьте перечисленные ниже файлы.
Читайте также: