Vba word вставить абзац
Методы класса Word.Selection – выделение текста в Word
Я приведу по два примера программного кода на языках JScript, VBScript и VBA. Хотя по сути, код под макрос (VBA) и сценарий VBScript особо не отличается. Для тех, кто забыл: для создания макроса в документе Microsoft Office нужно вызвать редактор Visual Basic for Application (комбинация клавиш Alt + F11), далее, добавить в проект новый модуль (макрос).
Методы с префиксом Clear… позволяют очистить выделенный материал от форматирования (абзацы, стили, символы и так далее):
ClearCharacterAllFormatting () - Все форматирование.
ClearCharacterDirectFormatting () - Форматирование знаков.
ClearCharacterStyle () - Форматирование знаков, применяемых через стили.
ClearFormatting () – Все форматирования (параграфы, стили и так далее).
ClearParagraphAllFormatting () - Форматирование абзаца.
ClearParagraphDirectFormatting () - Форматирование абзацев, применяемых вручную.
ClearParagraphStyle () - Форматирование абзацев, применяемых через стили.
Collapse (Direction) – Позволяет убрать выделение текста Word и переместить указатель в начало или конец. VBA Selection. Если параметры отсутствуют, то просто убирается выделение. Параметр Direction содержит значение константы WdCollapseDirection :
- wdCollapseEnd - 0 – Указатель вконец
- wdCollapseStart - 1 – Указатель вначале
ConvertToTable (Separator, NumRows, NumColumns, InitialColumnWidth, Format, ApplyBorders, ApplyShading, ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow, ApplyFirstColumn, ApplyLastColumn, AutoFit, AutoFitBehavior, DefaultTableBehavior) – Довольно мощный метод, который позволяет преобразовать выделенный Word текст в таблицу.
Separator - Символ-разделитель, может быть знаком или значением константы WdTableFieldSeparator:
- wdSeparateByParagraphs - 0 - абзаца.
- wdSeparateByTabs - 1 - табуляции.
- wdSeparateByCommas - 2 - запятая.
- wdSeparateByDefaultListSeparator - 3 - разделитель списка по умолчанию.
NumRows - Количество строк.
NumColumns - Количество столбиков.
InitialColumnWidth - Начальная ширина каждого столбца, в пунктах.
Format – Определяет формат таблицы и содержит значение константы WdTableFormat.
ApplyBorders - TRUE - применять границы.
ApplyShading - TRUE - применить затенение.
ApplyFont - TRUE применять свойства шрифтов.
ApplyColor - TRUE применять цветовые свойства.
ApplyHeadingRows - TRUE - применить свойства заголовок-строка.
ApplyLastRow - TRUE - применить свойства последней строке.
ApplyFirstColumn - TRUE - применить свойства первого столбцов.
ApplyLastColumn - TRUE - применить свойства последнего столбца.
AutoFit - TRUE - уменьшить ширину столбцов таблицы как можно больше.
AutoFitBehavior - Устанавливает правила авто-подбора (если DefaultTableBehavior содержит значение wdWord8TableBehavior, то этот аргумент игнорируется, VBA Selection), содержит значения константы WdAutoFitBehavior:
- wdAutoFitContent - 1 - автоматически размер
- wdAutoFitFixed - 0 - фиксированный размер
- wdAutoFitWindow - 2 - автоматический размер по ширине активного окна
DefaultTableBehavior - Значение, указывающее, следует ли автоматически изменять размер ячеек таблицы по содержимому. Selection VBA. Содержит значение константы WdDefaultTableBehavior:
- wdWord8TableBehavior - 0 - отключает Авто-подбор (по умолчанию)
- wdWord9TableBehavior - 1 - включить Авто-подбор
Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию.
Примера на языке VBScript – выделение текста в редакторе Word
В данном примере в цикле For (смотрите статью "Урок 6 по VBScript: Циклы for…next и for each…next"), который выполняется шесть раз, происходит вставка перевода на новую строку, вставка текстовой фразы и перемещаем курсов к конец строки. С помощью оператора with мы можем экономить размер программного кода – не нужно лишний раз писать имя класса. Вконце происходит выделение текста Word и преобразование его в таблицу.
Примера на языке JScript – выделение текста в редакторе Word
Логика работы данного программного кода аналогичны предыдущему примеру, тут мы уже использовали цикл for языка JS, читайте в статье "Урок 9 по JScript - оператор цикла for". Тут тоже использовался оператор with, обратите внимание, что имена переменных изменились, а в конце каждой строки кода прописана точка с запятой.
Примера на языке Visual Basic for Application – выделение текста в редакторе Word
Хорошо, давайте продолжим рассматривать методы класса Selection.
EndOf () – Перемещает курсор в конец выделения.
StartOf () – Перемещает курсор в начало выделения.
SetRange (start, end) – Позволяет задать начальное и конечное значение для выделения текста Word.
TypeText () – Выполняет ту же функцию, что и свойство Text – ввод информации.
TypeParagraph () - Метод вставляет параграф.
Copy (), Cut (), Paste (), Delete () – Копирует, вырезает, вставляет и удаляет выделенный текст в Word.
CopyAsPicture () – Копирует выбранный материал как изображение.
И так, теперь рассмотрим программный код с данными методами.
По сути, данный программный код практически аналогичен предыдущим. Тут в цикле происходит вставка данных несколько раз, а далее следуют операции выделения текста в документе Word, его копирование и вставка.
Ну и в заключение, привожу программный код для макроса:
Хорошо, на этом можно закончить данную статью. Параллельно, информацию по работе с классом Selection можете рассмотреть еще две публикации, в которых я рассмотрел остальные методы и свойства класса Selection.
Спасибо за внимание. Автор блога Владимир Баталий
Коллеги, прошу прощения, только осваиваю особенности программного управления документом Word. Тривиальная, казалось бы, задача: вставить в закладку текст, добавить новый абзац и в него впечатать новый текст, но.
Текст в закладку вставляется на-ура, а вот дальше:
выделяю закладку, но новый абзац не создается, текст тоже вставляться не хочет (завершение выполнения с ошибкой). В чем причина?
Код работает из-под Excel, библиотека Word подключена
Помощь в написании контрольных, курсовых и дипломных работ здесь
Как добавить текст в абзац?
<div </div> Здравствуйте, подскажите как добавить текст в абзац.
Создать файл и добавить в него текст
как и в прошлой теме. дописываю свою программу. теперь она должна создать фаил под названием.
Как открыть созданный файл и добавить в него текст?
Программа по нажатию кнопки создается папка а в ней файл, имя файла с поля edit1, имя папки с поля.
Как создать архив и добавить в него файлы (ZipForge)?
пытаюсь разобраться с ZipForge, нужно заархивировать несколько файлов и папок. не могу даже.
zics, если работаешь с вордом извне, то следует отказаться от использования Selection и везде использовать Range . В 95% случаев этого достаточно.
Ну и помнить, что в Excel тоже есть Range , поэтому обращаться через пространство имён.
Добавлено через 3 минуты
Ну и кроме того, закладка у тебя будет удаляться, если просто присвоить ей новый текст.
Все попытки использовать TypeParagraph и TypeText ни к чему не привели.
Если не сложно, подскажите вариант кода, как реализовать простую, казалось бы, задачу:
1. Вставить в закладку документа Word текст (это удается без проблем)
2. Добавить новый пустой абзац после введенного текста на шаге 1
3. Добавить в этот абзац текст.
Как это сделать без Selection, а используя только Range?
Макрос запускается из Экселя.
Реализовал предложенную ViterAlex идею, сработало! Вероятно, реализация не самая оптимальная. Буду рад, если кто-нибудь предложит альтернативу
Спасибо за предложенные варианты! А если усложнить задачу и после "Hello Planet" в новый абзац вставить таблицу, а после неё уже "Hello World", сработает? А если усложнить задачу и после "Hello Planet" в новый абзац вставить таблицу, а после неё уже "Hello World", сработает? Немного сложнее будет, но сработает. Запоминай вставляемую таблицу в переменную и потом обращайся к Range этой таблицы, чтобы вставить после неё абзац:А если мне нужно не новую пустую таблицу создать, а вставить её, например, методом PasteExcelTable, и после её вставки добавлять новые абзацы и наполнять их текстом? zics, если таблица вставляется в конец документа, то после вставки нужно перейти в конец документа и дальше как обычно.
Если это не конец документа, то нужно запомнить сколько таблиц вставлено до места вставки, вставить, взять таблицу по номеру в коллекции Tables и дальше как обычно.
Пока так и не смог реализовать задачу, даже при активной помощи (спасибо им большое) знатоков.
Задача: Макрос, который запускается из Excel, должен в закладку имеющегося файла Word впечатать несколько строк текста, подгружать рисунок, вставлять таблицу (всё с нового абзаца), и так в цикле несколько раз. Все данные (текст, таблица) берутся из Excel, рисунок - из папки.
Проблема в том, что вставленная таблица выходит за пределы MyRange, что не позволяет после таблицы добавлять новые строки текста.
Добавлено через 6 минут
т
То есть надо таблицу вставить именно в MyRange, чтобы потом можно было к ней потом обратиться, и добавлять новый текст дальше
Добавлено через 2 минуты
А если кто-нибудь посоветует источник, где расписаны основные моменты работы с VBA Word, буду признателен
всё верно, угадали. Хочу научить Excel самостоятельно создавать отчеты в Word. Споткнулся на таблицах, прошу помощь зала
Добавлено через 3 минуты
а я как-то приладилась формировать НТМ-отчеты программно формировать(90-95%) ото всюду(ексель,аксесс, фохпро. ), обычно использую стандартные теги(30-40), без наворотов
со временем накопились стандартные куски кода для формирования СОГЛАСОВАНО/УТВЕРЖДАЮ, подписей.
удобно
--можно просто смотреть в броузере
--хорошо открывается в ворде для печати(автоподбор таблиц по ширине окна, альбомная/книжная), при необходимости пересохраняю в ДОС/ДОСХ-формат
--да и ексель с небольшой руганью открывает
каждый подстраивается под свой уровень ЛЕНИ
лично мне лень форматировать ворд-шаблон, расставлять закладки в нем
потом в аксесс/ексель писать код для заполнения сих закладок, при этом ломая голову над вставкой таблиц/рисунков
мне легче прописать все в одном месте, последовательным кодом, благо обычно требования основного заказчика по форматированию достаточно стандартны
закладки(вернее замены через найти /заменить) применяю в более художественных шаблонах, слияние применила видимо 1 -2 раза в самом начале работы с ворд-шаблонами, затем перешла на замены
Для начала давайте вспомним, что выделение фрагмента текста осуществляется следующим образом: в большинстве случаев нужно выбрать несколько фрагментов, для этого сначала выбираем один нужный фрагмент, далее удерживаем клавишу " Ctrl " и выбираем остальные фрагменты. Теперь перейдем к теме публикации…
Методы Insert… – выделение фрагментов текста в Word
Примеры будут как для редактора VBA, так и для сценариев Windows Script Host, и так, начнем…
Методы с префиксом Insert. позволяют вставить текст в документ:
InsertAfter (text) и InsertBefore (text) – Вставка текста (text) в конец или в начало выделения. При отсутствии выделения вставка производится там, где находится курсор. Сам материал остается выделенным.
InsertBreak (type) - Вставляет страницу, колонку или секцию. Параметр type содержит значение константы WdBreakType:
- wdTextWrappingBreak - 11 - Конец текущей строки и продолжение вставки ниже изображения, таблицы или другого объекта. Материал продолжается на следующей пустой строке, которая не содержит таблицу, совмещенную с левой или правой границей.
- wdLineBreakClearRight - 10 - Перевод на новую строку.
- wdLineBreakClearLeft - 9 - Перевод на новую строку.
- wdColumnBreak - 8 - Разрыв колонки.
- wdPageBreak - 7 - Вставка новой страницы.
- wdLineBreak - 6 - Перевод на новую строку.
- wdSectionBreakOddPage - 5 - Начало нового раздела со следующей нечетной страницы.
- wdSectionBreakEvenPage - 4 - Начало нового раздела со следующей четной страницы.
- wdSectionBreakContinuous - 3 - Новый раздел без разрыва страницы.
- wdSectionBreakNextPage - 2 - Начало нового раздела со следующей страницы.
Прежде чем приступать к программированию, стоит сделать некоторое пояснение. По сути, ряд действий будут всегда одинаковыми – создание нового документа (за это будет отвечать функция или процедура Create_Doc). Изменяться будут только вызываемые методы.
Программный код на VBScript :
Давайте посмотрим, что данный пример делает. При вызове процедуры Insert_After_Before происходит добавление в документ текстовой строки, далее в конец добавляется фраза " . Конец", а в начало - "Начало. ". Потом происходит перевод курсора в конец и добавление перевода строки.
Пример на JScript :
Для VBA мы просто запускаем редактор кода, добавляем новый модуль и прописываем код, в моем случае имя модуля - Module1:
И так, с одной теоретической частью мы закончили и написали программный код, теперь можно приступить к следующей части.
Методы Insert… – выделение фрагментов текста в Word
InsertCaption (Label, Title, TitleAutoText, Position, ExcludeLabel) - Вставляет заголовок сразу после или перед указанным выбором. Обязательным является только параметр Label.
Label – Нумерационный заголовок. Параметр может быть строкой или значением константы WdCaptionLabelID:
- wdCaptionEquation - Уравнение
- wdCaptionFigure - Рисунок
- wdCaptionTable – Таблица
Если метка (Label) не определена, то возникнет ошибка. Для определения метки надо использовать метод Add коллекции CaptionLabels , например:
Title – Заголовок, который будет отображаться справа от метки.
TitleAutoText – Авто-заголовок, перекрывает параметр Title.
Position - Указывает, будет ли вставлен заголовок выше или ниже. Может быть одной из констант WdCaptionPosition:
- wdCaptionPositionAbove - 0 - Метка название добавляется выше.
- wdCaptionPositionBelow - 1 - Метка название добавляется ниже.
ExcludeLabel - TRUE - отключить метку, заданную в параметре Label. FALSE - включить метку. Дополнительно.
Ниже я приведу примеры, что бы не дублировать программный код, я привел только содержимое процедуры Sub Insert_Caption.
Тут используется цикл for для вставки нескольких фрагментов - "Урок 6 по VBScript: Циклы for…next и for each…next".
Тут тоже используется цикл for, но уже для JS кода - "Урок 9 по JScript - оператор цикла for".
Обратите внимание, что имена переменных в примерах отличаются, это пришлось сделать с технических причин – в глазах поисковых систем статья становится заспамленой. Хорошо, давайте двигаться дальше.
Методы Insert… – выделение фрагментов текста в Word
InsertDateTime (DateTimeFormat) – Метод позволяет вставить дату или время в документ, или одновременно оба значения. Помимо параметра DateTimeFormat есть еще четыре, но они практически не используются.
DateTimeFormat – Необязательный параметр, позволяет указать формат даты и времени.
Обратите внимание на оператор with, он позволяет не писать каждый раз имя класса.
Тут логика работы аналогична.
Хорошо, осталось рассмотреть последнюю третью часть статьи.
Методы Insert… – выделение фрагментов текста в Word
InsertFile (FileName) – Позволяет вставить содержимое указанного файла в документ, параметр FileName хранит имя или путь к файлу, если путь отсутствует, то будет подразумеваться текущий каталог.
InsertNewPage - Вставляет новую страницу в место, где находится указатель.
InsertParagraph - Заменяет выделение знаком абзаца.
InsertParagraphAfter - Вставляет знак абзаца после выделения .
InsertParagraphBefore - Вставляет новый абзац перед выделением.
Методы с префиксом Move. также встречаются едва ли не в любой программе, связанной с вводом текста в Word. Самые важные и удобные из этих методов:
MoveLeft (), MoveRight (), MoveUp (), MoveDown () – Методы дают возможность переместить курсор влево, вправо, вверх и вниз. Все четыре метода принимают следующие параметры (Unit, Count, Extend), являющиеся необязательными:
Unit - Блок, по которым выбор должен быть перемещен. Параметр Unit содержит значения константы wdUnits.
Count – Единица перемещения. Значение по умолчанию 1.
Extend - Может быть либо wdMove (по умолчанию) или wdExtend.
MoveEnd (), MoveStart () – Перемещение курсора в конец или начало выделения, параметры - Unit, Count.
MoveStartUntil (), MoveStartWhile (), MoveEndUntil (), MoveEndWhile () – Позволяют переместить курсор к заданному символу или последовательности символов. Параметры Cset (обязательный) и Count (дополнительный):
Cset - Один или несколько символов. Аргумент является чувствительным к регистру.
Count – Задает целое или отрицательное значение, на которое происходит перемещение курсора.
Move (Unit, Count) – Фактически, тут мы может указать направление (Count) и текстовую единицу (Unit).
Логика работы для следующих примеров остается та же – меняется только код вызываемой процедуры. Фактически, код для языка VBScript и VBA является идентичным.
Видим, что в данном коде мы использовали несколько операторов for.
Обратите внимание на приведенные в самом начале статьи примеры кода для языков VBA и VBScript, в макросе мы можем использовать именованные константы объекта Word, но в теле Windows Script Host сценария нет, так как там они не доступны. Описание свойств класса Selection я рассмотрел в этой статье.
Спасибо за внимание. Автор блога Владимир Баталий
Стоит обратить внимание, что большая часть свойств и методов являются идентичными. Так, если мы используем некоторое свойство, работая с коллекцией, то оно будет влиять на все основные параметры абзаца в 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:
Пример на языке программирования JScript:
Хорошо, теорию разобрали, программированием занялись, теперь надо дать пояснения к сценариям:
Объявление переменных – в самом начале мы объявляем переменные, в языке 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 .
Спасибо за внимание. Автор блога Владимир Баталий
Читайте также: