Vba word вставить абзац
Таблицы в VBA Word принадлежат коллекции Tables, которая предусмотрена для объектов Document, Selection и Range. Новая таблица создается с помощью метода Tables.Add.
Синтаксис метода Tables.Add
Expression – выражение, возвращающее коллекцию Tables.
Параметры метода Tables.Add
- Range – диапазон, в котором будет создана таблица (обязательный параметр).
- Rows – количество строк в создаваемой таблице (обязательный параметр).
- Columns – количество столбцов в создаваемой таблице (обязательный параметр).
- DefaultTableBehavior – включает и отключает автоподбор ширины ячеек в соответствии с их содержимым (необязательный параметр).
- AutoFitBehavior – определяет правила автоподбора размера таблицы в документе Word (необязательный параметр).
Создание таблицы в документе
Создание таблицы из 3 строк и 4 столбцов в документе myDocument без содержимого и присвоение ссылки на нее переменной myTable:
Создание таблицы из 5 строк и 4 столбцов в документе Word с содержимым:
Для указания точки вставки таблицы присваиваем числовой переменной количество символов в документе минус один. Вычитаем единицу, чтобы исключить из подсчета последний знак завершения абзаца (¶), так как точка вставки не может располагаться за ним.
Последний знак завершения абзаца всегда присутствует в документе Word, в том числе и в новом без содержимого, поэтому такой код подойдет и для пустого документа.
При создании, каждой новой таблице в документе присваивается индекс, по которому к ней можно обращаться:
Нумерация индексов начинается с единицы.
Отображение границ таблицы
Новая таблица в документе Word из кода VBA Excel создается без границ. Отобразить их можно несколькими способами:
Вариант 1
Присвоение таблице стиля, отображающего все границы:
Вариант 2
Отображение внешних и внутренних границ в таблице:
Вариант 3
Отображение всех границ в таблице по отдельности:
Присвоение таблицам стилей
Вариант 1
Чтобы узнать название нужного стиля, в списке стилей конструктора таблиц наведите на него указатель мыши. Название отобразится в подсказке. Кроме того, можно записать макрос с присвоением таблице стиля и взять название из него.
Вариант 2
Выбирайте нужную константу с помощью листа подсказок свойств и методов – Auto List Members.
Обращение к ячейкам таблицы
Обращение к ячейкам второй таблицы myTable2 в документе myDocument по индексам строк и столбцов:
Обращение к ячейкам таблицы myTable в документе Word с помощью свойства Cell объектов Row и Column и запись в них текста:
В таблице myTable должно быть как минимум 2 строки и 3 столбца.
Примеры создания таблиц Word
Пример 1
Создание таблицы в новом документе Word со сплошными наружными границами и пунктирными внутри:
В выражении myDocument.Range(Start:=0, End:=0) ключевые слова Start и End можно не указывать – myDocument.Range(0, 0) .
Пример 2
Создание таблицы под ранее вставленным заголовком, заполнение ячеек таблицы и применение автосуммы:
Метод AutoSum суммирует значения в ячейках одного столбца над ячейкой с суммой. При использовании его для сложения значений ячеек в одной строке, результат может быть непредсказуемым.
Чтобы просуммировать значения в строке слева от ячейки с суммой, используйте метод Formula объекта Cell:
Другие значения метода Formula, применяемые для суммирования значений ячеек:
- «=SUM(ABOVE)» – сумма значений над ячейкой (аналог метода AutoSum);
- «=SUM(BELOW)» – сумма значений под ячейкой;
- «=SUM(RIGHT)» – сумма значений справа от ячейки.
12 комментариев для “VBA Excel. Создание таблиц в документе Word”
Спасибо автору сайта за подробное описание и примеры.
Вопрос по записи макроса в Word 2003.
Нужно реализовать отключение макросом автоподбора размеров таблицы по содержимому (Свойства таблицы — Таблицы — Параметры). При попытке записать макрос Свойства таблицы оказываются недоступными.
Подскажите код, который будет отключать автоподбор размеров таблицы по содержимому.
Спасибо.
Здравствуйте, Юрий!
Попробуйте так:
Евгений, спасибо огромное!
Конструкция работает — в таблице, вставленной макросом из Excel в Word ширина столбцов остаётся такой же как и в Excel.
Здравствуйте Евгений!
Может Вы подскажете в чем дело.
Нужно вставить несколько диапазонов ячеек из Excel в Word.
Эти диапазоны могут быть разной высоты (разное количество строк и разная высота строк)
Нужно, чтобы каждый диапазон располагался на отдельном листе Word.
Руками я делаю так: на листе Word рисую таблицу из одной ячейки и в неё вставляю нужную таблицу Excel.
Сделал макрос, который вставляет нужные диапазоны ячеек в документ из шаблона Word по
меткам и т.д.
Всё отлично работает, но страницы «съезжают» т.к. высота вставляемых диапазонов (количество и высота строк в них) меняется.
Если в шаблоне Word рисую таблицу из одной ячейки на весь лист, в которую ставлю метку, например, ,
то VBA вставляет таблицу ВЫШЕ ячейки на листе Word. Причем, метка остается внутри ячейки.
В этом разделе Visual Basic примеры, связанные с задачами в следующих разделах.
Применение форматирования к выделенному фрагменту
В следующем примере свойство Selection используется для применения форматирования символов и абзацев к выбранному тексту. Используйте свойство Font для доступа к свойствам и методам форматирования символов и свойству ParagraphFormat для доступа к свойствам и методам форматирования абзаца.
Применение форматирования к диапазону
В следующем примере определяется объект Range , который ссылается на первые три абзаца в активном документе. Диапазон форматируется путем применения свойств объекта Font и объекта ParagraphFormat .
Вставка текста и применение форматирования знаков и абзацев
В приведенном ниже примере добавляется слово "Title" (Заголовок) в верхней части текущего документа. Первый абзац выравнивается по центру с добавлением одного интервала размером 0,5 дюйма после него. Слово "Title" форматируется с использованием шрифта Arial размером 24 пункта.
Изменение интервала перед абзацем между значением 12 пунктов и отсутствием интервала
В приведенном ниже примере выполняется переключение форматирования интервала перед первым абзацем в выделенном фрагменте. Макрос получает текущее пространство перед значением, и если значение равно 12 пунктам, форматирование пробела перед форматированием удаляется (свойство SpaceBefore имеет нулевое значение). Если перед пробелом задано значение, отличное от 12, свойство SpaceBefore имеет значение 12 пунктов.
Включение и отключение полужирного начертания
В приведенном ниже примере включается и отключается полужирное начертание выделенного текста.
Увеличение левого поля на 0,5 дюйма
В приведенном ниже примере левое и правое поле увеличиваются на 0,5 дюйма. Объект PageSetup содержит все атрибуты настройки страницы документа (например, левое поле, нижнее поле и размер бумаги) в качестве свойств. Свойство LeftMargin используется для возвращения и установки параметра левого поля. Свойство RightMargin используется для возврата и задания параметра правого поля.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Основные объекты, использующиеся в VBA Word для определения места вставки, добавления и форматирования текста – это Selection (выделение), Range (диапазон) и Bookmark (закладка).
Selection и Range позволяют заполнять текстом новые документы или редактировать существующие. Закладки можно использовать для вставки изменяемых реквизитов в шаблоны различных документов: договоры, акты, справки.
Объект Range имеет преимущество перед объектом Selection, так как он может быть создан только программно и не зависит от действий пользователя. Если для вставки и форматирования текста будет использоваться объект Selection, а пользователь во время работы программы просто поставит курсор в другое место документа, результат будет непредсказуем.
Word.Range кардинально отличается от объекта Range в Excel. В приложении Word он представляет из себя набор из одного или множества символов. А также он может вообще не содержать ни одного символа, а быть указателем ввода текста (виртуальным курсором).
Объект Range возвращается свойством Range других объектов приложения Word: Document, Selection, Bookmark, Paragraph, Cell (объект Table).
Вставка текста без форматирования
Если текст вставляется без форматирования, достаточно одной строки кода (myDocument – это переменная):
- Вставка текста с заменой имеющегося: myDocument.Range.Text = "Вставляемый текст"
- Добавление текста после имеющегося: myDocument.Range.InsertAfter "Добавляемый текст"
- Добавление текста перед имеющимся: myDocument.Range.InsertBefore "Добавляемый текст"
Методами InsertAfter и InsertBefore можно вставить текст и на пустую страницу, также, как с помощью свойства Text. Перейти на новый абзац и начать предложение с красной строки можно с помощью ключевых слов vbCr (vbNewLine, vbCrLf) и vbTab.
Вставка текста с форматированием
Для форматирования отдельных участков текста необходимо указать диапазон символов, входящих в этот участок. Здесь нам также поможет объект Range, которому можно задать любой набор символов, содержащихся в документе Word.
Коллекция ListParagraphs предоставляет набор объектов Paragraph, которые являются отформатированными абзацами в ворде, то есть, параграфы, к которым применялось форматирование в виде списка. Это довольно удобно, так как мы можем в индивидуальном порядке обработать только те абзацы в ворде, которые представляют список (маркированный, нумерованный и так далее).
Доступ к коллекции осуществляется через одноименное свойство ListParagraphs , которое есть у объекта Document. Помним, что для формирования списков используется объект ListFormat, в состав которого входят такие методы как ApplyListTemplate , ApplyBulletDefault , ApplyNumberDefault или ApplyOutlineNumberDefault .
Коллекция ListParagraphs – абзац в ворде
Свойства – как в ворде сделать абзац
Application - Возвращает объект Application, представляющий приложение Microsoft Word.
Count – Содержит количество классов Paragraph (абзац в Word).
Item (index) – Свойство позволяет получить доступ к заданному номеру (index) в коллекции ListParagraphs. Можно не использовать данное свойство, а прописать нужный номер в скобках.
Теперь давайте рассмотрим такой пример кода на языке VBScript и JScript.
Пример на VBSCRIPT:
' ---------------------------------------------------------------------------- ' Коллекция ListParagraphs и объект ListParagraph ' как в ворде сделать абзац ' ListParagraphs.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i, oPars, MyText, oRange, REnd, LPars Set oWord = CreateObject("Word.Application") ' Класс Word.Application Set oDoc = oWord.Documents ' Коллекция Documents oDoc.Add() ' Создаем новый документ Set oSel = oWord.Selection ' Класс Selection oWord.Visible = True ' Делаем документ видимым Set oRange = oDoc(1).Range() ' Класс Range MyText = "Коллекция ListParagraphs - абзац в Word" ' Вставляем в документ заданный текст For i=0 to 30 oSel.TypeText MyText & " форматирование данных " & MyText oSel.TypeParagraph ' Вставляем абзац в ворде Next Set oPars = oRange.Paragraphs ' Коллекция Paragraphs REnd = oPars(oPars.Count).Range.End ' Определяем конечную позицию в тексте '---------------------------------------------------------------------------------------- ' Применяем форматирование к выбранным абзацам в Word '---------------------------------------------------------------------------------------- With oRange.ListFormat call LRange(5,10) .ApplyBulletDefault 2 ' форматирование абзацев в word call LRange(15,22) .ApplyBulletDefault 2 End With '---------------------------------------------------------------------------------------- ' Начинаем перебор всех абзацев в ворде ' Форматируем шрифт For Each LPars in oDoc(1).ListParagraphs With LPars.Range.Font .Bold = true .ColorIndex = 5 End With Next ' Форматируем выбранные абзацы-списки With oDoc(1) .ListParagraphs(3).Range.Font.ColorIndex = 4 .ListParagraphs(6).Range.Font.ColorIndex = 3 .ListParagraphs(8).Range.Font.ColorIndex = 2 End With ' форматирование абзацев в ворде ' Процедура определения выбора параграфов Sub LRange(a, b) oRange.SetRange 0, REnd oRange.SetRange oPars(a).Range.Start, oPars(b).Range.End End Sub
Пример на JSCRIPT:
В самом начале мы создаем ссылки на нужные объекты и коллекции:
- Set oWord – Тут мы получаем доступ к объекту Word Application, который предоставляет само приложение Word.
- Set oDoc – Данная переменная хранит коллекцию Documents, предоставляющую набор всех документов в приложении Word.
- oDoc.Add() – С помощью метода Add мы добавляем в коллекцию новый документ, с которым и будем работать.
- Set oSel – Формируем ссылку на объект Selection, который позволит вставить в документ нужный текст или форматированный абзац в ворд.
- Set oRange – Класс Range позволит нам выбирать нужный диапазон текста для его обработки.
- Цикл For i=0 to 30 …. Next отвечает за вставку нужно текста в документ, тут же происходит вставка абзаца Word. Весь процесс происходит 30 раз.
- Set oPars – Данная переменная будет хранить доступ к коллекции Paragraphs , предоставляющей все абзацы в текущем документе. Важно отметить, что если создать ссылку до вставки текста, то коллекция будет пустой. Поэтому, мы, сначала вставляем текст, а уже потом получаем доступ к коллекции Paragraphs.
- Переменная REnd нужна для того, что бы определить, максимальное количество знаков во всем документе.
Процедура (функция) LRange принимает два параметра, которые показывают начальный и конечный абзац в ворд, которые надо выбрать. Так, мы сначала выбираем форматированные абзацы в Word с 5 по 10 и делаем их как список. Далее происходит выбор параграфов с 15 по 22 и их форматирование. В итоге, у нас получаются два блока, являющихся абзацами, отформатированными как список.
Далее происходит использование цикла for для перебора все элементов в коллекции ListParagraphs – смотрите "Урок 9 по JScript - оператор цикла for" и "Урок 6 по VBScript: Циклы for…next и for each…next". В самом цикле мы меняем стиль текста и его цвет. Обратите внимание, что цикл будет обрабатывать только те абзацы в ворде, которые отформатированы как список.
Далее происходит выбор заданного форматированного абзаца в Word, и изменение цвета текста только для него. Результат работы сценария вы можете наблюдать на рисунке выше.
Спасибо за внимание. Автор блога Владимир Баталий
Стоит обратить внимание, что большая часть свойств и методов являются идентичными. Так, если мы используем некоторое свойство, работая с коллекцией, то оно будет влиять на все основные параметры абзаца в Word, если свойство или метод используются только для конкретного объекта Paragraph, то обрабатываться будет параметр конкретного абзаца. В самой статье я приведу примеры программного кода для сценариев сервера Windows Script Host – VBScript и JScript.
И так, давайте приступим…
Paragraph и Paragraphs – основные параметры абзаца в Word
Как и большинство коллекций и объектов модели Word, коллекция Paragraphs содержит все объекты Paragraph. Прежде чем приступать к обработке абзацев, нужно сначала получить ссылку на коллекцию Paragraphs, это можно сделать с помощью одноименно свойства класса Selection (смотрите статью "Объект Word Selection - выделить весь текст в ворде, свойства") или класса Range (статья "Объект Word Range - Выбор текста"). Также стоит учитывать, что коллекция будет содержать те параграфы, которые входят в выделенный или выбранный диапазон текста.
Общие свойства – параметры форматирования абзацев
Alignment - Позволяет задать или получить значение константы WdParagraphAlignment, которая отвечает за выравнивание текста:
- wdAlignParagraphLeft - 0 – По левому краю.
- wdAlignParagraphCenter - 1 – По центру.
- wdAlignParagraphRight - 2 - По правому краю.
- wdAlignParagraphJustify - 3 – По ширине.
- wdAlignParagraphDistribute - 4 – Распределяет символы так, что бы заполнить по ширине все окно.
- wdAlignParagraphJustifyMed - 5 - По ширине со средней степенью сжатия символов.
- wdAlignParagraphJustifyHi - 7 - По ширине с высокой степенью сжатия символов.
- wdAlignParagraphJustifyLow - 8 - По ширине с низкой степенью сжатия символов.
CharacterUnitFirstLineIndent – Задает или возвращает отступ первой строки.
CharacterUnitLeftIndent – Выступ слева
CharacterUnitRightIndent – Отступ справа
FirstLineIndent - Возвращает или устанавливает значение (в пунктах) для первой линии или отступа.
LeftIndent – Отступ слева в пунктах.
RightIndent – Отступ справа в пунктах.
LineSpacing – Междустрочный интервал.
LineSpacingRule - Возвращает или устанавливает междустрочный интервал, который определяет значение константы WdLineSpacing:
- wdLineSpaceSingle - 0 – одинарный, по умолчанию
- wdLineSpace1pt5 - 1 – 1,5 строки.
- wdLineSpaceDouble - 2 – двойной.
- wdLineSpaceAtLeast - 3 – минимум.
- wdLineSpaceExactly - 4 – точно.
- wdLineSpaceMultiple - 5 - междустрочный интервал определяется количеством линий указано.
LineUnitAfter – Интервал после параграфа.
LineUnitBefore – Интервал перед параграфом.
ReadingOrder - Возвращает или устанавливает такие основные параметры форматирования для абзаца, как порядок чтения без изменения их выравнивания. Содержит значение константы WdReadingOrder:
- wdReadingOrderLtr - 1 – Слева направо
- wdReadingOrderRtl - 0 – Справа налево
SpaceAfter – Интервал в пунктах после параграфа.
SpaceBefore - Интервал в пунктах перед параграфом.
Style - Возвращает или задает такие настройки параметров абзаца, как стиль. Свойство принимает имя стиля, или значение константы WdBuiltinStyle.
Общие методы – настройка параметров абзаца
Indent () – Позволяет добавить отступ на один пункт.
Outdent () - Позволяет удалить отступ на один пункт.
IndentCharWidth (count) – Добавляет отступ на заданное количество символов.
IndentFirstLineCharWidth (count) - Отступ первой строки на заданное количество символов.
Reset () - Удаляет ручное форматирование – не влияет на форматирование стиля.
TabHangingIndent (count) - Устанавливает висячий отступ на заданное значение.
TabIndent (count) - Устанавливает отступ слева на заданное значение.
OpenOrCloseUp () – Вставляет или удаляет интервал в 12 пунктов перед указанным абзацем.
OpenUP () – Вставляет интервал в 12 пунктов перед указанным параграфом.
CloseUP () – Удаляет интервал в 12 пунктов перед указанным параграфом.
OutlineDemote () и OutlinePromote () – Применяют стиль Заголовок к указанному параграфу.
OutlineDemoteToBody () – Применяет нормальный стиль.
Space1 () - Одинарный междустрочный интервал.
Space15 () – Междустрочный интервал в 1.5 строки.
Space2 () – Двойной междустрочный интервал.
Свойство и методы коллекции Paragraps – основные параметры абзаца
Count – Содержит количество параграфов в документе. Только чтение.
Item (count) – Позволяет получить доступ к указанному абзацу в коллекции, вернет объект Paragraph.
Add () - Возвращает объект Paragraph, который представляет параметры форматирования нового абзаца, который является пустым, добавленным в документ.
DecreaseSpacing () - Уменьшает отступ между параграфами на 6 пунктов.
IncreaseSpacing () - Увеличивает отступ между параграфами на 6 пунктов.
Методы объекта Paragraph – параметры форматирования абзацев
Next (count) - Возвращает объект Paragraph, представляющий основные параметры следующего абзаца в Word.
Previous (count) - Возвращает объект Paragraph, представляющий основные параметры предыдущего абзаца в Word.
И так, с теоретической частью мы закончили, теперь можно приступить к программированию. Рассмотрим два простых примера на языке VBScript и JScript, я сначала приведу программный код, а уже в конце дам пояснения.
Пример на языке программирования VBScript:
' ---------------------------------------------------------------------------- ' Коллекция Paragraph и класс Paragraph ' Выравнивание и изменение междустрочного интервала ' Основные параметры абзацев в Word ' Paragraph.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i, oPars, MyText, j Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection Set oPars = oSel.Paragraphs oWord.Visible = True MyText = "параметры форматирования абзаца. " For i=0 to 10 oSel.TypeText MyText & MyText & MyText & MyText & MyText & MyText & MyText oSel.TypeParagraph Next oDoc(1).Select i=1:j=0 ' настройка параметров каждого абзаца Do While i
Пример на языке программирования JScript:
// ---------------------------------------------------------------------------- // Коллекция Paragraph и класс Paragraph // Выравнивание и изменение междустрочного интервала // Основные параметры абзацев в Word // Paragraph.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oPars1, MyText1 = "параметры форматирования абзаца. ", oRange1; oWord1 = WScript.CreateObject("Word.Application"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oWord1.Visible = true; // Вставляем текст for (i=0; i // Создаем ссылку для Range Word // Заодно выбираем весь текст oRange1 = oDoc1(1).Range(); oPars1 = oRange1.Paragraphs; var i = 1, j = 0; // настройка параметров каждого абзаца while (i if (j == 3)< j = 0; // Меняем выравнивание oPars1(i).Alignment=j; j ++ >else < oPars1(i).Alignment=j; j ++ >i ++ >
Хорошо, теорию разобрали, программированием занялись, теперь надо дать пояснения к сценариям:
Объявление переменных – в самом начале мы объявляем переменные, в языке vbscript это делается в блоке dim , а в языке программирования jscript – в блоке var . Обратите внимание, что в vbs мы включили проверку переменных с помощью оператора Option Explicit . Сами имена переменных отличаются, так, для JS скрипта я приписал единицу.
Подключение внешних классов – Далее происходит процесс создания ссылок на внешние классы, которые позволяют создать новый документ, задавать параметры форматирования абзацев, управлять вставкой текста и так далее. Обратите внимание, что для vbs мы использовали ключевое слово set .
Вставка содержимого – В цикле for (смотрите синтаксис для vbscript - "Урок 6 по VBScript: Циклы for…next и for each…next" и jscript - "Урок 9 по JScript - оператор цикла for") происходит вставка несколько раз содержимого переменной MyText параллельно с параграфом.
Настройка параметров абзаца – Тут снова используется цикл for, в котором в заданном порядке происходит форматирование – меняется интервал, выравнивание и так далее. Обратите внимание, что в vbs сценарии мы получили доступ к параграфам через Selection , а в js – через Range .
Спасибо за внимание. Автор блога Владимир Баталий
Читайте также: