Vba word удалить параграф
1.Объекты Range и Selection .Работа с текстом.
Работа с текстом осуществляется с помощью ряда объектов. Весь текст документа можно представить в виде пирамиды, основой которой являются символы, а вершиной – собственно документ. В иерархическом порядке объектов VBA документ Word можно представить как:
Символы ( Characters ) ® Слова ( Words ) ® Предложения ( Sentences ) ® ® Абзацы ( Paragraphs ) ® Разделы ( Sections ) ® Документ ( Document )
Кроме этих объектов, явно указывающих на тот или иной элемент документа, в VBA имеется два объекта, которые позволяют работать с текстом как с целым, без явного структурного разделения: объект Rahge ассоциируется с любым фрагментом документа, а объект Selection – с любым выделенным фрагментом текста. Оба эти объекта похожи по своему действию, однако они различаются по своим функциональным возможностям.
2.Выделенный текст.
Объект Selection является одним из базовых объектов. Это глобальный объект и предварительного объявления для него не требуется . в целом этот объект любое выделение в документе, а в случае если выделение вырождено, т.е. ничего не выделено, то объект описывает текущее положение указателя.
Эта особенность часто используется для получения ссылки на объект, описывающий текущий элемент документа.
Пример: получить ссылку на объект типа Paragraphs , являющегося семейством всех выделенных или затронутых выделением абзацев.
Dim e As Paragraphs
Set e = Selection.Paragraphs
Свойством по умолчанию для объекта типа Selection является свойство Text , возвращающее выделенный текст.
Selection .[. Text ][ =Text ]
Для замены текущего выделенного текста используется метод TypeText .
Пример: вставляем в документ текст «ХХХ» и начинаем новый абзац.
. TypeText Text := "XXX"
End With
Для управления параметрами вставки текста можно использовать свойство ReplaceSelection .
Если true – текущее выделение замещается, если False – то вставлять перед выделением.
3.Текстовый диапазон. Объект Range предназначен для выделения и обработки фрагментов текста. Этот объект является семейством многих объектов.
Например для выделения абзаца, в котором сейчас находится указатель достаточно использовать код
Selection.Paragraphs (1). Range.Select
Область текста, связанная с объектом типа Range , характеризуется начальными и конечными символами. Для получения информации о них нужно использовать свойства Start и End .
objrange.Start [=Position]
objrange.End [=Position]
параметр Position (типа Long ) позволяет задать индекс символа, с которого должен начаться или которым должен закончится фрагмент текста, связанного с данным объектом objRange .
Для получения ссылки на текстовый диапазон можно использовать метод Range .
ObjDocumet.Range ( Start , End )
Параметр Start указывает на индекс символа, с которого должен начаться диапазон, а параметр End – на индекс последнего символа. Индексы символов соответствуют их порядковым номерам в семействе Words , ссылку на которое возвращает свойство Words объекта Document .
4. Выделение текста.
Формально объект Range связан только с диапазоном текста. Этот диапазон может быть никак не связан с текущим положением курсора или выделением. Однако диапазон, связанный с объектом Range , можно выделить в любой момент времени с помощью метода Select .
Пример: выделить второй абзац текущего документа.
ThisDocument.Paragraphs (2). Range.Select
5.Вырождение диапазона.
Для создания вырожденного диапазона можно использовать метод Collapse .
Параметр Direction позволяет задать направление, в котором будет выполнено вырождение. Если параметр имеет значение wdCollapseStart , то вырождение выполняется в направлении начала диапазона, т.е. End:=Start . Если параметр имеет значение wdCollapseEnd , то Start:=End
Пример: снятия выделения в документе, курсор помещен в конец выделеного диапазона.
6.Форматирование текста.
Объект Range чаще используется как инструмент для форматирования выделенного текстового диапазона. Для этого, кроме свойства объекта Font объект Range имеет целый ряд свойств, позволяющих настроить параметры шрифта данного диапазона.
Свойство Bold – позволяет установить параметры жирного начертания символов.
Если свойство имеет значение True , то начертание жирное , если False – нежирное. Свойство также может возвращать значение wdUnderfined , указывающее на смешанное начертание. Для установления стиля начертания можно использовать следующие значения True , False или wdToggle , позволяющие переключить текущее написание шрифта.
objRange . Bold [= Boolean ]
Свойство CombineCharacters
Свойство позволяет сжать все символы выделенного диапазона. Если свойство имеет значение true , то выполняется сжатие.
Свойство FilTextWidth
Свойство позволяет указать ширин у( в текущих единицах измерения, в которых должен быть размещен данный диапазон). Размер шрифта и ширину межсимвольного пространства Word подбирает автоматически
В приведенном ниже примере показан код, позволяющий уместить текущее выделение на отрезке документа , ширина которого эквивалентна пяти сантиметрам.
Selection.Range.FilTextWidth = CentimetersToPoints ( 5)
Свойство objRange.FormattedText
Свойство возвращает ссылку на объект типа Range , который ассоциируется с текстом в пределах данного диапазона objRange , имеющего специфическое форматирование.
C войство Italic – позволяет установить параметры курсивного начертания символов.
Свойство ListFormat – возвращает ссылку на объект типа Listformat , содержащего нумерованные или маркированные списки, используемые в данном диапазоне.
Свойство ListParagraph
Свойство возвращает ссылку на объект типа ListParagraph , содержащего нумерованные абзацы, имеющиеся в данном диапазоне.
Свойство Shading – возвращает ссылку на объект типа Shading , позволяющего указать цвет и формат заливки для данного диапазона.
Свойство Revisions
Свойство возвращает ссылку на объект типа Revisions , который связан с исправлениями , находящимися в данном диапазоне.
Свойство Showall [= Boolean ]
Свойство позволяет указать на отображение непечатаемых символов: табуляций, пробелов, символов абзаца, скрытого текста. True -символы отображаются.
Свойство Style [= Style ]
Свойство позволяет задать стиль для данного абзаца. Параметр Stile (тип Stile ) позволяет указать один из существующих типов.
Свойство Underline [= Underline ]
Свойство позволяет указать , как должен быть подчеркнут текст в данном диапазоне. Параметр Underline ( тип Underline ) позволяет указать тип линии подчеркивания
Метод InsertAfter вставляет заданный текст в конце диапазона или выделения.
ActiveDocument.Range.InsertAfter "пример"
Метод InsertParagraph позволяет заменить заданный диапазон символов или выделения на новый абзац. После его использования объект Range отождествляется с новым абзацем.
Метод InsertSymbol предназначен для вставки символа в заданное место диапазона или выделения. При использовании данного метода содержимое диапазона или выделения удаляется. Если этого не требуется, то перед вызовом этого метода следует использовать метод Collapse .
ObjRange.InsertSimbol ( CharacterNumber , Font, Unicode)
Параметр CharacterNumber определяет код символа. Параметр Font определяет имя шрифта, используемого в качестве источника символов. Параметр Unicode если значение True , то вставляется юникодовый символ, заданный аргументом CharacterNumbe . В противном случае (по умолчанию False ) будет вставлен символ ANSI, заданный аргументом CharacterNumbe .
Selection.Collapse direction := wdCollapseStart
Selection.InsertSymbol characterNumber := 171, Font:="Symbol", unicode :=False «
Метод Paste позволяет вставить содержимое буфера обмена в заданный диапазон или выделение. При его использовании содержимое диапазона или выделения заменяется содержимым буфера обмена. В случае если требуется вставить абзац из буфера обмена без замены текущего абзаца, перед вызовом этого метода следует использовать метод Collapse .
7.Поиск и замена
Поиск и замена- это стандартные инструменты любого приложения Microsoft Office .Как правило, команды вызова соответствующих диалоговых окон располагаются в меню Правка( Edit ). Инструменты поиска и замены в VBA реализуются с помощью объектов Find и Replacement .
Задачи по поиску и замене требуют своей реализации в VBA в редких случаях, например при частом поиске и замене одного и того же сочетания , вложенном поиске или при контекстном поиске.
Стандартный инструмент поиска и замены работает следующим образом : вы открываете окно диалога Поиск и замена( Find and Replace ) , вводите в соответствующие поля необходимые значения , определяете дополнительные параметры поиска и нажимаете кнопку Поиск( Find ) или Заменить( Replece Однако при частом поиске или замене одних и тех же значений для этой операции удобно назначить кнопку на панели инструментов , комбинацию клавиш или разместить ее в контекстном меню. Для реализации этой задачи нужно сначала создать соответствующий макрос.
Для упрощения (ускорения) создания соответствующего программного кода можно автоматизировать процесс написания макроса.
Укажите необходимые параметры поиска и нажмите кнопку Н айти
На панели инструментов О становить запись нажмите кнопку Остановить запись
Откройте окно редактирования Visual Basic for Application и перейдите к записанному макросу.
Выполните ручное редактирование макроса
В приведенном ниже примере показан код, позволяющий заменить четыре идущих подряд символов пробела одним символом табуляции
Selection.Find.Execute Replace := wdReplaceall
В ситуации , когда нужно найти фрагмент документа , а в нем еще один фрагмент – задача становится неоднозначной. В этом случае можно создать два макроса , один из которых будет вызываться и другого.
В приведенном ниже примере реализован одкратно вложенный поиск и замена , однако число вложений может быть и больше.
Переменная strText (тип string ) содержит текст, вкотром осуществляется поиск . Если заданный текст будет найден (метод Execute возвращает True ), то осуществляется вызов процедуры ReplaceSpace 4, показанной в предыдущем примере .
If .Execute Then ReplaceSpace4
8.Коллекция Tables .
Таблица представляет собой упорядоченную структуру, предназначенную для хранения организованных в виде строк и столбцов наборов данных. Элемент таблицы, находящийся на пересечении строки и столбца, называется ячейкой.
Таблица Word имеет такую же структуру, как и электронная таблица Excel – элемент таблицы, находящийся на пересечении строки и столбца, называется ячейкой и идентифицируется по имени столбца и номеру строки.
В VBA для доступа к таблицам используется объект Tables , являющийся семейством объектов Table , каждый из которых связан с конкретной таблицей. Для получения ссылки на семейство Tables можно использовать свойство Tables объекта Document .
Общее число таблиц, имеющихся в документе, содержится в свойстве Count . Для получения доступа к конкретной таблице можно использовать метод Item , который является методом по умолчанию.
Set oblTable = objDocument.Tables.Item ( Key)
Параметр Key , является уникальным идентификатором каждой таблицы, хранящейся в объекте Tables .
Для создания новой таблицы используется метод Add объекта Tables . Этот метод возвращает ссылку на созданную таблицу( Table ).
objTables.Add ( Range , NumRows , NumColums )
Параметр Range позволяет указать область документа, куда будет вставлена таблица. Если параметр не пустой, т.е. имеется выделенная область, то она будет заменена вставляемой таблицей.
Параметры NumRows , NumColums позволяют указать на число строк и столбцов таблицы.
Visual Basic включает объекты, которые можно использовать для изменения следующих элементов документа: символов, слов, предложений, абзацев и разделов. В следующей таблице содержатся свойства, соответствующие этим элементам документа, и возвращаемые ими объекты.
Это выражение | Возвращает этот объект |
---|---|
Слова ( индекс) | Диапазон |
Символы ( индекс) | Диапазон |
Предложения ( индекс) | Диапазон |
Абзацы ( индекс) | Paragraph |
Разделы ( индекс) | Section |
Когда эти свойства используются без индекса, возвращается объект коллекции с таким же именем. Например, свойство Paragraphs возвращает объект коллекции Paragraphs . Однако при определении элемента в этих коллекциях по индексу возвращается объект во втором столбце таблицы. Например, Words(1) возвращает объект Range . После того как у вас есть объект Range , вы можете использовать любые свойства диапазона или методы для изменения объекта Range . Например, следующая инструкция копирует первое слово в выборе в буфер обмена.
Примечание Элементы в коллекциях Параграфы и Разделы — это особые формы коллекции, в частности объекты Paragraph и Объекты Section, а не объекты Range. На самом деле большинство коллекций в объектной модели Word имеют объекты единой формы, с которыми можно работать. Однако свойство Range (которое возвращает объект Range ) доступно как для объекта Paragraph , так и для объекта Section , а также для большинства других объектов, которые являются детьми коллекций. Например, следующая инструкция копирует первый абзац в активном документе в буфер обмена.
Все свойства элементов документа в предыдущей таблице доступны в объектах Document, Selection и Range . В следующих примерах показано, как можно сверлить эти свойства из объектов Document, Selection и Range . В следующем примере приводится пример первого слова в активном документе.
В следующем примере нижний предел текущего раздела устанавливается до 0,5 дюйма.
В следующем примере дважды пробелы текста в активном документе (свойство Content возвращает объект Range ).
Изменение группы элементов документа
Чтобы изменить диапазон текста, состоящий из группы элементов документа (символов, слов, предложений, абзацев или разделов), необходимо создать объект Range . Метод Range создает объект Range с точки запуска и конечной точки. Например, в следующей инструкции создается объект Range , который ссылается на первые десять символов в активном документе.
С помощью свойств Start и End с объектом Range можно создать новый объект Range , который относится к группе элементов документа. Например, в следующей инструкции создается объект Range ( rngThreeWords ), который ссылается на первые три слова в активном документе.
В следующем примере создается объект Range ( rngParagraphs ), начинающийся в начале второго абзаца и заканчивающийся после третьего абзаца.
Дополнительные сведения о определении объектов Range см. в ссылке Работа с объектами Range.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Стоит обратить внимание, что большая часть свойств и методов являются идентичными. Так, если мы используем некоторое свойство, работая с коллекцией, то оно будет влиять на все основные параметры абзаца в 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 .
Спасибо за внимание. Автор блога Владимир Баталий
Методы класса 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
' ---------------------------------------------------------------------------- ' Объект Selection - выделение текста в Word ' Преобразование в таблицу - язык VBScript ' VBA_Selection_Table.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection oWord.Visible = True For i = 0 To 10 With oSel .InsertBreak 6 .InsertBefore "один, два, три, четыре, пять, шесть, selection word vba" .EndOf .InsertBreak 6 End With Next oWord.Documents(1).Select() oSel.ConvertToTable ",", 31. 18
В данном примере в цикле For (смотрите статью "Урок 6 по VBScript: Циклы for…next и for each…next"), который выполняется шесть раз, происходит вставка перевода на новую строку, вставка текстовой фразы и перемещаем курсов к конец строки. С помощью оператора with мы можем экономить размер программного кода – не нужно лишний раз писать имя класса. Вконце происходит выделение текста Word и преобразование его в таблицу.
Примера на языке JScript – выделение текста в редакторе Word
// ---------------------------------------------------------------------------- // Объект Selection - выделение текста в Word // Преобразование в таблицу - язык JScript // VBA_Selection_Table.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, i; oWord1 = WScript.CreateObject("Word.Application"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oWord1.Visible = true; for (i=0; i <=10;i++)< with(oSel1)< InsertBreak(6); InsertBefore("один, два, три, четыре, пять, шесть, selection word vba"); EndOf(); InsertBreak(6); >> oWord1.Documents(1).Select(); oSel1.ConvertToTable(",", 31,"","",18);
Логика работы данного программного кода аналогичны предыдущему примеру, тут мы уже использовали цикл for языка JS, читайте в статье "Урок 9 по JScript - оператор цикла for". Тут тоже использовался оператор with, обратите внимание, что имена переменных изменились, а в конце каждой строки кода прописана точка с запятой.
Примера на языке Visual Basic for Application – выделение текста в редакторе Word
'VBA Dim oWord2 As Object, oDoc2 As Object, oSel2 As Object, i Set oWord2 = CreateObject("Word.Application") Set oDoc2 = oWord2.Documents oDoc2.Add Set oSel2 = oWord2.Selection oWord2.Visible = True For i = 0 To 10 With oSel2 .InsertBreak 6: .InsertBefore "один, два, три, четыре, пять, шесть, selection word vba" .EndOf: .InsertBreak 6 End With Next oWord2.Documents(1).Select oSel2.ConvertToTable Separator:=",", NumRows:=31, Format:=18
Хорошо, давайте продолжим рассматривать методы класса Selection.
EndOf () – Перемещает курсор в конец выделения.
StartOf () – Перемещает курсор в начало выделения.
SetRange (start, end) – Позволяет задать начальное и конечное значение для выделения текста Word.
TypeText () – Выполняет ту же функцию, что и свойство Text – ввод информации.
TypeParagraph () - Метод вставляет параграф.
Copy (), Cut (), Paste (), Delete () – Копирует, вырезает, вставляет и удаляет выделенный текст в Word.
CopyAsPicture () – Копирует выбранный материал как изображение.
И так, теперь рассмотрим программный код с данными методами.
' ---------------------------------------------------------------------------- ' Класс Selection - выделение текста в Word ' Копирование и вставка - язык VBScript ' VBA_Selection_Copy_Paste.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord3, oDoc3, oSel3, i Set oWord3 = CreateObject("Word.Application") Set oDoc3 = oWord3.Documents oDoc3.Add() Set oSel3 = oWord3.Selection oWord3.Visible = True ' Вводим информацию в документ сто раз For i=0 to 100 oSel3.TypeText "Пример ввода данных - selection word vba. " Next With oSel3 ' Выделяем, копируем и вставляем .SetRange 100, 300 .Copy .MoveDown .Paste ' Выбираем материал и копируем ее как изображение .SetRange 100, 300 .CopyAsPicture End With
По сути, данный программный код практически аналогичен предыдущим. Тут в цикле происходит вставка данных несколько раз, а далее следуют операции выделения текста в документе Word, его копирование и вставка.
Ну и в заключение, привожу программный код для макроса:
' VBA Dim oWord6 As Object, oDoc6 As Object, oSel6 As Object, i Set oWord6 = CreateObject("Word.Application") Set oDoc6 = oWord6.Documents oDoc6.Add Set oSel6 = oWord6.Selection oWord6.Visible = True For i = 0 To 100 oSel6.TypeText "Пример ввода информации - selection word vba. " Next With oSel6 .SetRange 100, 300: .Copy: .MoveDown: .Paste .SetRange 100, 300: .CopyAsPicture End With
Хорошо, на этом можно закончить данную статью. Параллельно, информацию по работе с классом Selection можете рассмотреть еще две публикации, в которых я рассмотрел остальные методы и свойства класса Selection.
Спасибо за внимание. Автор блога Владимир Баталий
Попытка переместить чрезмерные промежутки между абзацами с помощью этой процедуры.
После того, как я запустил его, цикл никогда не заканчивается, и я получаю такое образование внизу документа. Обратите внимание, что он немного работает, а затем застревает.
РЕДАКТИРОВАТЬ: у меня есть два разрыва абзаца в конце, и они просто заменяются еще двумя. Я на самом деле пошел вручную, чтобы попытаться выбрать и заменить их . и то же самое, они просто по какой-то причине просто заменяют лишним. Не знаю, о чем это, может быть, это другой особенный персонаж?
один совет, который может показаться странным . Я скопировал вашу подписку, и она не сработала. Тогда и Сиддхартх тоже не сработал. Затем я создал свой, который сработал. Я сделал еще кое-что, выключил приложение и снова попробовал все сабы. Все подпрограммы начали работать, как ожидалось - ваша, моя и Сиддхарда . Понятия не имею, почему .
Хороший совет! Кажется, работает. У меня все еще есть эта странная цепочка знаков абзаца, но они только в конце, и цикл не застревает. Итак, вот сюда!
у вас есть все три подпрограммы отсюда в вашем модуле или только ваш? Я только что снова открыл документ, а работает только мой . странно .
Я понятия не имею, почему работает KazJaw - он по-прежнему оставляет две отметки абзаца в конце, но Execute возвращает False. Когда я дохожу до последнего GoTo, я получаю это в окне немедленного доступа.
Почему он не находит два возврата каретки, когда это все? Странный. В любом случае, мне не нравится менять выделение или GoTo, поэтому я включил свою версию. Он завершается, когда Find ничего не может найти или находится в конце документа.
Если вы знаете верхний предел количества абзацев в строке, вы можете сделать это по-другому. Например, если вы знаете, что пустых абзацев не более 10, вы можете сделать это:
Читайте также: