Как автоматизировать Microsoft Word с помощью Visual Basic для создания нового документа
В этой пошаговой статье описывается создание нового документа в Word с помощью службы автоматизации из Visual Basic.
Пример кода
В примере кода в этой статье показано, как сделать следующее:
- Вставка абзацев с текстом и форматированием.
- Просмотр и изменение различных диапазонов в документе.
- Вставка таблиц, форматирование таблиц и заполнение таблиц данными.
- Добавление диаграммы.
Чтобы создать документ Word с помощью службы автоматизации из Visual Basic, выполните следующие действия.
- В Visual Basic создайте проект EXE уровня «Стандартный». Form1 создается по умолчанию.
- В меню «Проект » щелкните «Ссылки«, выберите один из следующих параметров и нажмите кнопку » ОК»:
- Для Office Word 2007 щелкните библиотеку объектов Microsoft Word 12.0.
- В Word 2003 щелкните библиотеку объектов Microsoft Word 11.0.
- В Word 2002 щелкните библиотеку объектов Microsoft Word 10.0.
- Для Word 2000 щелкните библиотеку объектов Microsoft Word 9.0.
- Добавьте элемент управления CommandButton в Form1.
- Добавьте следующий код в событие Click для Command1:
Dim oWord As Word.Application Dim oDoc As Word.Document Dim oTable As Word.Table Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph Dim oRng As Word.Range Dim oShape As Word.InlineShape Dim oChart As Object Dim Pos as Double 'Start Word and open the document template. Set oWord = CreateObject("Word.Application") oWord.Visible = True Set oDoc = oWord.Documents.Add 'Insert a paragraph at the beginning of the document. Set oPara1 = oDoc.Content.Paragraphs.Add oPara1.Range.Text = "Heading 1" oPara1.Range.Font.Bold = True oPara1.Format.SpaceAfter = 24 '24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter 'Insert a paragraph at the end of the document. '** \endofdoc is a predefined bookmark. Set oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range) oPara2.Range.Text = "Heading 2" oPara2.Format.SpaceAfter = 6 oPara2.Range.InsertParagraphAfter 'Insert another paragraph. Set oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range) oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:" oPara3.Range.Font.Bold = False oPara3.Format.SpaceAfter = 24 oPara3.Range.InsertParagraphAfter 'Insert a 3 x 5 table, fill it with data and make the first row 'bold,italic. Dim r As Integer, c As Integer Set oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 3, 5) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 3 For c = 1 To 5 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Rows(1).Range.Font.Bold = True oTable.Rows(1).Range.Font.Italic = True 'Add some text after the table. 'oTable.Range.InsertParagraphAfter Set oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range) oPara4.Range.InsertParagraphBefore oPara4.Range.Text = "And here's another table:" oPara4.Format.SpaceAfter = 24 oPara4.Range.InsertParagraphAfter 'Insert a 5 x 2 table, fill it with data and change the column widths. Set oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 5, 2) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 5 For c = 1 To 2 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Columns(1).Width = oWord.InchesToPoints(2) 'Change width of columns 1 & 2. oTable.Columns(2).Width = oWord.InchesToPoints(3) 'Keep inserting text. When you get to 7 inches from top of the 'document, insert a hard page break. Pos = oWord.InchesToPoints(7) oDoc.Bookmarks("\endofdoc").Range.InsertParagraphAfter Do Set oRng = oDoc.Bookmarks("\endofdoc").Range oRng.ParagraphFormat.SpaceAfter = 6 oRng.InsertAfter "A line of text" oRng.InsertParagraphAfter Loop While Pos >= oRng.Information(wdVerticalPositionRelativeToPage) oRng.Collapse (wdCollapseEnd) oRng.InsertBreak wdPageBreak oRng.Collapse wdCollapseEnd oRng.InsertAfter "We're now on page 2. Here's my chart:" oRng.InsertParagraphAfter 'Insert a chart and change the chart. Set oShape = oDoc.Bookmarks("\endofdoc").Range.InlineShapes.AddOLEObject( _ ClassType:="MSGraph.Chart.8", FileName _ :="", LinkToFile:=False, DisplayAsIcon:=False) Set oChart = oShape.OLEFormat.Object oChart.charttype = 4 'xlLine = 4 oChart.Application.Update oChart.Application.Quit '. If desired, you can proceed from here using the Microsoft Graph 'Object model on the oChart object to make additional changes to the 'chart. oShape.Width = oWord.InchesToPoints(6.25) oShape.Height = oWord.InchesToPoints(3.57) 'Add text after the chart. Set oRng = oDoc.Bookmarks("\endofdoc").Range oRng.InsertParagraphAfter oRng.InsertAfter "THE END." 'All done. Unload this form. Unload Me
После завершения кода изучите созданный документ. Документ содержит две страницы форматированных абзацев, таблиц и диаграмм.
Использование шаблона
Если вы используете службу автоматизации для создания документов в общем формате, вы можете начать процесс с нового документа, основанного на предварительно сформированных шаблонах. Использование шаблона с клиентом word Automation имеет два существенных преимущества по сравнению с созданием документа из ничего:
- Вы можете иметь более полный контроль над форматированием и размещением объектов в документах.
- Вы можете создавать документы с меньшим объемом кода.
С помощью шаблона можно точно настроить размещение таблиц, абзацев и других объектов в документе, а также включить форматирование для этих объектов. С помощью службы автоматизации можно создать новый документ на основе шаблона с помощью следующего кода:
oWord.Documents.Add "\MyTemplate.dot"
В шаблоне можно определить закладки, чтобы клиент службы автоматизации заполнял текст переменной в определенном месте документа следующим образом:
oDoc.Bookmarks("MyBookmark").Range.Text = "Some Text Here"
Еще одно преимущество использования шаблона заключается в том, что вы можете создавать и хранить стили форматирования, которые вы хотите применить во время выполнения, следующим образом:
oDoc.Bookmarks("MyBookmark").Range.Style = "MyStyle"
oWord.Selection.Style = "MyStyle"
Ссылки
Для получения дополнительных сведений щелкните приведенные ниже номера статей, чтобы просмотреть статьи в базе знаний Майкрософт:
285332 Как автоматизировать Word 2002 с помощью Visual Basic для создания слияния
(c) Microsoft Corporation 2001, все права зарезервированы. Участие: Лори Б. Тертер (Lori B. Turner), корпорация Майкрософт.
Автоматическое заполнение документов
Бесплатный многопользовательский веб-сервис для быстрого создания и заполнения документов любых типов.
Более 1000 зарегистрированных пользователей!
Назначение
Безопасность
Автоматизация
Мультиформатность
Административное управление
Демо-доступ
- СКАЧАТЬ ПРОГРАММУ-КЛИЕНТ
- ЗАРЕГИСТРИРОВАТЬСЯ
- ЗАКАЗАТЬ ПРОЕКТ
Видеопрезентация
Сервис заполнения документов состоит из программы-клиента и личного кабинета на сайте.
Создание и заполнение документов осуществляется программой-клиентом, установленной на компьютере пользователя.
Распределение всех проектов и управление пользователями производится через личный кабинет администратора.

Уникальная система автоматизированного заполнения документов.
Функциональные возможности клиента (конструктор документов)
1. Шаблоны
Шаблоны представляют собой файлы с расширением: dot(x), xlt(x), txt, html, xml.
2. Метки
Шаблон содержит специально оформленные маркеры, которые заменяются данными.
3. Проекты
Проект, это группа шаблонов и набор меток (настраиваемых полей) для их заполнения.
4. Настройки
Делятся на локальный и серверные, которые в свою очередь делятся на общие и проектные.
5. Заполнение
Гибкая настройка окна для ввода данных и удобное заполнение полей с проверкой.
6. Архив
Автоматическое сохранение всех созданных документов с повторным их использованием.
7. Drag and drop
Метки можно перетаскивать мышью из списка в шаблон документа и наоборот, а также между открытыми копиями программы клиента.
8. База файлов данных
Используется для быстрого заполнения полей меток наборами данных из файлов Excel.
9. Мультизаполнение
Для создания комплектов одинаковых документов с разными наборами данных (писем, этикеток, визиток и т. д.).
10. Автовход
Ярлык с зашифрованным паролем, позволяет автоматически войти в программу-клиент.
11. Подсказки
Текстовые поля могут иметь подсказки для быстрого заполнения ФИО, адреса, сведений по организации, банку.
12. Универсальность
Файлы автоматизации и макросы, позволяют выполнять любые нестандартные задачи.
Примеры проектов по заполнению документов

Комплект документов «Аренда помещения»
Создается комплект документов: договор аренды, акт передачи и 3 дополнительные соглашения.

Комплект документов «Погреб»
Создается комплект документов для установки погреба из пластика.

Конверт (индекс картинками)
Заполнение почтового конверта с индексом в виде картинок.

Конверт (индекс шрифтом)
Заполнение почтового конверта с индексом в виде специального шрифта.

Почтовый перевод
Заполнение бланка почтового перевода почты России.

Приказ на отпуск (скан)
Документ в виде отсканированной картинки вставлен в шаблон Word.

Счет-Фактура-ТОРГ12
Заполняются: счет, счет-фактура, накладная ТОРГ-12.

ТКП холодильной машины
Создается технико-коммерческое предложение.

Гарантийный ремонт (html)
Создается комплект документов в формате HTML для сервисного центра гарантийного ремонта.
Сервис и все его инструменты бесплатны
Минимальный пакет доступа
- Включено 10 проектов
- Включено 3 пользователя
- Включено 10 MB диска
Примечание. Доступно увеличение ресурсов, для этого необходимо подать заявку в форме обратной связи. Дисковое пространство на сервере используется только для хранения шаблонов и данных по проекту (ZIP), созданные документы хранятся на компьютере пользователя.
Автозаполнение документа Word Без Excel через текстовые поля 2022
Столкнулся с тем, что все инструкции связаны со сложной автоматизацией с использованием кучи каких-то файлов, экселя и его таблиц, связей документов и так далее. Всё можно сделать гораздо проще!
Автозаполнение документа или договора Word Без Excel – как это сделать?
Сколько же я намучался, забивая запросы типа “как сделать автозаполнение word без экселя” или “заполнение документа значением поля” или “word значение поля в текст автоматически“. На самом деле всё оказалось не так сложно, как я изначально предполагал.

Да, можно делать очень полезные связки документов, когда мы заполняем эксель, а потом у нас шаблон ворда из него берет информацию. Но объяснить какому-нибудь муниципальному сотруднику как это делать – задача практически невозможная.
Так вот, всё что нам потребуется – это Microsoft Word Документ. В нем мы создадим поля, настроим страницы и всё будет автоматически наполняться.
Инструкция как сделать автозаполнение документа Word из полей
Для примера возьму документ договора, где есть заказчик, исполнитель, дата документа и сумма договора, которые мы хотим подставлять из полей.
Пример документа с автозаполнением из полей делаю в microsoft office word 2019 (автоматизация заполнения документов word без эксель).
- Формат документа DOCM.
Создаем новый документ и сохраняем его в формате docm (Документ Word с поддержкой макросов). - Вкладка “Разработчик”.
Файл – Параметры – Настроить ленту. В выпадающем списке выбираем “Основные команды”, затем выделяем ниже строчку “Разработчик”, и по середине жмем “Добавить”. Справа появляется “разработчик” с плюсиком, жмем Ок, и видим, что теперь вверху есть вкладка “Разработчик”.
- Делаем страницу с полями для ввода данных документа (договора).
Кликаю в начале договора, жму вставка – разрыв страницы, и в итоге у меня пустая первая страница.
На ней создаю табличку, это не обязательно, и начинаю там создавать поля.
Делаем страницу с полями для ввода данных - Создаём поля для ввода текста для автозаполнения документа.
Кликаем в любое место документа, где нам нужно поле.
Переходим во вкладку Разработчик. Вставляем не просто текстовое поле, а именно СТАРОЕ текстовое поле.
То есть выбираем там уже иконку “Инструменты из предыдущих версий”, затем “Поле (элемент управления формы)”.
И вставляем куда нам нужно.
- Настраиваем поля Word для автозаполнения.
Когда поле есть на странице, жмем по нему правой кнопкой и во всплывающем меню выбираем “Свойства” (поля).
Настраиваем обязательно следующие параметры поля:
— Текст по-умолчанию: тут свой текст.
— Закладка: на английском, уникальный идентификатор поля. Придумайте что-нибудь понятное, это нам пригодится далее.
— Ставим галочки (чек-боксы) “разрешить изменения” и “вычислить при выходе”.
В данном примере я создал текстовое поле, в котором будет Дата договора (по сути это любой текст). Мне главное, чтобы я в одном месте ввел данные, а в других местах документа текст из поля автоматически заполнился. И в данном случае это будет то, что я назвал датой. - Настраиваем подстановку текста из поля в документ.
ЕСТЬ ДВА СПОСОБА: ВРУЧНУЮ СОВСЕМ, И ЧЕРЕЗ СВОЙСТВА ПОЛЕЙ.
Разберем первый способ: вставка текста из поля в документ через закладку ctrl+f9.
Для этого выбираем место, где у нас должно подставиться значение поля. Мы помним, что в нашем случае уникальный идентификатор (название закладки) в примере: POLEDATE.
В этом месте кликаем мышкой левой кнопкой (просто чтобы там курсор мигал), затем на клавиатуре нажимаем сочетание клавиш Ctrl+F9 (контрол плюс эф девять).
Видим, что появились фигурные скобки с серым фоном, и мы можем внутри печатать.
Печатаем внутри следующее: REF POLEDATE.
Поясняю: внутри фигурных скобочек, должно быть три буквы заглавных REF, затем пробел, затем то как мы назвали закладку (идентификатор поля). В нашем случае это POLEDATE, а может быть что угодно.
Больше ничего жать не нужно, можно убрать оттуда курсор.
Вот как это выглядит в итоге:
Второй способ: вставка значения поля из другого поля автоматически через закладку REF.
Это практически тоже самое, только не нужно нажимать ничего на клавиатуре. По мне так, дольше, но вдруг вам там понятнее.
Так же создаем поле, в этом примере возьму сумму договора. При создании поля (см. п. 5) я ввел название закладки поля (уникальный идентификатор) pole_stoimost.
Только теперь, когда мы нажали в место документа, куда хотим подставить данные автоматически (курсор там мигает), мы вставляем поле.
Выбираем вкладку “Вставка”, затем “Экспресс-блоки”, затем “Поле” (как на скриншоте ниже):
Это поле нужно настроить так, чтобы в него подставлялось значение другого поля автоматически.
При вставке поля из экспресс-блоков, или когда вы потом можете нажать правой кнопкой Свойства поля, настраиваем так.
Слева выбираем тип поля “Ref”, и дальше выбираем название нашей закладки, т.е. идентификатор поля, откуда надо подставить текст. В нашем случае это pole_stoimost:
(вот кстати выше видно на скриншоте еще ошибку “Ошибка! Источник ссылки не найден.” – это происходит, когда вы ввели REF Несуществующая закладка, например. То есть не найдено поле (закладка) с тем идентификатором уникальным. И надо просто проверить свойства полей.).
Короче, так или иначе, подытожу:
— Создали поле через Разработчика.
— У него в свойствах прописали уникальный идентификатор (название закладки).
— Вставили через CTRL+F9 или экспресс блоки – поле (место) куда будет подстваляться текст из первого поля, указав такой же идентификатор. - Автозаполнения документа значением из полей через F9 или печать документа.
Ну.. тут уже все понятно должно быть – насоздавали полей сколько нужно, поставляли в места куда нужно.
По-умолчанию, Word будет автозаполнять документ автоматически, если весь документ выделить (ctrl+a например) и нажать кнопку F9.
Места с REF и полями преобразуются в то, что есть в оригинальном поле-закладке.
Но есть трудность – сложно объяснить людям как это работает, что выделять и как обновлять эти поля.
Я выбрал способ попроще – чтобы поля автоматически обновлялись при печати (печатать почти все умеют как).
Лезем в настройки (файл – параметры), там выбираем “Экран” и отмечаем галочку “Обновлять поля перед печатью”.
Теперь, каждый раз когда через Файл – Печать или Ctrl+P будет печататься документ – поля будут обновляться (текст автоматически подставляться), т.е. тоже самое что через выделение документа и нажатие F9. - Наводим красоту: запрет редактирования, номера страниц.
Ну и еще два момента. Во-первых, документы пронумерованы обычно. И основная проблема – что страница с полями тоже печатается, а в официальном документе её быть не должно.
Соответственно, способа убрать страницу word из печати автоматически я не нашел. Поэтому, выкрутился по-другому.
Через настройки колонтитула (несколько кликов по нижней части документа (или где там у вас номера страниц)), переходим в свойства, номера страниц, и там выбираем начать с “0″, с нуля короче.
Таким образом, страница с полями становится как бы нулевой, и договор печатается как надо, первая страница договора остается первой.
И второе, защита от редактирования, чтобы только вводили данные в поля.
Сделал просто – Рецензирование – Ограничить редактирование – Да, включить защиту, ну и пароль 1.
Отключается так же, только не все видят – там внизу кнопка становится “отключить защиту”.
Считаю обязательным выложить для вас сам документ, который использовал в этой инструкции. Если сильно запутались, можете просто из него скопировать оригинальные поля (которые в таблице) которые заполняются, и поля которые принимают автоматически значения из других полей.

Скачать пример автоматическое заполнение Word из полей: Автозаполнение документов Word Без Excel через текстовые поля docm (пароль на отключение защиты: 1 (просто единичка)).
P.S. Почему формат docm? На самом деле потому, что если формат doc или docx – то не работает вкладка “разработчик” где поля (ну не вставляются они). При этом – само автозаполнение прекрасно работает. Совет – делайте всё в docm, а итоговый результат, уже с защитой от редактирования – сохраните в обычный формат doc/docx и отдавайте, всё там прекрасно работает и печатается.
Что не так со «слиянием» в word+excel и как по уму автозаполнять шаблонные документы
Надысь зашел здесь в комментах разговор про автозаполнение документов по шаблону. Там было такое мнение:

По поводу автоматизации и шаблонизации актов лучше использовать «слияние» в word+excel.
Я-то знаю что лучше) Поэтому предложил другую концепцию автозаполнения. Не убедил.
Но концепция оказалась востребована — люди интересовались, смотрели и скачивали необычно много для воскресенья. Поэтому захотелось порассуждать на эту тему — о разных парадигмах автозаполнения и почему майковский вариант не всем заходит.

Дисклеймер
Большое количество типовых документов состоит из 1 — 2 страниц. Это разнообразные акты, накладные, выписки, справки, договора, уведомления. Как правило, в них меняются даты, ФИО и пара цифр. Такие документы заполняются десятками и больше за день.
Другой класс типовых документов, — заключения, отчеты и прочие результаты аналитической работы, — требуют для подготовки объемный сбор данных и проведение сложных расчетов. В них нужно заполнять таблицы с объединенными ячейками и с разным количеством строк. Нужно включать иллюстрации, сканы, графики, фото. Они состоят из десятков и сотен страниц, разделенных на несколько глав. Такие документы оформляют единицами в день или в неделю. Там тоже меняются даты и ФИО. И десятки или сотни цифр.
Казалось бы — это же совсем разные документы, разные ситуации с ними и соответственно нужны разные инструменты для их автозаполнения. Но есть нюанс)
Работает — не трогай!
![]()

На самом деле есть возможность поменять все связи связанных документов xlsx и docs за один раз. Если найдете нужную кнопку в нужном подменю нужного меню. И поймете как оно работает.
Можно же просто указать какой конкретно файл использовать для заполнения шаблона? Это для слабаков. Сильные курят справку. Сильные роют интернет.
Будь сильным! Заполняй word из excel по заветам Майкрософт!
Что вообще такое эти связи связанных документов xlsx и docs? Это вступительное испытание в клубе стрельбы себе по ногам?
Сказано же — не трогай!

Настроил автозаполнение, а потом решил подправить файл Excel?
Пффф ))) .. Сорян!)
По секрету. Можно редактировать и после. В пределах здравого смысла. Но, да, официально черным по русскому написано — нельзя. Ну, нельзя — так нельзя.
В одни руки — один лист


Почему, Билл, почему. У тебя листов в Экселе не хватает на всех?
Хочется же по уму оформить источник данных xlsx: на одной вкладке — данные договора, на второй — исходные данные, на третьей — промежуточные, на четвертой — выводы, на пятой — примечания и т.д. Низзя(
Все не то, чем кажется

Так выглядит поле в word для подстановки в него данных из excel. Нормально вроде выглядит? Просто слово в кавычках. Казалось бы, что тут такого?
Но если вы его захотите поправить.. Поставить на него курсор и поправить.. Например, Номер на Номер 1. Или на поле из списка, например — Имя. Обломитесь. Низзя. Просто поправить — низзя. Ну вот низзя просто. Это Майкрософт, детка.
На самом деле, если заглянуть в изнанку такого поля Номер, там будет что-то типа такого:

Те, кто рискнут заглянуть в эту бездну, должны сначала прочитать надпись над входом в нее:

Так что, если у вас слишком длинная жизнь и вы хотите потратить ее на путешествие далеко за рамки..
Нельзя так просто взять и заполнить автоматом документ по шаблону
Курс для освоения навыка автозаполнения шаблона состоит из следующих основных частей:
- Слияние с использованием таблицы Excel
- Подготовка источника данных Excel к слиянию в Word
- Вставка полей слияния
- Персонализация писем с помощью слияния
Там будет еще много ссылок и вставок на сопутствующие и второстепенные темы, так что удачи не заблудиться и не забыть кто вы, где вы и зачем вам все это надо. В этом вам поможет учебный курс. После освоеня которого вам дадут Советы по использованию промежуточного слияния, покажут Добавление настраиваемых полей слияния и отправят в направлении Дальнейшая персонализация документов. Удачи.
Серебряная пуля
Или можно пойти коротким путем. Никакого хардкора, никакого Майкрософта. Всего три экрана с объяснением, половина из которых — иллюстрации. И можно править поля прямо в тексте. И можно разносить вставляемые данные в Excel по вкладкам. И можно копировать файлы как угодно, даже отправить коллеге. И вообще нет связей связанных документов (Билл, прости мне это святотатство!). Про вставку целых таблиц, изображений и контроль результата слияния уже не будем тут поднимать.
Но. Сможете ли вы после этого гордо сказать:

Зачем использовать стороннюю надстройку, когда встроенный функционал справляется с этой же задачей.
Звучит! Хотите лишить себя этой фразы?
Ну и надо же всегда расти над собой. Попробуйте на коллегах заклинание «Я умею в слияние в Word+Excel!» → Вам гарантировано +100 lvl к уважению. Никто не может — вы можете!
И сравните с реакцией на «надстройка сама автоматом заполняет отчет / заключение / форму / спецификацию«:

И чо?
Это не все претензии к «слиянию» word+excel. Но, кажется, достаточно для обозначения ситуации.
Корень проблемы наверное в том, что UI/UX для слияния майки разрабатывали в доинтернетное средневековье. В те времена обычным делом было прохождение инструктажей и получение допусков к работе на ПЭВМ. Получали такой допуск знатные ботанЫ, для которых за счастье было потратить неделю на конспектирование майковской методички по слиянию и последующие упражения его использования.
Сейчас времена изменились и документы чаще составляют люди не самой высокой ботанической квалификации. Появилось понятие «интуитивно понятный интерфейс«. Уровень удобства «любой профессор за месяц разберется» уже не считается достаточным для юзабилити. Тем не менее, люди бывают разные и каждый найдет себе инструмент по душе.
Всем доброй пятницы!




