VBA Excel. Создание и открытие документов Word
Создание нового документа Word или открытие существующего из кода VBA Excel. Методы Documents.Add и Documents.Open. Сохранение и закрытие документа.
Работа с Word из кода VBA Excel
Часть 2. Создание и открытие документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Создание нового документа Word
Новый документ Word создается из кода VBA Excel с помощью метода Documents.Add:
1 2 3 4 5 6 | Sub Test1() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True End Sub |
Переменную myDocument можно объявить с типом Object, но тогда не будет ранней привязки к типу Word.Document и подсказок при написании кода (Auto List Members).
Открытие существующего документа
Существующий документ Word открывается из кода VBA Excel с помощью метода Documents.Open:
1 2 3 4 5 6 7 | Sub Test2() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = _ myWord.Documents.Open(«C:\Документ1.docx») myWord.Visible = True End Sub |
Замените в этой процедуре строку «C:\Документ1.docx» на адрес своего файла.
Подключение к открытому документу
Присвоение переменной ссылки на существующий экземпляр Word.Application осуществляется в VBA Excel с помощью функции GetObject:
1 2 3 4 5 6 7 8 9 10 | Sub Test3() Dim myWord As Object, myDoc As Word.Document On Error GoTo Instr Set myWord = GetObject(, «Word. Application») Set myDoc = myWord.Documents(«Документ1.docx») myDoc.Range.InsertAfter «Добавляем новый текст, подтверждающий подключение к открытому документу.» Exit Sub Instr: MsgBox «Произошла ошибка: » & Err.Description End Sub |
Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Также произойдет ошибка, если не будет найден указанный документ (в примере — «Документ1.docx»).
Сохранение и закрытие документа
Сохранение нового документа
Чтобы сохранить из кода VBA Excel новый документ Word, используйте метод SaveAs2 объекта Document:
myDocument.SaveAs2 («C:\Документ2.docx») |
Замените «C:\Документ2.docx» на путь к нужному каталогу с именем файла, под которым вы хотите сохранить новый документ.
Сохранение изменений в открытом документа
Сохраняйте изменения в существующем документе с помощью метода Document. Save или параметра SaveChanges метода Document.Close:
1 2 3 4 5 6 7 8 9 10 11 | ‘Сохранение изменений документа myDocument.Save ‘Сохранение изменений документа ‘при закрытии myDocument.Close ‘по умолчанию True myDocument.Close True myDocument.Close wdSaveChanges ‘Закрытие документа без ‘сохранения изменений myDocument.Close False myDocument.Close wdDoNotSaveChanges |
Закрытие любого сохраненного документа
myDocument.Close |
Метод Document.Close закрывает документ, но не приложение. Если работа с приложением закончена, оно закрывается с помощью метода Application.Quit.
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.
Автоматическая генерация документов
Автор — Алексей А. Романенко
Содержание
- История вопроса
- Инструменты
- Создание базы данных
- Создание шаблона письма
- Генерация писем
- Заключение
Както раз после подведения итогов олимпиады, когда участникам требовалось разослать письмами с результаты по сданным (или не сданным) предметам, я заметил, что девушка сидит и руками вносит в шаблон письма результаты экзамена, ФИО школьника и прочую информацию. Перед ней лежало несколько распечатанных из Excel листов с фамилиями и оценками. Copy-Paste, Ctrl+C — Ctrl+V, перевод ФИО из именительного в родительный падеж и так уже была проделана работа с половиной первого из трех листов с данными. Сколько по вашему она могла бы еще просидеть копируя данные, а потом проверяя результат? Думаю довольно долго, да и ошибок было бы не мало. А ведь ей потом предстояло еще подписывать почтовые конверты… Мне стало жалко ее времени и за несколько минут я показал, как можно с помощью простых средств этот процесс автоматизировать.
В этом уроке я покажу Вам как можно быстро создавать документы (письма, приглашения) затрачивая на это минимум времени. В разных версиях языках этот описываемый процесс называется по-разному. Так в русском это «Слияние», а в английском — «Merge».
Надеюсь, что «письма счастья» от пенсионного фонда, налоговые уведомления создаются таким же способом 🙂
Для создания документов нам понадобится OpenOffice Writer. В нем мы будем создавать шаблон письма. Понадобиться так же OpenOffice Calc. В нем мы создадим базу с фамилиями и адресами тех лиц, которых мы, например, хотим пригласить на вечеринку. Вместо программ из пакета OpenOffice легко могут использоваться MS Word и Excel. База данных может легко лежать в MS Access. И так, приступаем.
База данных — это ничто иное как таблица в MS Excel или OpenOffice Calc, где данные располагаются в столбцах, а первая строка используется для именования столбцов. Заведем, например, столбцы «ФИО», «город», «индекс», «адрес».
Введем данные и сохраним файл на диск.В качестве баз данных могут использоваться и другие источники, например адресная книга Outlook, или база данных MS Access.
С созданием шаблона письма дело обстоит чуть сложнее. Поскольку в шаблон будут данные из таблицы (нашей базы данных) подставляться как есть, то и письмо надо писать соответствующим образом. Если у вас в базе данных ФИО идет в именительном падеже, то вряд ли Вам удастся использовать это поле в обращении «Дорогой, <ФИО>!» и для конверта в строке «Кому: <ФИО>». В последнем случае ФИО будет смотреться несколько коряво.
Составляя шаблон письма я рекомендую начать с составления письма какому-то реальному человеку. Можно самому себе. Затем в нем выделить цветом те данные, которые Вы будете брать из базы данных и заменить их на соответствующие поля. Перед тем как заменять выделенный текст на поле рекомендую обратить внимание на то, с какой буквы должно начинаться поле в базе данных (строчной или прописной).
Уже в приведенном шаблоне видно, что нам потребуется ФИО в родительном падеже и поле, содержащие только имя и отчество. С первым полем мы можем заменить «Кому» на «Получатель» и тогда ФИО в именительном падеже нас вполне устроит. Со вторым полем все несколько сложнее и нам придется завести в базе данных еще один столбец и заполнить его соответствующими данными. В одном из следующих уроков я расскажу как это сделать автоматически, а пока будем считать что такое поле у нас уже есть.
Для вставки поля и привязки шаблона к базе данных необходимо выполнить следующую последовательность действий. В OpenOffice Writer выбрать базу данных
и нажать «Define» («Определить»).
Затем в нужное место вставить поле из подключенной базы данных. Для этого нажать Ctrl+F2, или в меню «Вставка» выбрать пункт «Поля» и «Другое». В открывшемся окне выбрать вкладку «Базы данных», в типе поля выбрать «Mail Merge fields», из базы данных выбрать соответствующее поле и нажать «Вставит». Собственно базу данных можно также выбрать в этом окне.
После того как одно поле вставлено, можно не закрывая текущего окна выделить текст для замены на следующего поля, выбрать поле и снова нажать «Вставить». И так для каждого из полей.
Для MS Word ситуация в чем-то похожа и, возможно, более удобна. После создания таблицы в MS Excel, запускаем MS Word и переходим на вкладку «Рассылки». На этой вкладке можно увидеть тре необходимых шага: «Начало слияния», «Составление документа и вставка полей» и «Завершение». Есть еще промежуточный шаг «Просмотр результата», но он является опциональным.
И так работа начинается с выбора документа. Это могут быть письма, наклейки, обычный документ Word. Тут же можно запустить мастер слияния, который проведет Вас через все стадии этого процесса. Следующий шаг — выбор получателя, то есть базы данных. Здесь Вы можете выбрать готовую базу данных (например, созданную на предыдущем этапе таблицу MS Excel), или создать новый список. После того как список выбран, становятся активными кнопки «Вставит поле слияния», «Изменить список получателей» и пр. Через диалог «Изменить список получателей», который открывается соответствующей кнопкой, можно выбрать из всего списка только необходимые для слияния записи.
Далее начинаем составлять шаблон письма и после того как оно написано заменяем блоки текста, на соответствующие поля в базе данных.
При вставке полей мне кажется удобным подсветить все поля серым цветом, кликнув по кнопке «Выделить поля слияния». В противном случае, если таких полей много, то их можно потерять в тексте.
И так, шаблон готов.
Последний этап — генерация писем. В OpenOffice для этого в меню «Инструменты» выбираем «Mail Merge Wizard. ..» и проходим все предлагаемые шаги по объединению нашего шаблона с базой данных.
В диалоговом окне мы видем, что из предложенных 8 пунктов нам некоторые пункты выполнять не придеться. Так документ мы уже создали и редактировать его нам не надо, блок адреса мы тоже уже вставили. Но давайте по-порядку.
Сначала выбираем, что создаем письма на основе текущего документа и жмем «Далее» внизу окна. Вторым пунктом выбираем будет ли у нас это бумажное письмо или e-mail. Для того, чтобы письмо можно было сохранить в файл следует выбрать первое. Жмем «Далее». Третим пунктом нам предлагают создать блок адреса, но поскольку мы его создали руками, то снимаем все галочки и переходим к следующему шагу. Здесь нам предлагают вставить обращение, но оно у нас тоже уже есть, поэтому жмем «Далее». Шестым пунктом можно отредактировать документ, посмотреть на документ со вставленными из базы данных полями и, если надо, какие-то поля исключить.
На шаге 7 предлагается отредактировать каждый из созданных в результате соединения шаблона с базой данных файлов. И наконец на последнем, 8 шаге, можно выбрать что сделать с полученными документам. Можно сохранить, распечатать или отправить по e-mail. При этом можно сохранять все документы в один файл, или каждый документ отдельно.
В MS Word процесс слияния заканчивается нажатием кнопки «Найти и объединить».
Из выпадающего меню очевидно, что все письма можно напечатать и послать через e-mail, но не очевидно, что все их можно сохранить в файл. Для сохранения надо выбрать первы пункт — «Изменить отдельные документы». При этом откроется новый документ, в котором каждое новое письмо будет располагаться с новой странице, а тут уже этот файл можно и сохранить.
И так, в этом уроке Вы узнали как используя инструмент слияния создавать документы на основе шаблона. Давайте кратко запишем последовательность действий:
- Необходимо в табличном процессоре создать базу данных, из которой будут браться данные для заполнения полей.
- Необходимо создать шаблон письма.
- Произвести слияние и сохранить результат.
Как создать пользовательский документ Word с использованием данных Excel
спросил
Изменено 6 месяцев назад
Просмотрено 51к раз
По сути, мы должны составлять повестки дня для наших конференций (которые посещают многие фирмы), и это дискуссия за круглым столом, на которой одновременно рассматривается одна фирма. Общая компоновка:
1.) Фирма 1 - Представитель пункт списка пункт списка пункт списка 2.) Фирма 2 - Представитель пункт списка пункт списка пункт списка 3.) Фирма 3 - Представитель и т.д.
Моя компания должна делать это часто, а фирма и представители хранятся в файлах Excel. Есть ли способ быстро создать этот документ?
- Microsoft-Excel
- Microsoft-Word
- Microsoft-Office
- Microsoft-Word-2010
3
Да, это можно сделать с помощью слияния.
Откройте шаблон повестки дня и перейдите на ленту Рассылки. Перейдите к «Выбрать получателей» и выберите «Использовать существующий список» в раскрывающемся меню. Как только это будет связано, вы можете вставлять поля в документ. Перейдите к «Вставить поле слияния», чтобы выбрать поля для вставки. Когда вы закончите, перейдите в «Предварительный просмотр результатов», чтобы просмотреть документ. В это время вы захотите выбрать правильную запись, вы можете либо пролистать записи с помощью стрелок, чтобы найти ее, либо перейти к «Редактировать список получателей» для пользовательского списка. После этого перейдите в «Завершить и объединить» и выберите «Редактировать отдельные документы» и выберите вариант «Текущая запись» (если у вас их несколько, я не рекомендую делать их все вместе, потому что вам все равно придется их разделять). в отдельные файлы). Это создаст документ, и все, что вам нужно сделать, это сохранить его.
Я хотел бы предложить два возможных решения: первое — не-VBA, а другое — VBA (макрос).
Метод 1 Не VBA:
- Создайте рабочую книгу с одним листом или лучше введите данные о собрании в виде ТАБЛИЦЫ в Excel.
- Откройте пустой файл в Word.
- Из вкладки «Вставка», выберите Объект из раскрывающегося списка.
- Затем щелкните вкладку Создать из файла и перейдите к рабочей книге, которую вы хотите вставить.
- Далее нужно выбрать, хотите ли вы, чтобы объект был связан или нет.
- Закончить с Хорошо .
Метод 2 VBA (макрос):
Примечание:
- Для этого требуется ТАБЛИЦА в Excel (лучше работать с одним файлом листа).
- В редакторе VB щелкните Инструменты , затем Ссылки и добавьте эту Библиотеку объектов Microsoft Word 12. 0 , завершите Хорошо.
Создать Командная кнопка на листе Excel и Скопируйте и вставьте этот код для нее.
Вспомогательная кнопка CommandButton1_click() Dim tbl As Excel.Range Dim WordApp как Word.Application Затемнить myDoc как Word.Document Dim WordTable как Word.Table Application.ScreenUpdating = Ложь Приложение.EnableEvents = Ложь Установите tbl = ThisWorkbook.Worksheets(Sheet1.Name).ListObjects("Table1").Range При ошибке Возобновить Далее Установите WordApp = GetObject (класс: = "Word.Application") Очистить Если WordApp ничего не значит, установите WordApp = CreateObject(class:="Word.Application") Если номер ошибки = 429Затем MsgBox "MS-Word не найден, прерывание !!." GoTo EndRoutine Конец, если При ошибке Перейти к 0 WordApp.Visible = Истина WordApp.Активировать Установите myDoc = WordApp.Documents.Add tbl. Copy myDoc.Paragraphs(1).Range.PasteExcelTable _ Линкедтоексцел:=ложь, _ WordFormatting: = False, _ RTF: = Ложь Установите WordTable = myDoc.Tables(1) WordTable. Аутофитбехавиор (вдаутофитвиндов) EndRoutine: Application.ScreenUpdating = Истина Приложение.EnableEvents = Истина Application.CutCopyMode = Ложь Конец сабвуфера
N.B. В этом коде Лист и Таблица Имена доступны для редактирования.
Я нашел python-docx-template весьма интересным:
Пример .docx
документ:
Мой дом находится {%- если проживание_в_городе -%} в городской местности {%- еще -%} в сельской местности {%-конец-%} и я люблю это.
из импорта docxtpl DocxTemplate doc = DocxTemplate("my_word_template.docx") context = { 'company_name' : "Всемирная компания" } doc.render(контекст) doc.save ("сгенерированный_doc.docx")
Для чтения данных из Excel см. https://stackoverflow.com/q/22169325/873282.
Другая альтернатива:
- Почтовое слияние Python: https://pbpython.com/python-word-template.html —> https://pypi.org/project/docx-mailmerge/
Я создал этот бесплатный инструмент для создания документов Word из данных Excel, шаблон Word должен иметь заполнители с именами столбцов, как указано ниже ${col_name} Может быть полезно! https://it-tun.com/exceltoword/
Рекомендации: разработка документов для Excel
Поскольку электронные таблицы Microsoft Excel и документы служб отчетов MicroStrategy часто обрабатывают объекты, форматирование и типы диаграмм по-разному, может потребоваться изменить способ оформления документа, чтобы он правильно отображался при экспорте в Excel.
При разработке документа, который можно экспортировать в Excel, выполните следующие действия, чтобы документ правильно отображался в Microsoft Excel:
Тип объекта | Результат экспорта в Excel |
Текстовое поле | Данные в ячейках электронной таблицы |
Сетка/график: |
|
Строка | Не экспортируется |
Прямоугольник | Не экспортируется |
Изображение | Связанное изображение |
Выберите цвета, совместимые с Excel, для всех объектов, включая панели, фигуры и таблицы/графики. Чтобы используемые вами цвета правильно отображались в Excel, используйте набор из 40 цветов, которые отображаются на панели инструментов «Форматирование» или в области «Основные цвета» диалогового окна «Цвет» в редакторе документов. Excel поддерживает эти 40 цветов, хотя Excel 2007 поддерживает гораздо больше. Дополнительные цвета из области «Пользовательские цвета» диалогового окна «Цвет» максимально точно соответствуют Microsoft Excel. Избегайте использования градиентных цветов, поскольку они не экспортируются в Excel.
Используйте стили графиков, поддерживаемые Microsoft Excel. Например, если вы включите в документ диаграмму Gauge, она не будет отображаться в Excel. Если вы включаете комбинированную диаграмму, экспортированная версия в Excel может не отображаться точно так же, как исходная диаграмма в MicroStrategy Web. Дополнительные сведения о том, как изображения отображаются в Excel, см. в разделе Выбор параметров экспорта документов в Excel. Дополнительные сведения о каждом из стилей графика см. в разделе Управление отчетом в виде графика.
Избегайте перекрытия объектов в документе. При экспорте документа, содержащего перекрывающиеся объекты, документ может отображаться неправильно. Например, объект на заднем плане документа может отображаться на переднем плане электронной таблицы Excel.
Обеспечьте дополнительное пространство вокруг объектов, поскольку они могут увеличиться в размере при экспорте документа в Excel.
Используйте границы текстового поля для создания линий и прямоугольников в документах. Стандартные линии и прямоугольники MicroStrategy могут отображаться неправильно в Excel. Вы также можете использовать стек панелей для создания цветного фона.
Не вставляйте разрывы строк в текстовые поля. Разрывы строк (вставленные нажатием клавиш CTRL + ENTER) не отображаются в Excel.
Не включать перенос слов в заголовке столбца таблицы/графика в MicroStrategy. В этом случае заголовки в Excel или PDF отображаются неправильно. Включите перенос слов в Excel после экспорта документа.
Используйте абсолютный путь к файлу, чтобы определить местоположение изображения, используемого в документе.