Применение закладок для заполнения различных бланков на основе документов Word из кода VBA Excel. Объект Bookmark и его свойство Range.
Работа с Word из кода VBA Excel
Часть 5. Bookmarks – закладки в документе Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Добавление закладок в шаблон
Закладки (Bookmarks) являются удобным средством для вставки изменяющихся реквизитов в шаблоны документов. К закладкам можно обращаться по имени и не заморачиваться подсчетом количества символов до того места, где должен быть вставлен текст.
Вставляются закладки в шаблон документа вручную. Например, для следующего шаблона
это можно сделать так:
- Вставляем в макет шаблона в места вставки изменяемых реквизитов поясняющий текст. В нашем шаблоне это – <Город>, <Дата>, <Наименование арендатора> и <Наименование арендодателя>. Реквизиты <Город> и <Дата> добавлены в ячейки таблицы, чтобы их можно было разместить в одной строке, а выровнять по разным краям. Границы ячеек оставлены для наглядности.
- Выделяем текст <Город> и вставляем закладку под именем Bookmark1 через меню: Вставка ⇒ Закладка. Добавляем остальные закладки: <Дата> – Bookmark2, <Наименование арендатора> – Bookmark3, <Наименование арендодателя> – Bookmark4.
- Сохраняем бланк документа как шаблон Word. Полный путь для нашего примера: «C:\Тестовая\Документ1.dotx».
Создание и заполнение бланка
Реквизиты, добавляемые в места вставки, отмеченные закладками, обычно хранятся в таблицах Excel. Но мы вставим их напрямую в код процедуры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Sub Primer() On Error GoTo Instruk Dim myWord As New Word.Application, myDocument As Word.Document 'Создаем новый документ по шаблону Set myDocument = myWord.Documents.Add("C:\Тестовая\Документ1.dotx") myWord.Visible = True With myDocument 'Замещаем текст закладок .Bookmarks("Bookmark1").Range = "г. Омск" .Bookmarks("Bookmark2").Range = Format(Now, "DD.MM.YYYY") .Bookmarks("Bookmark3").Range = "Каев Кай Гердович (ИП)" .Bookmarks("Bookmark4").Range = "ООО «Снежная королева»" 'Удаляем границы ячеек .Tables(1).Borders.OutsideLineStyle = wdLineStyleNone .Tables(1).Borders.InsideLineStyle = wdLineStyleNone End With 'Освобождаем переменные Set myDocument = Nothing Set myWord = Nothing 'Завершаем процедуру Exit Sub 'Обработка ошибок Instruk: If Err.Description <> "" Then MsgBox "Произошла ошибка: " & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
В результате работы кода VBA Excel получаем заполненный бланк документа на основе шаблона Word:
Как лучше сделать, если в документе создаваемом на основе шаблона с закладками имеется табличная часть, количество строк которой может меняться, в зависимости от количества строк в файле excel с данными?
Закладки лучше использовать только для реквизитов документа, а табличную часть заполнять через массив:
На третьем шаге возникли проблемы((
А в чем заключается проблема?
Каким образом создать таблицу на основе массива? Итерацией?
Да, с помощью циклов For… Next.
У меня ошибка выдает во тут
"Dim myWord As New Word.Application"
Николай, попробуйте подключить библиотеку «Microsoft Word 16.0 Object Library» (число у вас может быть другим) в окне References (Tools >> References…).
А если так то работает
Большое спасибо! Подскажите участок кода для Userform, чтобы вводить текст через форму
Добрый день!
Здравствуйте, Евгений. А есть возможность из Excel выделить таблицу (размер таблицы меняется и в ней имеются объединённые ячейки) и вставить в подготовленный шаблон Word по закладке. Т.к. изменяется таблица выделение таблицы происходит по коду:
Добрый день, Алексей!
Выделить таблицу можно проще:
Если разберусь, как вставить таблицу в документ Word, отвечу.
Смотрите решение в статье: Вставка таблицы Excel в документ Word.
Евгений, здравствуйте!!
Появился вопрос, а как работать с формулами в ворде (ms equation)? Можете ли рассказать об этом?
Обсуждение закрыто.