Vba word выделить абзац

Обновлено: 05.07.2024

Я новичок в использовании VBA для написания макросов в MS Word. Я придумал, как выбрать ячейку в таблице, но, похоже, я не могу использовать с ней объект абзаца . или, что более вероятно, я делаю это неправильно.

По сути, то, что я пытаюсь сделать, это поиск фразы «следующим образом:» во всех абзацах ячейки (13,2) таблицы (1). Если он его найдет, я хочу посмотреть, не произойдет ли следующее после этой фразы - новый абзац с маркером. Если это так, отлично, больше нечего делать. Если это не так, сделайте новый абзац маркером.

Я просто не уверен, как это сделать, особенно определяя, есть ли уже пуля или нет.

Надеюсь, что кто-то сможет пролить свет на эту тему. А пока я буду отключаться. :)

ОБНОВЛЕНИЕ: я дошел до того, что вставляет возврат, и я надеялся вставить пулю, но он вставляет пулю во множество пробелов в этой ячейке, а не после vbCr:

2 ответа

Я изменил ваш образец кода, и у меня это работает. Поскольку вы уже объявляете и назначаете диапазон для BIOCell, вы можете использовать его во всем макросе для идентификации содержимого ячейки. Нет необходимости использовать тест «Нравится», поскольку Range.Find.Execute возвращает True в случае успеха, в противном случае - False. При успешном поиске диапазон изменится на то, что было найдено (другими словами, это больше не вся ячейка).

Попытка заменить знаком абзаца не работает должным образом. Поскольку вам нужно сделать что-то, что в любом случае невозможно сделать с помощью функции «Найти / заменить» (маркеры), просто добавьте знак абзаца, если поиск выполнен успешно, поместите фокус «Диапазон» в конец ячейки, а затем примените форматирование маркеров. (Обратите внимание, что нет необходимости использовать Selection, если у вас есть объект Range.)

Если в ячейке таблицы уже есть абзацы текста и вы хотите, чтобы все, что находится после термина «Найти», было маркировано, то код может выглядеть как в следующем примере.

В этом случае второй объект Range используется для выполнения поиска, в то время как BIOCell остается назначенным для всей ячейки. (Всегда используйте свойство Duplicate , чтобы сделать "копию" Range, которая может использоваться независимо. Range - это анамолия в объектных моделях Office: Range = Range делает оба Ranges идентично - если вы измените положение одного, изменится и положение другого.)

После успешного поиска findRange сворачивается до конца термина Find и перемещается на один абзац дальше (в первый абзац после найденного текста). Затем конец диапазона расширяется до конца ячейки (конец BIOCell), затем перемещается на пару символов назад, чтобы не включать маркеры конца ячейки. (В противном случае маркеры будут применяться ко всей ячейке, а не к последнему абзацу ячейки.)

параметры абзаца - Коллекция Paragraphs и объект Paragraph

Стоит обратить внимание, что большая часть свойств и методов являются идентичными. Так, если мы используем некоторое свойство, работая с коллекцией, то оно будет влиять на все основные параметры абзаца в 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.

Общие методы – настройка параметров абзаца

задаем параметры абзацев в документе word

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 – основные параметры абзаца

параметры форматирования в Word абзаца

Count – Содержит количество параграфов в документе. Только чтение.

Item (count) – Позволяет получить доступ к указанному абзацу в коллекции, вернет объект Paragraph.

Add () - Возвращает объект Paragraph, который представляет параметры форматирования нового абзаца, который является пустым, добавленным в документ.

DecreaseSpacing () - Уменьшает отступ между параграфами на 6 пунктов.

IncreaseSpacing () - Увеличивает отступ между параграфами на 6 пунктов.

Методы объекта Paragraph – параметры форматирования абзацев

настройка в Word параметра абзацов

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 .

Спасибо за внимание. Автор блога Владимир Баталий

Методы класса 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 - включить Авто-подбор

Выделение блока текста в Word, VBA Selection

Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию.

Примера на языке 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.

выделение текста в редакторе Word, Selection VBA

EndOf () – Перемещает курсор в конец выделения.

StartOf () – Перемещает курсор в начало выделения.

SetRange (start, end) – Позволяет задать начальное и конечное значение для выделения текста Word.

TypeText () – Выполняет ту же функцию, что и свойство Text – ввод информации.

TypeParagraph () - Метод вставляет параграф.

Copy (), Cut (), Paste (), Delete () – Копирует, вырезает, вставляет и удаляет выделенный текст в Word.

CopyAsPicture () – Копирует выбранный материал как изображение.

И так, теперь рассмотрим программный код с данными методами.

По сути, данный программный код практически аналогичен предыдущим. Тут в цикле происходит вставка данных несколько раз, а далее следуют операции выделения текста в документе Word, его копирование и вставка.

Ну и в заключение, привожу программный код для макроса:

Хорошо, на этом можно закончить данную статью. Параллельно, информацию по работе с классом Selection можете рассмотреть еще две публикации, в которых я рассмотрел остальные методы и свойства класса Selection.

Спасибо за внимание. Автор блога Владимир Баталий

Объект Word Selection - как выделить фрагмент текста

Для начала давайте вспомним, что выделение фрагмента текста осуществляется следующим образом: в большинстве случаев нужно выбрать несколько фрагментов, для этого сначала выбираем один нужный фрагмент, далее удерживаем клавишу " 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 я рассмотрел в этой статье.

Спасибо за внимание. Автор блога Владимир Баталий

Читайте также: