Createobject word application не работает
Есть шаблонный файл docx с несколькими разрешенными областями редактирования.
Хочу получить значение одной из них.
Set WA = CreateObject ("Word.Application")
Set wdoc = WA.Documents.Open
А потом непонятно, как обратиться определенной области редактирования.
Всякие секции и параграфы не подойдут.
lmike
нет, пердело совершенство
Более гибким будет замена по шаблону (но там тоже есть засада с длиной текста) - т.е. создаем текст (а не поле) помеченный к-л тегами (я, для себя избрал )
почему - для того чтобы м.б. одинаковые "названия" для подстановки
поиск и замену выкладывал здесь, ЕМНИП - в двух вариантах: с использованием COM и POI
последнее - предпочтительнее, работает быстрее, нет ограничение на длину подстановки (я не втыкался)
alexas1
неплохой вариант размещать "области редактирования" в ячейки таблицы ворд (можно без границ), тогда просто писать в нужную ячейку (номер табл. известен номер ячейки тоже)
seoman2
Msgbox Cstr(wdoc.Bookmarks.Count) выдает 0.
На основе шаблона на скрине в лотусовой базе есть много доков с заполненным шаблоном.
Мне надо получить значение в поле "Текст".
Менять шаблон уже нельзя.
Вложения
lmike
нет, пердело совершенство
неплохой вариант размещать "области редактирования" в ячейки таблицы ворд (можно без границ), тогда просто писать в нужную ячейку (номер табл. известен номер ячейки тоже)
с таблицами есть особенности: обтекание, переносы, опять же вложенные - не всегда адекватно ведут себя, именами - только с офиса 2010 (а номера могут и поплыть )
вот потому я и остановился на решении выше
а еще - бывает нужно заменить таблицу целиком (это проще - чем итерировать её стр-ру)
lmike
нет, пердело совершенство
lmike
нет, пердело совершенство
seoman2
Msgbox Cstr( worddoc.Sections(2).FormFields(1).Name ) - нет такого объекта у меня, как FormFields.
Поле не я создавал (
lmike
нет, пердело совершенство
Msgbox Cstr( worddoc.Sections(2).FormFields(1).Name ) - нет такого объекта у меня, как FormFields.
Поле не я создавал (
я не могу сказать - что у вас есть, у меня и дока нет.
и в принципе, как уже не раз здесь говорил - ССЗБ - накорячили документ, запихнули туда "неизвестно что", используем КОМ, в кот. свои особенности.
Чем не метод заполнения доков - как указано было выше? Переделайте их (шаблоны) под свой документооборот, выкиньте свисто-перделки добавленные неучами МСО - всё - проблема решена
да, не забудьте снять защиту с доков (может в этом причина ваших "проблем), если "ворд" приложен к документу нотуса - не нужна ему псевдо-защита от МС
Мы, сейчас, обсуждаем с вами тему, кот. никаким боком не относится к LDN
seoman2
Могу прислать такой док, но не на форум.
У меня есть рабочий документооборот, в каждом лотусовом документе в одном из полей вложен шаблонный docx файл, в котором юзеры заполняют разрешенные для редактирования поля. Мне нужно у таких доков вытянуть содержимое поля "текст".
lmike
нет, пердело совершенство
lmike
нет, пердело совершенство
это VB, переделать код на LS несложно - типы убрать, ActiveDocument не нужен - wdoc у вас, цикл заменить на forall. End forall
seoman2
С параграфами я пробовал. Если в поле "Текст" будет много параграфов, как не взять лишние?
Я как бы думал, брать все параграфы со второй секции, пропустив несколько первых, но тогда зацеплю и . последующие за "текст" поля.
lmike
нет, пердело совершенство
if будет срабатывать только для тех параграфов, у кот. есть права на "редактирование" (на самом деле - присвоены те - кто может редактировать)
lmike
нет, пердело совершенство
стразу оговорюсь - такой способ управления информацией в ворде - порочен, в принципе
будет глючать, программный доступ с абзацам (через VBA) работает не всегда стабильно
бывает наслоение всяких объектов/стилей. как результат - сам ворд как-то кажет и находит текст, а вот программно - нет
сталкивался с таким в букмарках (иногда помогало убиение текст и воссоздание заново без форматирования)
второй момент - у вас невозможно отследить - куда ввели текст - т.е. текст получить можно , но понять к чему он относится - нет
Отсюда вывод - информация должна заводится в нотус (в виде полей/документов. ) и оттуда подставляться в ворд (в нужные места)
Пользователя НУЖНО максимально изолировать от возможности вносить изменения в МСО, тогда - большинстово проблем отпадет
Желательно, на выходе, получать ПДФ (дабы исправлять стало ощутимо сложнее)
Эта статья содержит советы по устранению неполадок для диагностики и устранения неполадок, вызывающих возникновение этой ошибки.
Дополнительные сведения
В отличие от некоторых ошибок в Visual Basic нет не одной из причин об ошибке 429. Проблема возникает из-за ошибки в конфигурации системы или приложения или компонента отсутствует или поврежден. Поиск точная причина заключается в возможности устранения. При возникновении этой ошибки на клиентском компьютере, существует ряд вещей, которые необходимо проверить для выявления и устранения ошибки.
Позже, элементы предоставляют некоторые практические советы по устранению данной ошибки при работе с приложениями Office. Часть этой информации также относится к серверам Microsoft Office COM также, но в данной статье предполагается, что вы пытаетесь автоматизации Microsoft Office.
Проверка кода
Первое место, чтобы начать поиск проблемы — в коде. До устранения ошибки, необходимо знать, где произошла ошибка. Попробуйте сузить до одной строки кода.
Найдя код, который не удается, попробуйте сделать следующее:
Убедитесь, что в коде используется явное создание объекта. Любые проблемы проще найти и определить, если проблема сведена до отдельного действия. Например не выполните следующее:
Оба эти метода используется неявное создание объекта. Microsoft Word не начинается, пока переменная называется по крайней мере один раз. Поскольку переменная может вызываться в разных частях программы, это может сделать проблему трудно локализовать. Кроме того неясно, связана ли проблема с созданием объекта приложения или объекта документа.
Вместо этого указать явные вызовы для создания каждого объекта в отдельности:
Это упрощает выявление проблемы и делает код более удобным для чтения.
При создании экземпляра приложения Microsoft Office, используйте вместо New CreateObject . CreateObject более точно соответствует процесс создания, используемый большинство клиентов Visual C++ и позволяет возможные изменения CLSID сервера между версиями. Функция CreateObject можно использовать с объектами с ранним связыванием и поздним связыванием.
Проверьте правильность строки ProgID, передаваемые CreateObject , а также является независимость от версии (то есть использовать «Excel.Application» вместо «Excel.Application.8»). Возможно, что система, которую дает сбой имеет более старой или новой версии Microsoft Office до версии, указанной в идентификатор ProgID.
Для упрощения отладки приложений, которые не запускаются в Интегрированной среде разработки, команда Erl сообщить номер строки, который не проходит. Например следующий код сообщит, какой объект автоматизации невозможно (Word или Excel):
При автоматизации из ASP или компонента MTS используйте CreateObject вместо Server.CreateObject(). Используя Server.CreateObject будет создан экземпляр приложения Office с использованием идентификатора пакета MTS, который приводит к проблемам с Microsoft Office.
Проверка сервера автоматизации
Самые распространенные причины возникновения ошибки CreateObject или New , проблем с самим приложением сервера. Как правило эти проблемы являются конфигурации или установки приложения. Ниже приведены некоторые элементы для проверки.
Проверьте Microsoft Office, приложение, которое требуется автоматизация установлена на локальном компьютере и убедитесь в том, что можно запустить приложение с самого начала и запустить диалоговое окно. Если программа не может быть запущена вручную, он не будет работать через автоматизацию.
Известны проблемы возникает при автоматизации Word или Excel, если шаблон Normal.dot (Word) или файл ресурсов Excel.xlb (Excel), был поврежден. Чтобы проверить, если произошло повреждение, поиск локальных жестких дисков для поиска всех экземпляров Normal.dot или *.xlb. (Обратите внимание, что при запуске Windows 2000, Windows NT или Windows 95 или Windows 98 с включенными профилями, может оказаться несколько копий этих файлов для каждого профиля пользователя в системе.) Временно переименуйте файлы Normal.dot или файлы *.xlb и повторно запустите проверку автоматизации (Word и Excel создаст эти файлы, если они не может их найти). Код теперь работать? Если Да, выберите файлы, которые вы переименовали следует удалить, так как они повреждены. Если это не так, переименуйте их обратно в их исходные имена, будут потеряны все пользовательские параметры, сохраненные в этих файлах.
При работе в Windows NT, Windows 2000, Windows XP или Windows Server 2003 система, запустите приложения под учетной записью администратора. Серверов Office требуется доступ на чтение и запись в реестре и на диске и могут не загружаться должным образом, если ваши текущие параметры безопасности запрещают эту привилегию.
Проверка системы
Конфигурация системы также может вызвать проблемы с созданием out-of-process COM-серверов. Ниже приведены несколько советов по проверке систем место возникновения ошибки.
Проблема происходит с любым сервером out-of-process? Если у вас есть приложение, которое использует только определенный COM-сервер (например, Word), вы захотите проверить на другой сервер out-of-process, чтобы убедиться, что проблема не связана с COM сам слой. Если нет out-of-process COM-сервера могут быть созданы в этой системе, переустановке системы OLE файлов (см. ниже), или для устранения этой проблемы потребуется переустановка операционной системы.
Проверьте номера версий системных файлов OLE, которые управляют автоматизацией. Эти файлы обычно устанавливаются как набор и должно соответствовать номера построений. Неправильно настроенная программа установки может ошибочно установить файлы по отдельности, к ним становятся несоответствие. Чтобы избежать проблем при автоматизации, следует проверять файлы, убедитесь, что файлы совпадают построений.
Файлы автоматизации можно найти в каталоге Windows\System или Winnt\System32. Ниже приведен список файлов для проверки:
+---------------+-------------+----------------+
| File Name | Version | Date Modified |
+---------------+-------------+----------------+
| Asycfilt.dll | 2.40.4275 | March 08, 1999 |
| Oleaut32.dll | 2.40.4275 | March 08, 1999 |
| Olepro32.dll | 5.0.4275 | March 08, 1999 |
| Stdole2.tlb | 2.40.4275 | March 08, 1999 |
+---------------+-------------+----------------+
Проверьте версию файла, щелкните правой кнопкой мыши файл в обозревателе и при выборе свойства из всплывающего меню. Наиболее важные значения, последние четыре цифры в версии файла (номер сборки) и дату последнего изменения. Необходимо убедиться, что эти значения одинаковы для всех файлов автоматизации.
Обратите внимание, что номера версии и даты, приведенном выше, например исключительно в целях. Значения могут отличаться. Важно, что эти значения соответствуют друг другу, а не в этой таблице.
Если файлы не соответствуют номера сборок или даты изменений, вы можете загрузить самораспаковывающийся программа обновит файлы автоматизации. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
290887 VBRun60sp6.exe устанавливает файлы времени выполнения Visual Basic 6.0 SP6
Windows NT 4.0 имеет известные проблемы с запуском серверы автоматизации, которые находятся в папке, которая содержит пробелы в имени и напоминает другую папку, совпадают с первыми 8 символами. Например сервер, живущих в C:\Program Files\SomeFolder может не запуститься во время вызова к CreateObject, если система называется C:\Program Stuff\SomeFolder другую папку. Дополнительные сведения см в следующей статье базы знаний:Дополнительные сведения об этой проблеме и действия, чтобы избежать этого, щелкните следующий номер статьи базы знаний Майкрософт:
Ошибка 185126 : COM и OLE-сервер не запускается в Windows NT 4.0
Переустановка Microsoft Office.
Если ни один из предыдущих шагов позволяет устранить проблему, рассмотрите возможность удаления и переустановки Microsoft Office. Корпорация Майкрософт рекомендует сначала удалить существующую версию, а затем переустановите с исходных установочных дисков.
Полный список удаляемых элементов можно найти в следующих статьях базы знаний:
219423 OFF2000: как полностью удалить Microsoft Office 2000
158658 OFF97: как полностью удалить Microsoft Office 97
Ссылки
240377 HOWTO: Убедитесь в правильности установки Jet 3.5 (часть I)
Последние сведения и примеры кода по автоматизации Microsoft Office можно найти на сайте поддержки Microsoft Online по:
Версия данной статьи для 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. Проверьте перечисленные ниже файлы.
В этой статье рассматриваются различные поведения, которые возникают при использовании функций 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 всегда остается работающим при выпуске последней ссылки.
When I debug, the error comes from the line: Set wrdApps = CreateObject("Word.Application") .
It was working, then it started giving me this error.
This post on OzGrid may help. Only difference I saw from what you have is that wrd.Apps would be set as Word.Application and wrd.Doc would be set as Word.Document.
try running a repair on Office, and restart your pc . the code you have CreateObject("Word.Application") should work fine
if the object you are trying to "get" has elevated privileges. it will return the 429 Error - dont open as administrator
7 Answers 7
I had an issue when upgrading from Windows 7 to 10 when bringing my hoard of VBA scripts with me. Still not sure what the root cause of the error is, but in the mean time this piece of code worked for me. This is a workaround that limits the need to have Word (or Outlook/Excel) already in open (manually) state, but should allow your script to run if you have your references set. Just change "CreateObject(" to "GetObject(, " . This will tell the system to use an already open window.
The complete code to use would be:
I recently had this happen to some code I had written. Out of nowhere (after running successfully for a few months), I would get the same Runtime Error '429'. This happened on two separate computers, the one I wrote and tested the code on months prior and the computer of the person who actually used the tool. It happened even though I used the original file on my machine and the user had been using his copy successfully for a few months, so I'm not convinced two separate files on two separate machines both got corrupted in the same manner. With that being said, I don't have a good explanation of why this occurred. Mine would happen on a similar line of code:
I had the reference to the scripting library included and had done this successfully in the past.
I was able to fix the problem by changing from late to early binding on that object:
I'm not entirely certain why that fixed the problem, but hopefully it will help others in the future with similar issues.
Читайте также: