Selection typetext vba word

I am still a beginner with this. Can you tell my why this is not formatting the selection?

Selection.TypeText "title"

With Selection

        .Font.Bold = True
        .Font.Name = "Arial"
        .Font.ColorIndex = wdDarkBlue
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .ParagraphFormat.SpaceAfter = 0
End With

Deduplicator's user avatar

Deduplicator

44.3k7 gold badges65 silver badges115 bronze badges

asked Nov 15, 2012 at 15:37

ShadyBaker's user avatar

It does format the text, but only text added after the With Selection command.

Change the order, put Selection.TypeText "title" last, and it will work. :)

answered Nov 15, 2012 at 15:58

Olle Sjögren's user avatar

Olle SjögrenOlle Sjögren

5,2653 gold badges31 silver badges51 bronze badges

Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим методы объекта Word Selection, которые позволяют очистить материал от форматирования, преобразовать в таблицу, а также производить копирование, вставку и так далее. Помним, что данный класс отвечает за выделение текста в Word.

Содержание

  1. Методы класса Word.Selection – выделение текста в Word
  2. Примера на языке VBScript – выделение текста в редакторе Word
  3. Примера на языке JScript – выделение текста в редакторе 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 — включить Авто-подбор

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

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

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

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

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, его копирование и вставка.

// ----------------------------------------------------------------------------
// Класс Selection - выделение текста в Word
// Копирование и вставка - язык JScript
// VBA_Selection_Copy_Paste.js
// ----------------------------------------------------------------------------
 
var oWord5, oDoc5, oSel5, i;
 
oWord5 = WScript.CreateObject("Word.Application");
oDoc5 = oWord5.Documents;
oDoc5.Add();
oSel5 = oWord5.Selection;
oWord5.Visible = true;
 
// Вводим данные в документ сто раз
for(i=0; i<=100; i++){
  oSel5.TypeText("Пример ввода информации - selection word vba. ");
}
 
with(oSel5){
  // Выделяем, копируем и вставляем
  SetRange(100, 300);
  Copy();
  MoveDown();
  Paste();
 
  // Выделяем и копируем как изображение
  SetRange(100, 300);
  CopyAsPicture();
}

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

' 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.

Аннотация: Лекция посвящена описанию объектов Selection и Range, описанию особенностей работы с автоматически выполняемыми макросами и шаблонами.

11.1. Объект Selection

Выше нам уже встречался и объект Selection, и объект Range. Здесь пришло время поговорить о них подробнее, обсудить особенности их использования.

Напомню, что объект Application.Selection представляет собой выделенный участок документа или, если ничего не выделено, позицию курсора. Именно этим объектом пользуется макрорекордер при записи макроса, выполняющего какие-либо операции с текстом.

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

Выделения можно создавать и программно, но эту методику практически никогда не используют на практике. Например, код листинга 11.1 выделяет седьмое слово в документе и форматирует его курсивом:

ActiveDocument.Words.Item(7).Select
Selection.Font.Italic = True


Листинг
11.1.
Выделяем седьмое слово и форматируем его

Предположим, мы используем такую конструкцию в шаблоне для автоматического форматирования текста. Если мы правильно рассчитаем номер слова, которое нужно отформатировать (или отредактировать, вставить в документ и т.д.) — то все будет работать правильно. Но стоит нам отредактировать шаблон — даже совсем немного, но так, что количество слов в нем изменится, наш макрос будет работать неправильно.

Объект Selection обычно используют без объявления объектной переменной. Например, для вставки в выделенную позицию документа текста «Привет» достаточно конструкции листинга 11.2.

Selection.Text = "Привет"


Листинг
11.2.
Добавляем текст в выделенную позицию документа

Минус использования Selection при автоматической обработке текста зависит от того, что он слишком чувствителен к действиям пользователя. Например, мы напишем программу, которая, имитируя выделение фрагментов текста с клавиатуры, обрабатывает текст. Если во время обработки текста пользователь вмешается, случайно кликнув мышью в документе, работа такой программы будет нарушена.

Рассмотрим основные свойства и методы объекта Selection.

11.2. Методы объекта Selection

11.2.1. ClearFormatting — очистить форматирование

Этот метод очищает форматирование выделенного участка документа.

11.2.2. Copy, Cut, Paste, Delete

Методы Copy и Cut, соответственно, копируют и вырезают выделенный фрагмент в буфер обмена, а метод Paste — вставляет материалы из буфера в область выделения.

Метод Delete удаляет выделенный фрагмент

11.2.3. InsertAfter, InsertBefore — добавление текста

Как следует из их названий, методы InsertAfter и InsertBefore позволяют вставить текст после или до выделения. Существуют и другие методы, название которых начинается с Insert. Они позволяют вставлять множество других объектов в выделенную область. Например, InsertBreak вставляет разрыв страницы, колонки или раздела, InsertCells вставляет в выделенную таблицу ячейки и т.д.

11.2.4. TypeBackspace — удалить символ

Удаляет один символ, предшествующий позиции курсора, имитируя нажатие клавиши Backspace на клавиатуре.

11.2.5. TypeParagraph — перевод строки

Имитирует нажатие клавиши Enter на клавиатуре — вставляет в текст знак перевода строки.

11.2.6. TypeText — вывести текст в документ

Вводит в документ текст. У метода есть лишь один параметр — Text. Он должен содержать тот текст, который должен быть выведен в документ. Ниже мы рассмотрим примеры, где используется этот метод.

11.2.7. WholeStory — выделить весь документ

Позволяет выделить весь документ. Пожалуй, это единственный удобный метод программного управления выделением.

11.3. Свойства объекта Selection

11.3.1. Bookmarks и другие

Это свойство возвращает коллекцию Bookmarks, которая содержит все закладки, имеющиеся в выделении. Существуют подобные свойства для символов ( Characters ), таблиц ( Tables ) и многих других коллекций объектов. Работа с ними ни чем не отличается от работы с аналогичными коллекциями, входящими в Document.

11.3.2. End и Start

Эти свойства позволяют узнать и модифицировать, соответственно, конечную ( End ) и начальную ( Start ) позиции выделения.

11.3.3. Font — шрифт

Это свойство позволяет узнавать и настраивать параметры шрифта выделенного фрагмента. Например, код, приведенный в листинге 11.3 форматирует текст. Пояснения к примеру приведены в комментариях.

'Полужирный
    Selection.Font.Bold = wdToggle
    'Курсивный
    Selection.Font.Italic = wdToggle
    'Подчеркнутый
    Selection.Font.Underline = wdUnderlineSingle
    'Гарнитура Arial Narrow
    Selection.Font.Name = "Arial Narrow"
    'Размер шрифта - 14
    Selection.Font.Size = 14
    'Цвет шрифта - красный - из
    'перечисления wdColorR
    Selection.Font.Color = wdColorRed


Листинг
11.3.
Форматируем текст

11.3.4. Information — подробности о выделении

Позволяет узнать подробности о выделении. Это свойство может принимать параметр типа wdInformation, который и определяет, что именно возвратит свойство.

11.3.5. Range — переход от Selection к Range

Это свойство позволяет получить объект Range, соответствующий выделению.

Например, этим свойством можно воспользоваться так, как показано в листинге 11.4.

Dim obj_Range As Range
Set obj_Range = Selection.Range


Листинг
11.4.
Получаем объект Range из Selection

11.3.5. Text — текст выделения

Это свойство позволяет получить текст, содержащийся в выделении, и изменить его.

11.4. Пример работы с Selection

11-01-Selection.docm— пример к п. 11.4.

Рассмотрим пример использования вышеперечисленных свойств и методов (а заодно – и некоторых других), решив небольшую задачу.

11.4.1. Задание

Создать новый документ, и добавить в него текст, который был выделен в текущем документе. Каждое слово этого текста надо напечатать отдельно, с новой строки. Каждое слово должно предваряться таким текстом: «Слово №x:», где x — номер слова в выделенном тексте. После вывода слов нужно подсчитать количество слов и количество букв в этих словах и вывести строку «Всего обработано «x» слов, состоящих из «xx» букв». Готовый документ сохранить на диске C:, задав в качестве его имени такую структуру:

"Имя_исходного_документа"+ "текущая дата"+ "обработано".docm

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

11.4.2. Решение

Создадим новый макрос ( Copy_To_File ), воспользовавшись окном Макросы, которое можно открыть с вкладки Вид.

Добавим в макрос код из листинга 11.5.

'Переменая для хранения ссылки на новый документ
    Dim obj_NewDoc As Document
    'Для ссылки на исходный документ
    Dim obj_OurDoc As Document
    'Динамический массив для хранения слов
    Dim WordsArray() As String
    'Переменная для хранения количества слов
    Dim WordsCount
    'Переменная для формирования строк,
    'которые выводятся в новый документ
    Dim OutString
    'Переменная для хранения количества
    'символов в обработанных словах
    Dim LettersCount
    'В этой переменной будем создавать
    'имя файла
    Dim NewDocName
    'Запишем ссылку на активный документ
    'Для того, чтобы вернуться в него
    'после работы с новым документом
    Set obj_OurDoc = ActiveDocument
    WordsCount = Selection.Words.Count
    LettersCount = Selection.Characters.Count
    ReDim WordsArray(WordsCount)
    'Переносим слова из выделения
    'в массив для удобства работы с ними
    For i = 1 To WordsCount
        WordsArray(i) = Selection.Words.Item(i)
    Next i
    'Создадим новый документ
    Set obj_NewDoc = Documents.Add
    'И сделаем его активным
    obj_NewDoc.Activate
    'Теперь объект Selection относится к активному
    'документу и мы начинаем вводить в него данные
    Selection.TypeText ("Список выделенных слов")
    Selection.TypeParagraph
    For i = 1 To WordsCount
        OutString = "Слово №" + Str(i) + ": " + _
        WordsArray(i)
        Selection.TypeText (OutString)
        Selection.TypeParagraph
    Next i
    Selection.TypeText ("Всего обработано " + _
    Str(WordsCount) + _
    " слов(а), в которых содержится " + _
    Str(LettersCount) + " символа(ов)")
    'Создаем имя нового документа
    NewDocName = obj_OurDoc.Name + " " + _
    Str(Date) + " Обработано.docx"
    'Установим корневой каталог диска C:
    'для сохранения нового файла по умолчанию
    ChangeFileOpenDirectory "C:"
    'Используем метод SaveAs для
    'автоматического сохранения
    'документа
    ActiveDocument.SaveAs _
    FileName:=NewDocName, _
    FileFormat:=wdFormatDocumentDefault
    'Закрываем активный документ
    ActiveDocument.Close
    'Активируем документ, в котором мы выделяли
    'слова
    obj_OurDoc.Activate
    'Отмечаем обработанный участок
    'скобками и выделением синим цветом
    Selection.InsertAfter (") ")
    Selection.InsertBefore (" (")
    Selection.Font.Color = wdColorBlue
    'Выделяем первый символ текущего выделения и
    'выводим сообщение о том, что операция
    'выполнена
    Selection.Characters(1).Select
    MsgBox ("Выполнено!")


Листинг
11.5.
Решение задачи

Как видите, в этом примере мы используем исключительно объект Selection для работы с текстом документов. Обратите внимание на то, что мы нигде специально не храним информацию о выделенной области первого документа. Создав второй документ, мы просто делаем его активным и работаем с ним, используя его объект Selection. В это время выделение сохраняется в исходном документе. Однако, если в это время пользователь случайно или умышленно изменит выделение текущего документа — программа будет работать неправильно — она выделит не тот фрагмент, который был передан ей для обработки, а совсем другой.

  1. Объекты
    Range и Selection.
    Работа с текстом.
  2. Выделенный
    текст.
  3. Текстовый
    диапазон.
  4. Выделение
    текста.
  5. Вырождение
    диапазона.
  6. Форматирование
    текста.
  7. Поиск
    и замена
  8. Коллекция
    Tables.

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

MsgBox e.Count

Свойством по умолчанию для объекта типа Selection
является свойство Text, возвращающее выделенный
текст.

Selection.[.Text][=Text]

Для замены текущего выделенного текста используется метод
TypeText
.

Selection.TypeText(Text)

Пример: вставляем в документ текст «ХХХ» и начинаем новый
абзац.

With
Selection

.TypeText Text:=«XXX»

.TypeParagraph

End With

Для управления параметрами вставки текста можно использовать
свойство ReplaceSelection.

Selection.ReplaceSelection [=Boolean]

Если 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.

ObjRange.Select

Пример: выделить второй абзац текущего документа.

ThisDocument.Paragraphs(2).Range.Select

5.Вырождение диапазона.

Для создания вырожденного диапазона можно использовать метод
Collapse
.

objRange.Collapse [(Direction)]

 Параметр Direction позволяет задать направление, в котором будет
выполнено вырождение. Если параметр имеет значение wdCollapseStart,
то вырождение выполняется в направлении начала диапазона, т.е. End:=Start. Если параметр имеет значение wdCollapseEnd, то Start:=End

Пример: снятия выделения в документе, курсор помещен в конец
выделеного диапазона.

Selection.Collapse wdCollapseEnd

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 вставляет
заданный текст в конце диапазона или выделения.

Синтаксис:

objRange.InsertAfter(Text)

Пример:

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

Для упрощения (ускорения) создания соответствующего
программного кода можно автоматизировать процесс написания макроса.

  1. Подготовить
    документ к поиску
  2. Выбрать
    команду Сервис +Макросачать запись
  3. В
    поле Имя макроса введите имя макроса , в поле
    Описание добавьте описание макроса
  4. Нажмите
    кнопку Ok – откроется панель инструментов Остановит запись , содержащая кнопки управления записью макроса:
    Остановить запись и Пауза.
  5. Выберите
    команду Правкаайти

Укажите необходимые параметры
поиска и нажмите кнопку Найти

На панели инструментов Остановить запись нажмите кнопку Остановить
запись

Откройте окно редактирования Visual Basic for Application и
перейдите к записанному макросу.

Выполните ручное редактирование
макроса

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

Пример:

 Sub ReplaceSpace4()

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text=space(4)

.Replacement.text=”^t”

.forward=true

.Wrap=WdfindWrap.wdfindall

End With

Selection.Find.Execute Replace:=wdReplaceall

End Sub

В ситуации ,
когда нужно найти фрагмент документа , а в нем еще один фрагмент – задача
становится неоднозначной. В этом случае можно создать два макроса , один из которых будет вызываться и другого.

В приведенном ниже примере
реализован одкратно вложенный поиск и замена , однако число вложений может быть и больше.

Переменная strText(тип string) содержит текст, вкотром осуществляется поиск .
Если заданный текст будет найден (метод Execute возвращает True), то осуществляется вызов процедуры
ReplaceSpace4,
показанной в предыдущем примере .

Пример:

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

 With Selection.Find

.Text= strText

If .Execute Then ReplaceSpace4

End With

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
позволяют указать на число строк и
столбцов таблицы.

Пример: создадим таблицу в выделенном
месте или там где стоит курсор.

Set instable = ActiveDocument.Tables.Add(Selection.Range, 4, 10)

Using Excel VBA to create Microsoft Word documents

In these examples, we generate Microsoft Word Documents with various formatting features using
the Microsoft Excel VBA scripting language. These techniques can have many useful applications.
For instance if you have a list of data like a price or product list in Excel that you want to present
in a formatted Word Document, these techniques can prove useful.

In these examples, we assume the reader has at least basic knowledge of VBA, so we will not
go over basics of creating and running scripts. This code has been tested on Microsoft Word and Excel
2007. Some changes may be required for other versions of Word and Excel.

Writing to Word
Inserting a Table of Contents
Inserting Tabs
Inserting Tables
Inserting Bullet List
more on Inserting Tables
Multiple Features

Function that demonstrates VBA writing to a Microsoft Word document

The following code illustrates the use of VBA Word.Application object and related properties.
In this example, we create a new Word Document add some text.

    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
	
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
        
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphCenter
            .Font.Bold = True
            .Font.Name = "arial"
            .Font.Size = 14
            .TypeText ("My Heading")
            .TypeParagraph            
        End With
    End With 

Some VBA Vocabulary

ParagraphFormat
Represents all the formatting for a paragraph.

output in MS Word:

Inserting a Table of Contents into Word Document using Excel VBA

In this example, we generate a Table of Contents into a Word Document using Excel VBA

Sub sAddTableOfContents()
    
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
	
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
    
    Dim wdDoc As Word.Document
    Set wdDoc = wdApp.Documents.Add
    
    ' Note we define a Word.range, as the default range wouled be an Excel range!
    Dim myWordRange As Word.range
    Dim Counter As Integer
    
    wdApp.Visible = True
    wdApp.Activate
    
    'Insert Some Headers
    With wdApp
        For Counter = 1 To 5
            .Selection.TypeParagraph
            .Selection.Style = "Heading 1"
            .Selection.TypeText "A Heading Level 1"
            .Selection.TypeParagraph
            .Selection.TypeText "Some details"
        Next
    End With

    ' We want to put table of contents at the top of the page
	Set myWordRange = wdApp.ActiveDocument.range(0, 0)
    
    wdApp.ActiveDocument.TablesOfContents.Add _
     range:=myWordRange, _
     UseFields:=False, _
     UseHeadingStyles:=True, _
     LowerHeadingLevel:=3, _
     UpperHeadingLevel:=1

End Sub

Some VBA Vocabulary

ActiveDocument.TablesOfContents.Add
The TablesOfContents property to return the TablesOfContents collection.
Use the Add method to add a table of contents to a document.

Some TablesOfContents Parameters

Range The range where you want the table of contents to appear. The table of contents replaces the range, if the range isn’t collapsed.

UseHeadingStyles True to use built-in heading styles to create the table of contents. The default value is True.

UpperHeadingLevel The starting heading level for the table of contents. Corresponds to the starting value used with the o switch for a Table of Contents (TOC) field. The default value is 1.

LowerHeadingLevel The ending heading level for the table of contents. Corresponds to the ending value used with the o switch for a Table of Contents (TOC) field. The default value is 9.

output Word Table in MS Word:

Write Microsoft Word Tabs

A function that writes tabbed content to a Microsoft Word Document. Note in each iteration, we change the
value of the leader character (characters that are inserted in the otherwise blank area created by the tab).

Public Sub sWriteMicrosoftTabs()

    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
        
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
    
        For Counter = 1 To 3
            .Selection.TypeText Text:=Counter & " - Tab 1 "
            
            ' position to 2.5 inches
            .Selection.Paragraphs.TabStops.Add Position:=Application.InchesToPoints(2.5), _
                Leader:=Counter, Alignment:=wdAlignTabLeft
            
            .Selection.TypeText Text:=vbTab & " - Tab 2 "
            
            ' position to 5 inches
            .Selection.Paragraphs.TabStops.Add Position:=Application.InchesToPoints(5), _
                Leader:=Counter, Alignment:=wdAlignTabLeft
            
            .Selection.TypeText Text:=vbTab & " - Tab 3 "
                    
            .Selection.TypeParagraph
        Next Counter
        
    End With
End Sub

Some VBA Vocabulary

.TabStops.Add Use the TabStops property to return the TabStops collection. In the example above,
nprogram adds a tab stop positioned at 0, 2.5 and 5 inches.

output in MS Word:

Write Microsoft Word Tables

In this example, we generate a Microsoft Table using Excel VBA

Sub sWriteMSWordTable ()
 
    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
        
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
        
        With .Selection
        
            .Tables.Add _
                    Range:=wdApp.Selection.Range, _
                    NumRows:=1, NumColumns:=3, _
                    DefaultTableBehavior:=wdWord9TableBehavior, _
                    AutoFitBehavior:=wdAutoFitContent
            
            For counter = 1 To 12
                .TypeText Text:="Cell " & counter
                If counter <> 12 Then
                    .MoveRight Unit:=wdCell
                End If
            Next
        
        End With
        
    End With

End Sub

Some VBA vocabulary

Table.AddTable object that represents a new, blank table added to a document.

Table.Add properties

Range The range where you want the table to appear. The table replaces the range, if the range isn’t collapsed.

NumRows The number of rows you want to include in the table.

NumColumns The number of columns you want to include in the table.

DefaultTableBehavior Sets a value that specifies whether Microsoft Word automatically resizes cells in tables to fit the cells� contents (AutoFit). Can be either of the following constants: wdWord8TableBehavior (AutoFit disabled) or wdWord9TableBehavior (AutoFit enabled). The default constant is wdWord8TableBehavior.

AutoFitBehavior Sets the AutoFit rules for how Word sizes tables. Can be one of the WdAutoFitBehavior constants.

output in MS Word:

Write Microsoft Word bullet list

In this example, we write with bullet list and outline numbers with Excel VBA

    'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    
    'Early Binding
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Set wdApp = CreateObject("word.Application")
    
    With wdApp
        .Visible = True
        .Activate
        .Documents.Add
        ' turn on bullets
        .ListGalleries(wdBulletGallery).ListTemplates(1).Name = ""
        .Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=.ListGalleries(wdBulletGallery).ListTemplates(1), _
            continuepreviouslist:=False, applyto:=wdListApplyToWholeList, defaultlistbehavior:=wdWord9ListBehavior
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
            .Font.Bold = False
            .Font.Name = "Century Gothic"
            .Font.Size = 12
            .TypeText ("some details")
            .TypeParagraph
            .TypeText ("some details")
            .TypeParagraph
        End With
        
        ' turn off bullets
        .Selection.Range.ListFormat.RemoveNumbers wdBulletGallery
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
            .TypeText ("some details")
            .TypeParagraph
            .TypeText ("some details")
            .TypeParagraph
            
        End With
        
        ' turn on outline numbers
        .ListGalleries(wdOutlineNumberGallery).ListTemplates(1).Name = ""
        .Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=.ListGalleries(wdOutlineNumberGallery).ListTemplates(1), _
            continuepreviouslist:=False, applyto:=wdListApplyToWholeList, defaultlistbehavior:=wdWord9ListBehavior
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphLeft
            .TypeText ("some details")
            .TypeParagraph
            .TypeText ("some details")
            
        End With
        
    End With

output in MS Word:

Another example of Writing Tables to Microsoft Word

In this example we will create a word document with 20 paragraphs. Each paragraph will have a header with a header style element

    
   'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document

    Set wdApp = New Word.Application
    wdApp.Visible = True
    
    
    Dim x As Integer
    Dim y As Integer
    
    wdApp.Visible = True
    wdApp.Activate
    wdApp.Documents.Add
            
    wdApp.ActiveDocument.Tables.Add Range:=wdApp.Selection.Range, NumRows:=2, NumColumns:= _
        2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
                
    With wdApp.Selection.Tables(1)
        If .Style <> "Table Grid" Then
            .Style = "Table Grid"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
    End With
            
    With wdApp.Selection
        
        For x = 1 To 2
            ' set style name
            .Style = "Heading 1"
            .TypeText "Subject" & x
            .TypeParagraph
            .Style = "No Spacing"
            For y = 1 To 20
                .TypeText "paragraph text "
            Next y
            .TypeParagraph
        Next x
    
        ' new paragraph
        .TypeParagraph
        
        ' toggle bold on
        .Font.Bold = wdToggle
        .TypeText Text:="show some text in bold"
        .TypeParagraph
        
        'toggle bold off
        .Font.Bold = wdToggle
        .TypeText "show some text in regular front weight"
        .TypeParagraph
        
        
    End With
        
    

Some VBA vocabulary

TypeText

Inserts specified text at the beginning of the current selection. The selection is turned into an insertion point at the end of the inserted text.
If Options.ReplaceSelection = True then the original selection will be replaced. This behaves exactly the same as typing some text at the keyboard.

TypeParagraph

Insert a new blank paragraph. The selection is turned into an insertion point after the inserted paragraph mark. If Options.ReplaceSelection = True then the original selection will be replaced. This behaves exactly the same as pressing the Enter key.

output in MS Word:

Generating a Word table with VBA
	'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.

	Dim wdApp As Word.Application
	Dim wdDoc As Word.Document
	Dim r As Integer

	Set wdApp = CreateObject("Word.Application")
	wdApp.Visible = True

	Set wdDoc = wdApp.Documents.Add
	wdApp.Activate

	Dim wdTbl As Word.Table
	Set wdTbl = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=5, NumColumns:=1)

	With wdTbl

		.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
		.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
		.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
		.Borders(wdBorderRight).LineStyle = wdLineStyleSingle
		.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
		.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle
		
		For r = 1 To 5
			.Cell(r, 1).Range.Text = ActiveSheet.Cells(r, 1).Value
		Next r
	End With

	

output in MS Word:

Option Explicit
Dim wdApp As Word.Application
 
Sub extractToWord()

   'In Tools > References, add reference to "Microsoft Word 12 Object Library" before running.
   
    Dim lastCell
    Dim rng As Range
    Dim row As Range
    Dim cell As Range
    Dim arrayOfColumns
    arrayOfColumns = Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
    Dim thisRow As Range
    Dim thisCell As Range
    Dim myStyle As String
    
    ' get last cell in column B
    lastCell = getLastCell()
    
    Set rng = Range("B2:H" & lastCell)
    
    'iterate through rows
    For Each thisRow In rng.Rows
            
        'iterate through cells in row row
        For Each thisCell In thisRow.Cells

            If thisCell.Value = arrayOfColumns(thisCell.Column) Or thisCell.Value = "" Then
            ' do nothing
                ''frWriteLine thisCell.Value, "Normal"
                ''frWriteLine arrayOfColumns(thisCell.Column), "Normal"
                  If thisCell.Value = arrayOfColumns(thisCell.Column) Or thisCell.Value = "" Then
                  End If
                  
            Else
                myStyle = "Normal"
                Select Case thisCell.Column
                    Case 2
                        myStyle = "Heading 1"
                    Case 3
                        myStyle = "Heading 2"
                    Case 4
                        myStyle = "Heading 3"
                    Case Is > 5
                        myStyle = "Normal"
                    
                End Select
                    
                frWriteLine thisCell.Value, myStyle
            End If
        
        arrayOfColumns(thisCell.Column) = thisCell.Value
    
      Next thisCell
    Next thisRow
    
End Sub

Public Function getLastCell() As Integer

    Dim lastRowNumber As Long
    Dim lastRowString As String
    Dim lastRowAddress As String
         
    With ActiveSheet
        getLastCell = .Cells(.Rows.Count, 2).End(xlUp).row
    End With
    
End Function

Public Function frWriteLine(someData As Variant, myStyle As String)
    
    If wdApp Is Nothing Then
        
        Set wdApp = New Word.Application
        With wdApp
            .Visible = True
            .Activate
            .Documents.Add
        End With
            
    End If
    
    With wdApp
        
        With .Selection
            .ParagraphFormat.Alignment = wdAlignParagraphCenter
            .Style = myStyle
            .TypeText (someData)
            .TypeParagraph
        End With
    End With
    
End Function

output in MS Word:

Понравилась статья? Поделить с друзьями:
  • Selection range word vba
  • Selection pastespecial vba excel
  • Selection moveright vba word
  • Selection list in word
  • Selection goto vba word