Создание нового экземпляра приложения 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:
1 2 3 4 5 6 7 |
'Создание экземпляра приложения 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:
1 2 |
Dim myWord As Object Set myWord = CreateObject("Word.Application") |
Присвоение переменной myWord ссылки на открытый экземпляр приложения Word с помощью функции GetObject:
1 2 |
Dim myWord As Object Set myWord = GetObject(, "Word.Application") |
Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Чтобы ее избежать, следует предусмотреть создание нового экземпляра Word.Application с помощью функции CreateObject, если открытое приложение не будет найдено (смотрите пример 3).
В программы VBA Excel, работающие с Word, следует включать обработчик ошибок.
Закрытие объекта Word.Application
Новый экземпляр приложения Word открывается в фоновом режиме. Если необходимо его отобразить на экране перед завершением программы, используйте следующий код:
1 2 3 4 |
'отображаем приложение Word myWord.Visible = True 'освобождаем переменную от ссылки Set myWord = Nothing |
Если перед завершением процедуры VBA Excel необходимо приложение Word закрыть, используйте метод Quit:
1 2 3 4 |
'закрываем приложение Word myWord.Quit 'освобождаем переменную от ссылки Set myWord = Nothing |
Если переменная не содержит ссылку на приложение (myWord = Nothing), метод Quit возвратит ошибку. Чтобы этого не произошло, перед применением метода Quit необходимо проверить наличие ссылки в переменной myWord (смотрите пример 3).
Примеры открытия и закрытия Word
Пример 1
Создаем новый экземпляр объекта Word.Application с ранним связыванием и отображаем его на экране:
1 2 3 4 5 6 7 8 9 |
Sub Primer1() Dim myWord As New Word.Application '---------- 'блок операторов для создания, открытия 'и редактирования документов Word '---------- myWord.Visible = True Set myWord = Nothing End Sub |
Запустите код примера 1 на выполнение. Вы увидите появившийся на панели задач ярлык приложения Word. Перейдите на него и закройте приложение вручную.
Пример 2
Создаем новый экземпляр объекта Word.Application с поздним связыванием, отображаем его на экране, останавливаем программу и наблюдаем закрытие приложения методом Quit:
1 2 3 4 5 6 7 8 9 10 11 12 |
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 Instruk '---------- 'блок операторов для создания, открытия 'и редактирования документов Word '---------- myWord.Visible = True Set myWord = Nothing Exit Sub Instruk: 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 Instruk
, который поможет корректно завершить программу при возникновении ошибки. А также он позволит во время тестирования не наплодить большое количество ненужных экземпляров приложения Word. Проверяйте их наличие по Диспетчеру задач (Ctrl+Shift+Esc) и удаляйте лишние.
Строка Exit Sub
завершит процедуру, если она прошла без ошибок. В случае возникновения ошибки, будет выполнен код после метки Instruk:
.
Добрый!
Как открывать не Word а папку на диске? Ну, пусть диск C:\
На что надо поменять Word.Application тут
?
При этом, мне нужна проверка: если папка уже открыта, то не открывать её 2-й раз, а перемещать фокус в неё!
Привет, Сергей!
Для работы с папками и файлами используется объект FileSystemObject. Как открыть папку для просмотра, смотрите здесь.
Приветствую. Прошу помощи, есть обычная задачка написания макроса для заполнения шаблона в Word.
Всё хорошо, сделал, проверил — работает!
НО реальный шаблон, оказался вордовским документом с защитой текста.
То есть документ можно править ТОЛЬКО в тех полях, которые разрешены для записи.
Мне соответственно эти поля и нужны.
Но макрос выдаёт ошибку, как я понял файл по умолчанию открывается только для чтения.
Как открыть подобные файлы в режим для записи ? (естественно только для разрешённых полей)
Добрый день, Дмитрий!
Я бы, в вашем случае, попробовал создать свой шаблон на основе исходного, скопировав содержимое исходного шаблона и вставив в пустой документ.
Евгений, приветствую.
Это простой выход, но он не подойдёт.
Поскольку Юристы не примут других шаблонов.
Мне нужно как бы нажать в Ворде в открытом документе: ВИД -> Изменить Документ
Обсуждение закрыто.