Createobject word application не работает

GetObject и CreateObject поведение Office серверов автоматизации

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 выполняется при выполнении этого кода, у вас есть доступ к объектной модели запущенного экземпляра через переменную xlApp. Если экземпляр не запущен, вы получите следующее сообщение об ошибке, которое можно оказаться в ловушке:

Если запущено несколько экземпляров 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 всегда остается запущенным, когда будет выпущена последняя ссылка.

Источник

VBA Excel. Управление приложением Word

Создание нового экземпляра приложения Word из кода VBA Excel или подключение к открытому для работы с документами. Функции CreateObject и GetObject.

Работа с Word из кода VBA Excel
Часть 1. Управление приложением Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5]

Создание объекта Word.Application

Экземпляр приложения Word необходим для того, чтобы с его помощью создавать новые документы или открывать существующие для редактирования из кода VBA Excel.

Создать новый экземпляр объекта Word.Application можно при помощи раннего или позднего связывания, используя при позднем связывании функцию CreateObject. Подключиться к открытому экземпляру приложения Word можно только при помощи позднего связывания, используя функцию GetObject.

Раннее связывание приложения Word

Создание нового экземпляра Word.Application и присвоение ссылки на него переменной myWord:

Для раннего связывания переменной с объектом Word.Application необходимо подключить в редакторе VBA Excel ссылку на библиотеку Microsoft Word Object Library, если она не подключена. Подключается ссылка в окне «References VBAproject», перейти в которое можно через главное меню редактора: Tools–>References…

Раннее связывание позволяет при написании кода использовать лист подсказок для выбора и вставки свойств и методов привязанных объектов (Auto List Members). Если проект VBA Excel создается на заказ, то, после его завершения, раннее связывание следует заменить на позднее, так как на компьютере пользователя может не оказаться нужной библиотеки, и код работать не будет.

Источник

Createobject word application не работает

Нужно открыть документ Ворда из Ехеля…перерыл 400страниц этого сайта…вот ,что нашел…но ничего не работает …не открывает…в чем фокус.

Уважение: +0/-0
Offline

Re: Как из Excel с помощью макроса открыть файл Word
« Ответ #1 : 21 Февраль 2010, 16:41:39 »
___________________________________ _____
Открыть так:
Код:
Sub Открыть_документ_Word()
‘
‘ Открыть_документ_Word Макрос
‘ Открыть документ Word из Excel
‘
‘ Сочетание клавиш: Ctrl+d
‘
Dim WD
Set WD = CreateObject(«Word.Application»)
WD.Visible = True
WD.Documents.Open Filename:=Application.ThisWorkbook. Path & «\1.doc»
End Sub

——————————————————————————————————————————-
Sub q()
Dim Ворд As New Word.Application
Dim Документ As Word.Document
Dim Автотекст As Word.Document
Dim ПутьАвтотекста As String
Ворд.Visible = True
Set Документ = Ворд.Documents.Add
‘Путь можно узнать, записав код с помощью макрорекордера.
ПутьАвтотекста = «C:\Documents and Settings\Пользователь\Application Data\Microsoft\Document Building Blocks\1049\14\Built-In Building Blocks.dotx»
Set Автотекст = Ворд.Documents.Open(Filename:=ПутьА втотекста, Visible:=False)
Ворд.Templates(ПутьАвтотекста).Buil dingBlockEntries(«Простой номер 2»).Insert _
Where:=Документ.Sections(1).Headers (wdHeaderFooterPrimary).Range, RichText:=True
Автотекст.Close SaveChanges:=wdDoNotSaveChanges

полному пути?
Posted by Chas under Visual Basic, Пост-обзор
а если там шаблон будет не найден, то открывать его в одной папке где сам файл excel?
EducatedFool

Set oWord = CreateObject(«Word.Application»)

If Dir(«C:\моя папка\» & Filename$) <> «» Then Set oDoc = oWord.Documents.Add(«C:\моя папка\» & Filename$)

If Dir(ThisWorkbook.Path & Filename$) <> «» Then Set oDoc = oWord.Documents.Add(ThisWorkbook.Pa th & «\» & Filename$)

If oDoc Is Nothing Then MsgBox «Файл » & Filename$ & » не найден!», vbCritical, «Нет шаблона»: Exit Sub

Ваши желания
End Sub

Sub FillingWordFile()
Dim WD
Dim XL As Excel.Application
Set WD = CreateObject(«Word.Application»)
WD.Visible = True
WD.Documents.Open Filename:=Application.ThisWorkbook. Path & «\название файла.doc»

Range(«адрес ячейки»).Copy
WD.ActiveDocument.Bookmarks.Item(«н азвание закладки»).Range.Paste

End Sub
——————————————————————
Из всего этого выбираю такой код….открытия документа Ворд из Ехеля…но ничего не открывается …в чем может быть причина?
Sub МакросОткрытияДокуиента()
‘
‘ МакросОткрытияДокуиента
‘Dim AppWord As Word.Application

Set AppWord = CreateObject(«Word.Application»)
AppWord.Visible = True
AutoOpen = » C:\Documents and Settings\т\Мои документы\ Макрос переноса 1 строки.docx»
AppWord.Documents.Add
End Sub
———————————————————————
и этот вариант пробую … но ничего не открывается…
Sub Макрос ОТКРЫТИЯшаблона()

Set oWord = CreateObject(«Word.Application»)

If Dir(«C:\ Documents and Settings\т\Рабочий стол\КОНДУИТ \» & Filename$) <> «» Then Set oDoc = oWord.Documents.Add(«C:\ Documents and Settings\т\Рабочий стол\КОНДУИТ \» & Filename$)

If Dir(ThisWorkbook.Path & Filename$) <> «» Then Set oDoc = oWord.Documents.Add(ThisWorkbook.Pa th & «\» & Filename$)

If oDoc Is Nothing Then MsgBox «Файл » & Filename$ & » не найден!», vbCritical, «Нет шаблона»: Exit Sub

Источник

10.3 Объект Application

Объект Word.Application, запуск нового экземпляра Word, события объекта Word.Application

Объект Application — это само приложение Microsoft Word. Все остальные объекты Word «вложены» в этот объект. Создать этот объект — значит запустить Word на вашем компьютере. Как правило, это нам и надо (если мы создаем в формате Word из другого приложения, например, из Access). Но не забудьте — если вы запускаете Word из другого приложения Office, то необходимо добавить в ваш проект ссылку на библиотеку Microsoft Word 11.0 Object Library.

Код на запуск Word очень прост:

Dim oWord As New Word.Application

Однако, выполнив этот код из другого приложения, вы, скорее всего, даже не заметите, что у вас что-то произошло. Причины просты:

  • по умолчанию Word запускается в скрытом окне;
  • если в нем не открыт ни один документ, он тут же и закрывается (после того, как завершается создавшая его процедура).

Сделать Word видимым очень просто:

Однако возникает вопрос: а нужно ли его делать видимым? Некоторые знакомые разработчики утверждают, что не нужно. Пусть Word работает в скрытом окне, создавая требуемый документ. Когда пользователю потребуется, он этот документ откроет. Решать вам, но я предпочитаю, чтобы Word все-таки был видимым: во-первых, сразу видны все проблемы при создании документа, а, во-вторых, пользователям почему-то очень нравится, когда у них на глазах открывается Word и начинает печатать строки, которые в противном случае пришлось бы печатать им самим.

Если вы работаете с Word в скрытом окне, не забудьте после выполнения необходимых действий его закрыть (иначе он так и останется в оперативной памяти, видимый только через Task Manager). Для закрытия Word нужно вызвать его метод Quit().

Чтобы Word не закрывался сам собой, в нем достаточно создать новый документ. Подробно об этом будет рассказано в следующем разделе, но самый простой вариант создания нового документа Word выглядит так:

Dim oWord As New Word.Application

Если Word уже открыт, то можно получить на него ссылку, например, при помощи такого кода:

Set oWord = GetObject(,»Word.Application»)

Однако на практике, кроме очень специальных случаев (активизация объектов OLE), такой подход по сравнению с открытием нового экземпляра Word ничего нам не дает. Наоборот, появляется дополнительный риск нечаянно испортить открытый в существующем экземпляре созданный пользователем документ или закрыть существующий экземпляр Word без сохранения пользовательских документов. Поэтому лучше создавать новый экземпляр Word.

Если же ваш код VBA выполняется в Word (то есть Word уже запущен), то объект Application создавать уже не надо. В этой ситуации он будет автоматически доступен в любой момент (чтобы в этом убедиться, достаточно впечатать в окне редактора кода Application и добавить точку). Более того, если не указано, к какому объекту относится то или иное свойство или метод, компилятор VBA в Word автоматически считает, что это свойство или метод принадлежит объекту Application. Поэтому такой код функционально одинаков:

Application.Selection.TypeText «Мой текст»

Selection.TypeText «Мой текст»

Еще один важный момент, который связан с объектом Application в Word. Для этого объекта предусмотрено большое количество удобных в использовании событий (открытие документа, выход из Word, щелчок правой кнопкой мыши, изменение документа, печать документа, сохранение документа и т.п.) Однако по умолчанию все эти события не видны. Чтобы они появились, необходимо в разделе Declarations кода формы (только формы — не модуля!) объявить объект Application с ключевым словом WithEvents, например, так:

Public WithEvents App As Word.Application

В списке объектов у нас появится новый объект App (то есть Application), для которого можно выбрать события и добавлять код в событийные процедуры точно так же, как это мы делаем для формы и элементов управления.

Источник

Читайте также:  Как настроить телевидение билайн через приставку
Оцените статью