Createobject excel application ошибка

Обновлено: 05.07.2024

First, I created a workbook (Horray!! I can copy an paste code. Yeah, big deal). Then I changed the name of the first worksheet to 2011. Ok, worked great (I am almost coding on my own! Or so I thought.) Now, I am trying to name a bunch of worksheets in a sequence of years starting with the current year first. The array will count backwards to the year 2003. When I first got the "subscript out of range" error, I thought it was because I was using a counter that was bigger than the total amount of worksheets in the workbook. When I adjusted the "For i = 1 To 9" to "For i = 1 To 3" it did not matter. Now I think it has something to do with the argument in "Set objWorksheet = objWorkbook.Worksheets(i)". With the emphasis on (i) part. That is because when I just named the first worksheet, it read like this: "Set objWorksheet = objWorkbook.Worksheets(1)". I figured out that the "(1)" meant the first worksheet. If it had been a "(2)" it would name the second worksheet. Actually, I did not try that. be right back. Ok, yes that is precisely what happens. I just went back and named the 2nd worksheet "2010". So, I am not sure what the subscript out of range is about. I always got to come here because I can never find the documentation on specific stuff like this. Not that it is a bad thing, because you guys have been great.

Here is my code:

strFileName = "I:\Shared Documents\admin\My Documents\VBA\DailyNumberMidDay\DailyMidDay.xls"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = True
objExcel.DisplayAlerts = False

If objFSO.FileExists(strFileName) Then

Set objWorkbook = objExcel.Workbooks.Open(strFileName)
Set objWorksheet = objWorkbook.Worksheets(i)
x = 2011

For i = 1 To 3
objWorksheet.Name = x
x=x-1
Next
objWorkbook.SaveAs(strFileName)
objExcel.Quit
Else

Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(i)
x = 2011

For i = 1 To 3
objWorksheet.Name = x
x=x-1
Next
objWorkbook.SaveAs(strFileName)
objExcel.Quit
End If

I am working straight out of notepad on this. hang on. I have vbsedit. let me see something. Yeah, it says:

System: The storage control block address is invalid.

So I am guessing I can't put (i) in place of an actual worksheet number. Will somebody help me out with this please?

Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.

Сводка

В этой статье обсуждаются различные действия, которые возникают при использовании функций 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, может быть запущен другой процесс сервера. Это может быть важным различием для принятия решения о принудительном закрытии экземпляра Automation. Например, с сервером MultiUse, если экземпляр уже запущен перед присоединением к нему, может потребоваться не закрывать сервер программным путем, когда вы его автоматизируете.

Следующая таблица служит полезной ссылкой при реализации решения с Microsoft Office. В нем перечислены поведения и атрибуты различных версий и приложений Microsoft Office, например, будет ли сервер по умолчанию виден при запуске, является ли он singleUse или MultiUse, если у него есть свойство UserControl, если у него есть метод Quit, и имя класса для основного окна.

Application(s) Visible Instancing Имеет UserControl Has 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 — это свойство boolean, которое указывает, автоматически ли серверное приложение закрывается после выпуска последней ссылки (не установлено). Метод Quit позволяет переопределять свойство UserControl в тех случаях, когда это необходимо (например, когда экземпляр не закрывается после выпуска последней ссылки).

Как правило, Корпорация Майкрософт рекомендует использовать новый экземпляр приложения Office, а не присоединяться к экземпляру, который может использовать пользователь. Лучше всего создать экземпляр с помощью приложения ProgID, а затем открыть или создать новые объекты оттуда. Другие progID, например Excel. Лист и Word.Document и так далее предназначены для использования в OLE (объектное связывание и встраивление) и могут давать несовместимые результаты при использовании с CreateObject. С помощью ProgID-приложения можно избежать потенциальных проблем, явно заведя сервер для автоматизации (а не встраив).

После завершения работы с сервером автоматизации отпустите все ссылки на него и позвоните его методу Quit (если это доступно), чтобы сервер закрылся, как и ожидалось. Если вы хотите настроить экземпляр с помощью автоматизации, а затем оставить его открытым для пользователя, необходимо настроить свойство UserControl на TRUE, а затем освободить все ссылки. Затем сервер остается запущенным (так как свойство UserControl является TRUE) и закрывается надлежащим образом при закрытии приложения пользователем (так как не существует невыполнения ссылок).

Примечание Для Word свойство UserControl является только для чтения. Она не может быть заведома для True или False. Word всегда остается запущенным, когда будет выпущена последняя ссылка.

Версия данной статьи для Microsoft Office XP, Office 2000 и Office 97: 244264.

Аннотация

Ошибка выполнения '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

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. Проверьте перечисленные ниже файлы.

Добрый день!
Пытаюсь подружить свое web-приложение с excel, чтобы выводить результаты запросов пользователей не только в HTML виде.

Вот моя тестовая страничка hello.aspx:

Excel открывается, все прекрасно, могу делать что угодно, примеров куча.
Но этот скрипт выполняется на машите клиента, а я хочу, чтобы на сервере, я тогда в описание скрипта вписываю фразу RUNAT="Server". После этого появляются ошибки:

BC30188: Ожидалось объявление.
На строку: set app = createobject("Excel.Application")

Я пробовал оформить все как aspx:

Система ругается:
Операторы присваивания "Let" и "Set" больше не поддерживаются.
Убрал их, все сделал вот в таком виде:

Появляется ошибка:
Не удалось создать компонент ActiveX.
На строку: app = createobject("Excel.Application")

В общем приплыл к той же ошибке.
Я работаю не в Visual Studio, знаю что там как то подключается к проекту библиотека MS Office, я работаю в простом блокноке, IIS 7.
Не знаю как быть, подскажите, пожалуйста.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Не удалось создать компонент ActiveX, после переустановки MS Office
Всё работало нормально пока не переустановил MS Office (слетела активация офиса) :( После.


System.Exception: "Не удалось создать компонент ActiveX."
Хочу попробовать поизучать Visual Basic в Visual Studio 2017 Пробую открыть в нем экселевский файл.

Создать объект Excel.Application: var Obj=Server.CreateObject('Excel.Application');
мне нужно создать объект var Obj=Server.CreateObject('Excel.Application'); у меня стоит iis 4.0 .


Как создать ActiveX компонент
подскажите, как сделать ActiveX компонент? с расширением .ocx

Читайте также: