Createobject excel application ошибка
Добрый день! подскажите пожалуйста есть скрипт в 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
В этой статье рассматриваются различные поведения, которые возникают при использовании функций GetObject и CreateObject с различными версиями Microsoft Office приложений.
GetObject и CreateObject — это функции, предоставляемые Microsoft Visual Basic и Microsoft Visual Basic для приложений (VBA). Однако эти сведения также применимы к Microsoft Visual C++, если ссылки на GetObject рассматриваются как вызовы API GetActiveObject, а ссылки на CreateObject — как вызовы CoCreateInstanceAPI.
Дополнительная информация
GetObject
GetObject используется для подключения к работающему экземпляру сервера автоматизации. Существует несколько различных способов вызова GetObject, но синтаксис, рекомендуемый для Microsoft Office приложений, выглядит следующим образом:
Если выполняется несколько экземпляров Microsoft Excel, GetObject подключается к экземпляру, который запускается первым. Если затем закрыть первый экземпляр, другой вызов GetObject присоединяется к второму запущенным экземпляру и т. д.
Вы можете подключиться к определенному экземпляру, если знаете имя открытого документа в этом экземпляре. Например, если экземпляр Excel работает с открытой книгой Book2, следующий код успешно присоединяется к данному экземпляру, даже если он не является ранним запущенным экземпляром:
CreateObject
CreateObject используется для запуска нового экземпляра сервера автоматизации. Например:
В зависимости от того, предназначен ли сервер как SingleUse или MultiUse, может быть запущен другой серверный процесс. Это может быть важным различием при принятии решения о принудительном завершении работы экземпляра службы автоматизации. Например, при использовании сервера MultiUse, если экземпляр уже запущен перед подключением к серверу, может потребоваться избежать программного завершения работы сервера после завершения его автоматизации.
Приведенная ниже таблица служит полезной ссылкой при реализации решения с Microsoft Office. В нем перечислены поведения и атрибуты различных версий и приложений Microsoft Office, например, отображается ли сервер по умолчанию при запуске, если это SingleUse или MultiUse, если у него есть свойство UserControl, если у него есть метод Quit, и имя класса для главного окна.
Приложения | Visible | Instancing | Имеет UserControl | Имеет QuitClassName | Имя класса |
---|---|---|---|---|---|
Excel 97, 2000, 2002, 2003, 2007 | Нет | SingleUse | Да | Да | XlMain |
Word 97, 2000, 2002, 2003, 2007 | Нет | SingleUse | Да | Да | OpusApp |
PowerPoint 97 | Нет | MultiUse | Нет | Да | PP97FrameClass |
PowerPoint 2000 | Нет | MultiUse | Нет | Да | PP9FrameClass |
PowerPoint 2002 | Нет | MultiUse | Нет | Да | PP10FrameClass |
PowerPoint 2003 | Нет | MultiUse | Нет | Да | PP11FrameClass |
PowerPoint 2007 | Нет | MultiUse | Нет | Да | PP12FrameClass |
Access 97 | Да | SingleUse | Да | Да | OMain |
Access 2000, 2002, 2003, 2007 | Нет | SingleUse | Да | Да | OMain |
Project 98, 2000 г. | Нет | MultiUse | Да | Да | JWinproj-WhimperMainClass |
Имя класса главного окна удобно использовать для вызова API FindWindow, если вы хотите легко узнать, запущен ли какой-либо экземпляр. Свойство UserControl — это логическое свойство, указывающее, завершает ли серверное приложение автоматическое завершение работы при выпуске последней ссылки (задано значение nothing). Метод Quit позволяет переопределить свойство UserControl в тех случаях, когда это необходимо (например, если экземпляр не завершает работу после освобождения последней ссылки).
Как правило, корпорация Майкрософт рекомендует использовать новый экземпляр приложения Office вместо подключения к экземпляру, который может использовать пользователь. Лучше всего создать экземпляр с помощью Application ProgID, а затем открыть или создать новые объекты. Другие идентификаторы progID, например Excel. Лист и Word.Document и т. д. предназначены для использования в OLE (связывание объектов и внедрение) и могут давать несогласованные результаты при использовании с CreateObject. С помощью Application ProgID можно избежать потенциальных проблем, явно заверив сервер для автоматизации (не внедряя).
Завершив работу с сервером автоматизации, отпустите все ссылки на него и вызовите его метод Quit (если он доступен), чтобы сервер завершил работу должным образом. Если вы хотите настроить экземпляр с помощью службы автоматизации, а затем оставить его открытым для использования пользователем, необходимо задать для свойства UserControl значение TRUE, а затем освободить все ссылки. Затем сервер остается работающим (так как свойство UserControl имеет значение TRUE) и завершает работу соответствующим образом, когда пользователь закрывает приложение (так как отсутствуют необработанные ссылки).
Примечание Для Word свойство UserControl доступно только для чтения. Для него нельзя задать значение True или False. Word всегда остается работающим при выпуске последней ссылки.
Версия данной статьи для 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. Проверьте перечисленные ниже файлы.
We have Office 2010. We have several Access 2010 databases that run VBA code that among other things, calls a routine to export data to an Excel spreadsheet. These have been working well for several years. We have several people run these databases locally on their Windows 7 machines. Lately, we have 2 users that suddenly are having problems with this export routine. None of the VB code has changed and the other users can still run it successfully. The line of code that is generating the 424 - Object Required error is in bold below. Its the Set objExcel = CreateObject("Excel.Application") line. The CreateObject function is not creating the Excel application object. Excel is on the user's machine and he can launch it manually and has no problems with it. These issues started about a month ago and we cannot determine the cause. We assume its some sort of corruption with a DLL or something in amiss in the registry. Like I said, he ran this successfully for almost 2 years before it starting having problems and nothing has changed in the code. As you can see, we are using late-binding. We have also converted this to early-binding (using the MS Excel 14.0 Object Library and MS Office 14.0 Object Library) as references and have verified that he has these on his machine.
This is not a Access problem but an Excel problem. I have also created a Word document containing a macro that attempts to create the Excel.Application object using the CreateObject command and it generates the same error. I have even created VBScript files that do the same thing and it generates the same error. I also created VBScript files that create a Word.Application object, a Powerpoint.Application object and they work successfully. Its only the Excel.Application object creation that is failing.
Our IT department has run repairs on Office which did not correct the error and they have uninstalled and reinstalled Office and that also did not fix the problem. We even had them give one user a new machine and this solved the problem for about 3 weeks and then he started getting the error again.
Public Function ExcelExport(ByVal strfilename As String, ByVal strWKSheet As String, ByVal strMyRange As String, ByVal strDBName As String, _
ByVal strMyQuery As String, ByVal blnIsCopyFile As Boolean, ByVal blnHeaderRow As Boolean, _
ByVal strOldRange As String, Optional strPara1 As String = "", Optional strPara2 As String = "", _
Optional strrow As String, Optional strcellvalue As String) As Boolean
'Purpose: Exports data from an Access query to an Excel spreadsheet
'Accepts: strfilename - the name of the Excel spreadsheet file to import the data into
' strWKSheet - the name of the worksheet to import the data into
' strMyRange - the first cell where the data will be written
' strDBName - the filename of the Access database used for exporting the data
' strMyQuery - the Access query that generates the data to export
' blnIsCopyFile - not used
' blnHeaderRow -
' strOldRange - an Excel range that will be cleared out
' strPara1 - a parameter value to pass to the Access query
' strPara2 - a parameter value to pass to the Access query
' strrow - an Excel range that will be set to "cellvalue"
' strcellvalue - a value that will be set in the "row" parameter Excel range
'Returns: True if no error, False otherwise
Dim lngColumn As Long
Dim objExcel As Object
Dim objWorkbook As Object
Dim objWorksheet As Object
Dim objCell As Object
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
DoCmd.Hourglass True
On Error GoTo ErrorHandler
ExcelExport = False
If IsFileOpen(strfilename) Then
'msgbox buttons system modal, ok
MsgBox "File - '" & strfilename & "' is open. Please close it and try again.", vbSystemModal
GoTo ErrorHandler
End If
Set objExcel = CreateObject("Excel.Application")
' Change True to False if you do not want the workbook to be visible when the code is running
objExcel.Visible = False
' actual path and filename of the EXCEL file into which you will write the data
Set objWorkbook = objExcel.Workbooks.Open(strfilename)
' Replace WorksheetName with the actual name of the worksheet in the EXCEL file (note that the worksheet must already be in the EXCEL file)
Set objWorksheet = objWorkbook.Worksheets(strWKSheet)
If strOldRange <> "" Then
Set objCell = objWorksheet.Range(strOldRange)
objWorksheet.Select
objCell.Select
'objCell(Selection, Selection.End(xlDown)).Select
objCell.ClearContents
End If
' Replace A1 with the cell reference into which the first data value is to be written
Set objCell = objWorksheet.Range(strMyRange) ' this is the first cell into which data go
If strDBName = "CurrentDb" Then
Set dbs = CurrentDb
Else
Set dbs = Workspaces(0).OpenDatabase(strDBName)
End If
If strrow <> "" Then objWorksheet.Range(strrow).Value = strcellvalue
' name of the table or query whose data are to be written into the worksheet
Set rst = RunSelectQry(strDBName, strMyQuery, strPara1, strPara2, rst, dbs)
If rst.EOF = False And rst.BOF = False Then
rst.MoveFirst
If blnHeaderRow = True Then
'write field names as the header row
For lngColumn = 0 To rst.Fields.Count - 1
objCell.Offset(0, lngColumn).Value = rst.Fields(lngColumn).Value
Next lngColumn
Set objCell = objCell.Offset(1, 0)
End If
objWorksheet.Range(strMyRange).CopyFromRecordset rst
End If
ExcelExport = True
ErrorHandler:
DoCmd.Hourglass False
' Close the EXCEL file while saving the file, and clean up the EXCEL objects
If Not (objCell Is Nothing) Then Set objCell = Nothing
If Not (objWorksheet Is Nothing) Then Set objWorksheet = Nothing
If Not (objWorkbook Is Nothing) Then
objWorkbook.Close True ' close the EXCEL file and save the new data
Set objWorkbook = Nothing
End If
If Not (objExcel Is Nothing) Then
objExcel.Quit
Set objExcel = Nothing
End If
If Not rst Is Nothing Then
rst.Close
Set rst = Nothing
End If
If Not dbs Is Nothing Then
dbs.Close
Set dbs = Nothing
End If
If Err.Number <> 0 Then
If Err.Number = 9 Then
If Err.Description = "Subscript out of range" Then
'msgbox buttons system modal, ok
MsgBox "Worksheet '" & strWKSheet & "' does not exist in file - " & strfilename, vbSystemModal, "ExcelExport - " & strMyQuery
Else
'msgbox buttons system modal, ok
MsgBox Err.Number & " " & Err.Description, vbSystemModal, "ExcelExport - " & strMyQuery
End If
Else
'msgbox buttons system modal, ok
MsgBox Err.Number & " " & Err.Description, vbSystemModal, "ExcelExport - " & strMyQuery
End If
End If
End Function
This thread is locked. You can follow the question or vote as helpful, but you cannot reply to this thread.
Причиной является то, что запуская Excel этим способом, приложение не регистрирует себя в таблице выполняемых объектов (Running Object Table).
При этом приложение само себя регистрирует при одном из условий:
В статье решение дано просто шедевральное: запустить с фокусом, и поиграться с активацией формы VB.
А ничего, что Excel уже запущен вот в таком виде - без фокуса.
Да и после этого еще и нужно подождать около 1 сек., чтобы наконец без ошибок выполнить:
Помогите, пожалуйста, разобраться. Думаю, интересный вопрос.
--
P.S. аналитика, если читаешь привет Спасибо за твое решение с "AccessibleObjectFromWindow".
Ошибка выполнения "429". Компоненту ActiveX не удалось создать объект
Здравствуйте, при выполнении макроса возникает ошибка "Ошибка выполнения "429". Компоненту ActiveX.
Ошибка "429". Компоненту ActiveX не удалось создать объект - VBA на MacBook MS Office 2011
Добрый день, есть макрос для объединения (копирования) книг, находящихся в одной папке, в одну.
Необходимо создать компоненту ActiveX на C++ и Qt
Необходимо создать компоненту ActiveX на C++ и Qt. Потом нужно будет ее сопровождать и.
Подключение к существующему Ole серверу Excel
Код CreateObject("Excel.Application"); создает новый экземпляр процесса Excel, а как подключится к.
Вызвать метод к уже существующему экземпляру класса
Здравствуйте, помогите пожалуйста вызвать метод закрытия, я понимаю что возможно это просто и для.
Error 429: ActiveX component can't create object
When I try to create object in ASP the following error appear. The same object from visual basic.
Как обойти ошибку 429 can't create activeX object
Следующий код её вызывает Dim oResponse As ASPTypeLibrary.Response Sub SomeSub() Set.
ActiveX component can't creat object. Run-time error '429'
На всех компах, где есть мои предыдущие творения на VB6, новая прога работает, а на "чистых" выдает.
На New MSComm получаю ошибку ошибка 429 ACtiveX component can't create object
Здравствуйте, что-то на строке Dim MSComm1 As MSComm Set MSComm1 = New MSComm 'стал получать.
Читайте также: