Создание нового экземпляра приложения Word из кода VBA Excel или подключение к открытому для работы с документами. Функции CreateObject и GetObject.
Работа с Word из кода VBA Excel
Часть 1. Управление приложением Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Создание объекта Word.Application
Экземпляр приложения Word необходим для того, чтобы с его помощью создавать новые документы или открывать существующие для редактирования из кода VBA Excel.
Создать новый экземпляр объекта Word.Application можно при помощи раннего или позднего связывания, используя при позднем связывании функцию CreateObject. Подключиться к открытому экземпляру приложения Word можно только при помощи позднего связывания, используя функцию GetObject.
Раннее связывание приложения Word
Создание нового экземпляра Word.Application и присвоение ссылки на него переменной myWord:
‘Создание экземпляра приложения Word ‘с ранней привязкой одной строкой Dim myWord As New Word.Application ‘Создание экземпляра приложения Word ‘с ранней привязкой двумя строками Dim myWord As Word.Application Set myWord = New Word.Application |
Для раннего связывания переменной с объектом Word.Application необходимо подключить в редакторе VBA Excel ссылку на библиотеку Microsoft Word Object Library, если она не подключена. Подключается ссылка в окне «References VBAproject», перейти в которое можно через главное меню редактора: Tools–>References…
Раннее связывание позволяет при написании кода использовать лист подсказок для выбора и вставки свойств и методов привязанных объектов (Auto List Members). Если проект VBA Excel создается на заказ, то, после его завершения, раннее связывание следует заменить на позднее, так как на компьютере пользователя может не оказаться нужной библиотеки, и код работать не будет.
Позднее связывание приложения Word
Создание нового экземпляра Word.Application с помощью функции CreateObject и присвоение ссылки на него переменной myWord:
Dim myWord As Object Set myWord = CreateObject(«Word.Application») |
Присвоение переменной myWord ссылки на открытый экземпляр приложения Word с помощью функции GetObject:
Dim myWord As Object Set myWord = GetObject(, «Word.Application») |
Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Чтобы ее избежать, следует предусмотреть создание нового экземпляра Word.Application с помощью функции CreateObject, если открытое приложение не будет найдено (смотрите пример 3).
В программы VBA Excel, работающие с Word, следует включать обработчик ошибок.
Закрытие объекта Word.Application
Новый экземпляр приложения Word открывается в фоновом режиме. Если необходимо его отобразить на экране перед завершением программы, используйте следующий код:
‘отображаем приложение Word myWord.Visible = True ‘освобождаем переменную от ссылки Set myWord = Nothing |
Если перед завершением процедуры VBA Excel необходимо приложение Word закрыть, используйте метод Quit:
‘закрываем приложение Word myWord.Quit ‘освобождаем переменную от ссылки Set myWord = Nothing |
Если переменная не содержит ссылку на приложение (myWord = Nothing), метод Quit возвратит ошибку. Чтобы этого не произошло, перед применением метода Quit необходимо проверить наличие ссылки в переменной myWord (смотрите пример 3).
Пример 1
Создаем новый экземпляр объекта Word.Application с ранним связыванием и отображаем его на экране:
Sub Primer1() Dim myWord As New Word.Application ‘———- ‘блок операторов для создания, открытия ‘и редактирования документов Word ‘———- myWord.Visible = True Set myWord = Nothing End Sub |
Запустите код примера 1 на выполнение. Вы увидите появившийся на панели задач ярлык приложения Word. Перейдите на него и закройте приложение вручную.
Пример 2
Создаем новый экземпляр объекта Word.Application с поздним связыванием, отображаем его на экране, останавливаем программу и наблюдаем закрытие приложения методом Quit:
Sub Primer2() Dim myWord As Object Set myWord = CreateObject(«Word.Application») ‘———- ‘блок операторов для создания, открытия ‘и редактирования документов Word ‘———- myWord.Visible = True MsgBox «Остановка программы» myWord.Quit Set myWord = Nothing End Sub |
Запустите код примера 2 на выполнение. Закройте информационное окно MsgBox и смотрите, как исчезнет с панели задач ярлык приложения Word, созданного перед остановкой кода.
Пример 3
Пытаемся создать ссылку на открытый экземпляр приложения Word с помощью функции GetObject, а если открытого экземпляра нет, создаем новый с помощью функции CreateObject:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub Primer3() Dim myWord As Object On Error Resume Next Set myWord = GetObject(, «Word.Application») If myWord Is Nothing Then Set myWord = CreateObject(«Word.Application») End If On Error GoTo Instr ‘———- ‘блок операторов для создания, открытия ‘и редактирования документов Word ‘———- myWord.Visible = True Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myWord = Nothing End If End Sub |
Строка On Error Resume Next
передаст управление следующему оператору, если открытого экземпляра программы Word не существует, и выполнение функции GetObject приведет к ошибке. В этом случае будет создан новый экземпляр Word.Application с помощью функции CreateObject.
В код добавлен обработчик ошибок On Error GoTo Instr
, который поможет корректно завершить программу при возникновении ошибки. А также он позволит во время тестирования не наплодить большое количество ненужных экземпляров приложения Word. Проверяйте их наличие по Диспетчеру задач (Ctrl+Shift+Esc) и удаляйте лишние.
Строка Exit Sub
завершит процедуру, если она прошла без ошибок. В случае возникновения ошибки, будет выполнен код после метки Instr:
.
title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date |
---|---|---|---|---|---|---|
Application.Quit Method (Word) |
vbawd10.chm158336081 |
vbawd10.chm158336081 |
word |
Word.Application.Quit |
0279d848-a8b7-dac7-1e84-a55c72789e3b |
06/08/2017 |
Application.Quit Method (Word)
Quits Microsoft Word and optionally saves or routes the open documents.
Syntax
expression . Quit( SaveChanges , Format , RouteDocument )
expression Required. A variable that represents an Application object.
Parameters
Name | Required/Optional | Data Type | Description |
---|---|---|---|
SaveChanges | Optional | Variant | Specifies whether Word saves changed documents before closing. Can be one of the WdSaveOptions constants. |
OriginalFormat | Optional | Variant | Specifies the way Word saves documents whose original format was not Word Document format. Can be one of the WdOriginalFormat constants. |
RouteDocument | Optional | Variant | True to route the document to the next recipient. If the document does not have a routing slip attached, this argument is ignored. |
Example
This example closes Word and prompts the user to save each document that has changed since it was last saved.
Application.Quit SaveChanges:=wdPromptToSaveChanges
This example prompts the user to save all documents. If the user clicks Yes, all documents are saved in the Word format before Word closes.
Dim intResponse As Integer intResponse = _ MsgBox("Do you want to save all documents?", vbYesNo) If intResponse = vbYes Then Application.Quit _ SaveChanges:=wdSaveChanges, OriginalFormat:=wdWordDocument
See also
Concepts
Application Object
title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Application.Quit method (Word) |
vbawd10.chm158336081 |
vbawd10.chm158336081 |
word |
Word.Application.Quit |
0279d848-a8b7-dac7-1e84-a55c72789e3b |
06/08/2017 |
medium |
Application.Quit method (Word)
Quits Microsoft Word and optionally saves or routes the open documents.
Syntax
expression.Quit (SaveChanges, OriginalFormat, RouteDocument)
expression Required. A variable that represents an Application object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
SaveChanges | Optional | Variant | Specifies whether Word saves changed documents before closing. Can be one of the WdSaveOptions constants. |
OriginalFormat | Optional | Variant | Specifies the way Word saves documents whose original format was not Word Document format. Can be one of the WdOriginalFormat constants. |
RouteDocument | Optional | Variant | True to route the document to the next recipient. If the document does not have a routing slip attached, this argument is ignored. |
Example
This example closes Word and prompts the user to save each document that has changed since it was last saved.
Application.Quit SaveChanges:=wdPromptToSaveChanges
This example prompts the user to save all documents. If the user clicks Yes, all documents are saved in the Word format before Word closes.
Dim intResponse As Integer intResponse = _ MsgBox("Do you want to save all documents?", vbYesNo) If intResponse = vbYes Then Application.Quit _ SaveChanges:=wdSaveChanges, OriginalFormat:=wdWordDocument
See also
Application Object
[!includeSupport and feedback]
Содержание
- Document.Close method (Word)
- Syntax
- Parameters
- Example
- See also
- Support and feedback
- Метод Application.Quit (Word)
- Синтаксис
- Параметры
- Пример
- См. также
- Поддержка и обратная связь
- Application.Quit method (Word)
- Syntax
- Parameters
- Example
- See also
- Support and feedback
- Метод Document.Close (Word)
- Синтаксис
- Параметры
- Пример
- См. также
- Поддержка и обратная связь
- VBA Excel. Управление приложением Word
- Создание объекта Word.Application
- Раннее связывание приложения Word
Document.Close method (Word)
Closes the specified document.
Syntax
expression.Close (SaveChanges, OriginalFormat, RouteDocument)
expression Required. A variable that represents a Document object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
SaveChanges | Optional | Variant | Specifies the save action for the document. Can be one of the following WdSaveOptions constants: wdDoNotSaveChanges, wdPromptToSaveChanges, or wdSaveChanges. |
OriginalFormat | Optional | Variant | Specifies the save format for the document. Can be one of the following WdOriginalFormat constants: wdOriginalDocumentFormat, wdPromptUser, or wdWordDocument. |
RouteDocument | Optional | Variant | True to route the document to the next recipient. If the document does not have a routing slip attached, this argument is ignored. |
Example
This example prompts the user to save the active document before closing it. If the user clicks Cancel, error 4198 (command failed) is trapped and a message is displayed.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Метод Application.Quit (Word)
Завершает работу с Microsoft Word и при необходимости сохраняет или маршрутизирует открытые документы.
Синтаксис
expression. Выход (SaveChanges, OriginalFormat, RouteDocument)
выражение (обязательно). Переменная, представляющая объект Application .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Savechanges | Необязательный | Variant | Указывает, сохраняет ли Word измененные документы перед закрытием. Может быть одной из констант WdSaveOptions . |
OriginalFormat | Необязательный | Variant | Указывает способ, которым Word сохраняет документы, исходный формат которых не был форматом документа Word. Может быть одной из констант WdOriginalFormat . |
RouteDocument | Необязательный | Variant | Значение true для маршрутизации документа следующему получателю. Если документ не имеет прикрепленного скольжения маршрутизации, этот аргумент игнорируется. |
Пример
В этом примере приложение Word закрывается и пользователю предлагается сохранить каждый документ, который изменился с момента последнего сохранения.
В этом примере пользователю предлагается сохранить все документы. Если пользователь нажимает кнопку Да, все документы сохраняются в формате Word до закрытия Word.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Application.Quit method (Word)
Quits Microsoft Word and optionally saves or routes the open documents.
Syntax
expression.Quit (SaveChanges, OriginalFormat, RouteDocument)
expression Required. A variable that represents an Application object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
SaveChanges | Optional | Variant | Specifies whether Word saves changed documents before closing. Can be one of the WdSaveOptions constants. |
OriginalFormat | Optional | Variant | Specifies the way Word saves documents whose original format was not Word Document format. Can be one of the WdOriginalFormat constants. |
RouteDocument | Optional | Variant | True to route the document to the next recipient. If the document does not have a routing slip attached, this argument is ignored. |
Example
This example closes Word and prompts the user to save each document that has changed since it was last saved.
This example prompts the user to save all documents. If the user clicks Yes, all documents are saved in the Word format before Word closes.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Метод Document.Close (Word)
Закрывает указанный документ.
Синтаксис
expression. Close (SaveChanges, OriginalFormat, RouteDocument)
выражение (обязательно). Переменная, представляющая объект Document .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Savechanges | Необязательный | Variant | Указывает действие сохранения для документа. Может быть одной из следующих констант WdSaveOptions : wdDoNotSaveChanges, wdPromptToSaveChanges или wdSaveChanges. |
OriginalFormat | Необязательный | Variant | Задает формат сохранения документа. Может быть одной из следующих констант WdOriginalFormat : wdOriginalDocumentFormat, wdPromptUser или wdWordDocument. |
RouteDocument | Необязательный | Variant | Значение true для маршрутизации документа следующему получателю. Если документ не имеет прикрепленного скольжения маршрутизации, этот аргумент игнорируется. |
Пример
В этом примере пользователю предлагается сохранить активный документ перед закрытием. Если пользователь нажимает кнопку Отмена, возникает ошибка 4198 (сбой команды) и отображается сообщение.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Excel. Управление приложением Word
Создание нового экземпляра приложения Word из кода VBA Excel или подключение к открытому для работы с документами. Функции CreateObject и GetObject.
Работа с Word из кода VBA Excel
Часть 1. Управление приложением Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Создание объекта 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 создается на заказ, то, после его завершения, раннее связывание следует заменить на позднее, так как на компьютере пользователя может не оказаться нужной библиотеки, и код работать не будет.
Источник
I’m trying in the beginning of my macro to close all word application if it’s open, although I don’t no which documents are open, and I can’t set them as an object.
Thanks.
asked Dec 12, 2016 at 12:11
1
This will close all running Word documents.
You need On Error Resume Next
to prevent errors if no Word application instance is running.
Option Explicit
Sub CloseWordDocuments()
Dim objWord As Object
Do
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
On Error Go To 0
If Not objWord Is Nothing Then
objWord.Quit
Set objWord = Nothing
End If
Loop Until objWord Is Nothing
End Sub
Edit
Correction below because the loop above has a flaw i.e. it will exit after the first instance of Word is closed …
Option Explicit
Sub CloseWordDocuments()
Dim objWord As Object
Dim blnHaveWorkObj As Boolean
' assume a Word object is there to be quit
blnHaveWorkObj = True
' loop until no Word object available
Do
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
If objWord Is Nothing Then
' quit loop
blnHaveWorkObj = False
Else
' quit Word
objWord.Quit
' clean up
Set objWord = Nothing
End If
Loop Until Not blnHaveWorkObj
End Sub
answered Dec 12, 2016 at 12:22
Robin MackenzieRobin Mackenzie
18.1k7 gold badges41 silver badges54 bronze badges
1
Try the code below, it will close Word Application (without saving).
Option Explicit
Sub CloseWordWindows()
Dim objWord As Object
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
' if no active Word is running >> exit Sub
If objWord Is Nothing Then
Exit Sub
End If
objWord.Quit
Set objWord = Nothing
End Sub
answered Dec 12, 2016 at 12:18
Shai RadoShai Rado
32.9k6 gold badges26 silver badges51 bronze badges
3
Another option is to use Shell
to accesss the elegance of powershell
Sub Comesfast()
X = Shell("powershell.exe kill -processname winword", 1)
End Sub
answered Mar 28, 2017 at 6:58
brettdjbrettdj
54.6k16 gold badges113 silver badges176 bronze badges
Коллеги, добрый день.
К сожалению, не знаю VBA, потому с простой задачей вынужден обратиться к Вам.
Есть статичный документ.
Требуется макрос, закрывающий Word (целиком, а не только документ), после его визуального отображения на экране.
Соответственно макрос должен работать, как я понимаю, на уровне документа (ThisDocument).
Сценарий работы в моем видении:
1. Открытие Word-документа.
2. Когда документ отображается на экране (доступен для чтения), отрабатывает макрос на закрытие этого файла.
3. Закрывается документ.
4. Закрывается Word.
Я использовал данный код на уровне документа:
Visual Basic | ||
|
Но столкнулся с проблемой, что макрос отрабатывает до вывода документа на экран и закрывается только документ.
Как я себе представляю два решения:
1. Средствами VBA можно определить, когда документ не только открыт, но и отображен на экране.
2. Встроить в документ, скажем, красный квадрат. Средствами VBSVBA отлавливать изменения цвета пикселя в центре экрана, если ловится красный цвет — закрывать Word.
Заранее благодарю за помощь!
Буду вдвойне признателен, если сможете предоставить готовый код уже для вставки в документ.
P.S.
Задача бредовая, но…
Различные инструменты, предлагаемые после этого Microsoft Офис позволяют не только создавать документы, но и создавать функции. Конечно, это для программистов, знакомых с приложениями Visual Basic VBA. Но мы упростим вам задачу и в этой статье мы научитесь закрывать Word из кода или скрипта VBA — легко и быстро.
Но сначала мы раскроем вопрос о том, что такое Приложения Visual Basic и это не более чем приложение, интегрированное в пакет Microsoft Office.
Это позволяет программировать на листах любого документа, будь то Word, Excel, PowerPoint, Access, и поскольку он не может быть скомпилирован, он становится макросом и распространяется путем простого копирования документа.
Хотя это действие широко используется программистами, оно не мешает никому из смертных научиться создавать функции с использованием сценариев VBA. И мы возьмем задачу научить его быстро и легко. Поскольку некоторые термины могут показаться запутанными и несколько пугающими, например, при попытке преобразовать документ OpenOffice в Word .
Одно из основных его применений — автоматизация повторяющихся или часто используемых задач, таких как открытие или закрытие документа, созданного в Word .
Вот шаги, которые необходимо выполнить, чтобы закрыть Word из кода VBA или скрипт . И для начала мы заходим в приложение с рабочего стола или где бы мы его не сохранили.
Следующий шаг важен, потому что вы должны иметь Вкладка разработчика в главном меню, если эта вкладка или вкладка не отображается, необходимо выполнить следующие операции. Наведите указатель мыши на значок Microsoft Office и щелкните. Это действие вызовет окно с различными параметрами, и вам нужно перейти в его нижнюю часть и выбрать Параметры Word.
Теперь будет отображаться поле, в левой части которого вам нужно выбрать вариант Наиболее частые, а в правой части из основных параметров для работы Слово.
Вы найдете опцию Показать вкладку разработчика в Рубана и когда вы найдете его, вам нужно установить флажок слева, чтобы выбрать его.
Шаги по закрытию Word из кода или сценария VBA — быстро и легко
Когда на ленте появится вкладка Разработчик, вы можете продолжить выполнение инструкций, которые позволят вам закрыть Слово к из кода или сценария VBA.
Следующим шагом является доступ к главному меню и выбор Вкладка разработчика . Затем в разделе «Код», который находится слева, вы выбираете опцию Visual Basic.
Следующим шагом будет написание или вставка следующего кода в конец строки Set objWord = CreateObject («Word.Application») Set objDoc = objWord.Documents.Close («c: scripts test.doc ‘) objWord Следующим шагом будет перейти в левый верхний угол и щелкнуть значок Microsoft Office
Затем вам нужно выбрать опцию Сохранить, и вы сделаете это со следующим именем тест.doc это с кодом VBA который вы будете использовать, чтобы закрыть приложение Word.
Вы можете увидеть, насколько быстро и легко выполнять задачи программиста. И используйте язык программирования Basic, который имеет большое сходство с другим офисным программным обеспечением, таким как OpenOffice и StarBasic.
И с этим языком программирования мы закончили с учебником, но вы, возможно, захотите узнать больше о том, как чьи Коды источники программирования находятся вставлен в документе. И чтобы вы могли больше узнать об этом небольшом изученном пункте программы Word.