Vba word range select

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Range.Select method (Word)

vbawd10.chm157220863

vbawd10.chm157220863

word

Word.Range.Select

732c2aca-d8b4-3537-984f-d44d4eed870a

06/08/2017

medium

Range.Select method (Word)

Selects the specified range.

Syntax

expression.Select

expression Required. A variable that represents a Range object.

Example

This example selects the first paragraph in the active document.

Sub SelectParagraph() 
 ActiveDocument.Paragraphs(1).Range.Select 
 Selection.Font.Bold = True 
End Sub

See also

Range Object

[!includeSupport and feedback]

Show All

Working with Range Objects

A common task when using Visual Basic is to specify an area in a document and then do something with it, such as insert text or apply formatting. For example, you may want to write a macro that locates a word or phrase within a portion of a document. The portion of the document can be represented by a Range
object. After the Range object is identified, methods and properties of the Range object can be applied in order to modify the contents of the range.

A Range object refers to a contiguous area in a document. Each Range object is defined by a starting and ending character position. Similar to the way bookmarks are used in a document, Range objects are used in Visual Basic procedures to identify specific portions of a document. A Range object can be as small as the insertion point or as large as the entire document. However, unlike a bookmark, a Range object only exists while the procedure that defined it is running.

The Start, End
and StoryType
properties uniquely identify a Range object. The Start and End properties return or set the starting and ending character positions of the Range object. The character position at the beginning of the document is zero, the position after the first character is one, and so on. There are eleven different story types represented by the WdStoryType constants of the StoryType property.

Note  Range objects are independent of the selection. That is, you can define and modify a range without changing the current selection. You can also define multiple ranges in a document, while there is only one selection per document pane.

Using the Range method

The Range
method is used to create a Range object in the specified document. The Range method (which is available from the Document
object) returns a Range object located in the main story given a start and end point. The following example creates a Range object that is assigned to a variable.

    Sub SetNewRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
End Sub
  

The variable refers to the first ten characters in the active document. You can see that the Range object has been created when you apply a property or method to the Range object stored in a variable. The following example applies bold formatting to the first ten characters in the active document.

    Sub SetBoldRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
    rngDoc.Bold = True
End Sub
  

When you need to refer to a Range object multiple times, you can use the Set statement to set a variable equal to the Range object. However, if you only need to perform a single action on a Range object, there’s no need to store the object in a variable. The same results can be achieved using just one instruction that identifies the range and changes the Bold
property.

    Sub BoldRange()
    ActiveDocument.Range(Start:=0, End:=10).Bold = True
End Sub
  

Like a bookmark, a range can span a group of characters or mark a location in a document. The Range object in the following example has the same starting and ending points. The range does not include any text. The following example inserts text at the beginning of the active document.

    Sub InsertTextBeforeRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=0)
    rngDoc.InsertBefore "Hello "
End Sub
  

You can define the beginning and end points of a range using the character position numbers as shown above, or use the Start and End properties with objects such as Selection, Bookmark, or Range. The following example creates a Range object beginning at the start of the second paragraph and ending after the third paragraph.

    Sub NewRange()
    Dim doc As Document
    Dim rngDoc As Range

    Set doc = ActiveDocument
    Set rngDoc = doc.Range(Start:=doc.Paragraphs(2).Range.Start, _
        End:=doc.Paragraphs(3).Range.End)
End Sub
  

For additional information and examples, see the Range
method.

Using the Range property

The Range property appears on multiple objects, such as Paragraph, Bookmark, and Cell, and is used to return a Range object. The following example returns a Range object that refers to the first paragraph in the active document.

    Sub SetParagraphRange()
    Dim rngParagraph As Range
    Set rngParagraph = ActiveDocument.Paragraphs(1).Range
End Sub
  

After you have a Range object, you can use any of its properties or methods to modify the Range object. The following example selects the second paragraph in the active document and then centers the selection.

    Sub FormatRange()
    ActiveDocument.Paragraphs(2).Range.Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
End Sub
  

If you need to apply numerous properties or methods to the same Range object, you can use the With…End With structure. The following example formats the text in the first paragraph of the active document.

    Sub FormatFirstParagraph()
    Dim rngParagraph As Range
    Set rngParagraph = ActiveDocument.Paragraphs(1).Range
    With rngParagraph
        .Bold = True
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        With .Font
            .Name = "Stencil"
            .Size = 15
        End With
    End With
End Sub
  

For additional information and examples, see the Range
property topic.

Redefining a Range object

Use the SetRange
method to redefine an existing Range object. The following example defines a range as the current selection. The SetRange method then redefines the range so that it refers to current selection plus the next ten characters.

    Sub ExpandRange()
    Dim rngParagraph As Range
    Set rngParagraph = Selection.Range
    rngParagraph.SetRange Start:=rngParagraph.Start, _
        End:=rngParagraph.End + 10
End Sub
  

For additional information and examples, see the SetRange method.

Note  When debugging your macros, you can use the Select
method to ensure that a Range object is referring to the correct range of text. For example, the following example selects a Range object, which refers the second and third paragraphs in the active document, and then formats the font of the selection.

    Sub SelectRange()
    Dim rngParagraph As Range

    Set rngParagraph = ActiveDocument.Paragraphs(2).Range

    rngParagraph.SetRange Start:=rngParagraph.Start, _
        End:=ActiveDocument.Paragraphs(3).Range.End
    rngParagraph.Select

    Selection.Font.Italic = True
End Sub
  

2006 г.

Word и его объекты
Лекция из курса «Основы офисного программирования и документы Word»

Биллиг Владимир Арнольдович
Интернет-Университет Информационных Технологий, INTUIT.ru

Назад Оглавление Вперёд

Документ Word и его проекты

Объекты, задающие программный проект, являются общими для всех документов Office 2000, в том числе и документа Word. Этой важной теме — программной работе с такими объектами посвящена лекция 4

Текст и объекты Range и Selection

Основной частью документа Word является, конечно, текст этого документа. Уже было сказано, как структурирован текст документа, рассмотрены коллекции — Characters, Words, Sentences, Paragraphs, которые позволяют работать с символами, словами, предложениями и абзацами текста. Говорил я также и о том, что только этими коллекциями не обойтись, и необходим общий класс объектов, позволяющий задать произвольную область текста. Таковыми являются два важных класса Range и Selection. Объекты этих классов широко используются при работе с текстом. Документы, поддокументы, разделы, все вышеупомянутые коллекции от Characters до Words имеют метод или свойство Range, возвращающие в качестве результат объект Range. Каждый объект Range задает область определения некоторого объекта, включая текст и все объекты, связанные с этим текстом — комментарии, ссылки и прочее. Так, если некоторый объект вызвал метод Range, то возвращаемый объект Range будет содержать область определения объекта, вызвавшего метод.

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

Объект Document имеет метод Range, возвращающий объект Range, и метод Select, создающий объект Selection. Метод Range — это функция, возвращающая в качестве результата объект Range; метод Select — это процедура без параметров, которая создает объект Selection в качестве побочного эффекта. Заметьте существенную разницу между методами Range и Selection. В первом случае возвращается сам объект и поэтому можно запомнить возвращаемый объект и в программе одновременно работать с несколькими такими объектами. В случае вызова метода Selection объект не возвращается, следовательно, запомнить его нельзя, что и гарантирует уникальность объекта Selection.

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

Объекты Range и Selection столь же многообразны по своей структуре, как и объект Document. И даже большинство свойств у этих трех объектов одни и те же. Эти три объекта являются схожими. Это понятно, так как большинство частей документа: предложения, абзацы, разделы, таблицы, рисунки, комментарии, ссылки и многое другое — может составлять любую подобласть документа, в том числе и выделенную подобласть. Значит, большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection. Это приятно — ведь с большинством свойств этих объектов мы уже знакомы!

Объект Range напоминает матрешку: в каждую область вложена область поменьше. Вот пример корректного (хоть и не самого эффективного) задания объекта Range:

Листинг 1: html, txt

Сколько объектов Range упоминается в этом предложении? Правильный ответ: 6, но не 3. Напомним: на нижнем уровне отсутствуют классы, определяющие символ, слово или предложение — все эти объекты принадлежат классу Range.

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

Листинг 1: html, txt

Работа с текстом

Объекты Range и Selection позволяют выполнять основные операции над текстом (и не только над текстом): «выделить», «добавить», «заменить», «удалить». У наших объектов большой набор методов, позволяющих реализовать эти операции. Все рассматриваемые здесь методы принадлежат обоим объектам, если не сделана специальная оговорка.

Выделение

Говоря в этом параграфе о выделении, я имею в виду не применение метода Select, а выделение в более широком смысле, умение задать некоторую подобласть данной области. Выделить некоторую часть текста означает, по существу, определение объекта Range или Selection. Оба объекта задают непрерывную область, а их свойства Start и End позволяют задать начало и конец области. Меняя эти свойства, можно задать нужную область выделения. Этот основной способ выделения мы не раз демонстрировали в наших примерах:

Dim myRange As Range, myRange1 As Range
With ActiveDocument
   Set myRange = .Range(Start:=.Sections(2).Range.Paragraphs(3).Range.Start, _
                              End:=.Sections(3).Range.Paragraphs(5).Range.End)
   Set myRange1 = .Sections(3).Range.Paragraphs(1).Range
End With

Листинг 1: html, txt

В первом случае при задании области используются параметры Start и End, во втором — задается вся область данного объекта. Область может изменяться автоматически при добавлении или удалении из нее части текста. Изменить область можно и путем ее перемещения. Этим занимается специальная группа методов перемещения Move. Прежде чем говорить о перемещении, рассмотрим сжатие области. Нередко нужна пустая область — точка вставки, параметры Start и End которой совпадают. Поэтому простейший способ сжатия — задать совпадающие значения этих параметров:

Листинг 1: html, txt

Для сжатия области можно применять специальный метод сжатия — Collapse(Direction). Область стягивается в начальную или конечную позицию. Направление сжатия задает параметр Direction, принимающий значения wdCollapseStart или wdCollapseEnd. По умолчанию область стягивается в начальную точку (значение параметра: wdCollapseStart). Если сжимается абзац, и он стягивается в конечную точку, точка вставки переносится за метку конца абзаца и устанавливается в начало следующего абзаца. Если такой эффект нежелателен, после сжатия применяется метод перемещения MoveEnd, передвигающий точку вставки назад на один символ:

Set myRange = ActiveDocument.Paragraphs(1).Range
myRange.Collapse Direction:=wdCollapseEnd
myRange.MoveEnd Unit:=wdCharacter, Count:=-1

Листинг 1: html, txt

Если есть методы сжатия области, то должны быть и методы расширения области. Основным из них является метод Expand(Unit). В зависимости от значения параметра Unit область можно расширить на слово, предложение, абзац, раздел, на строку или столбец таблицы, или на всю таблицу. Для объекта Selection область можно расширить на всю строку. Для расширения области на весь фрагмент можно использовать метод WholeStory, что впрочем эквивалентно вызову метода Expand(Unit := wdStory)

Метод Move является основным методом перемещения. Остальные методы — в той или иной степени его модификации. Метод Move(Unit, Count) сжимает область в точку, стягивая ее в начало или конец, и затем перемещает точку вставки. Параметр Unit определяет единицы перемещения, а Count — количество этих единиц и направление стягивания и перемещения (по умолчанию 1). Положительные значения этого параметра задают стягивание к концу и перемещение вперед, отрицательные — стягивание в начало и перемещение назад. Само стягивание означает перемещение на одну единицу. Метод возвращает количество единиц, на которое фактически произошло перемещение, или 0, если оно не осуществлено. Параметр Unit принимает значения wdCharacter (по умолчанию), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow и wdTable.

Методы перемещения на сам текст не влияют — лишь изменяют область, заданную объектами Range и Selection. Поэтому эти методы применимы только к переменным типа Range, но не к фиксированным областям. Например, запись:

Листинг 1: html, txt

не имеет эффекта, поскольку область первого абзаца — вещь неизменяемая.

Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, и остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно расширяя тем самым область.

Конечно, для перемещения по тексту документу есть много различных возможностей, кроме группы методов Move. Стоит упомянуть группу методов Next, основным из которых является метод Next(Unit,Count). Основное отличие от метода Move с теми же параметрами состоит в том, что метод Next возвращает сам объект Range, в отличие от метода Move, возвращающего число символов, на которое произошло перемещение. Напомним также о тех возможностях перемещения, которыми обладают объекты Browser и Hyperlink, напомним о закладках, специально предназначенных для перехода к ним.

Удаление текста

Метод Delete позволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection. Если он применен в форме Delete(Unit,Count), удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count. Вот несколько примеров:

'Удаляется текст в области объекта myRange
myRange.Delete
' Удаляются первые три слова из области myRange1
myRange1.Delete Unit:= wdWord, Count :=3
'Область стягивается в точку
myRange1.Collapse Direction := wdCollapseStart
'Удаляются три первых слова из области, предшествующей myRange1
myRange1.Delete Unit:= wdWord, Count :=-3

Листинг 1: html, txt

Вставка текста

Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр Text типа String задает текст, вставляемый до или после области, заданной объектами Range или Selection. После вставки текста область автоматически расширяется, включая в себя добавляемый текст. Вот пример вставки нового абзаца в начало документа:

Dim myRange As Range
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
myRange.Text = "дорогой "
myRange.InsertBefore "Мой "
myRange.InsertAfter "друг! "
myRange.InsertParagraphAfter

Листинг 1: html, txt

Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text), — лучше использовать свойство. Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. При вставке внутрь области, например, при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области. Эта вроде бы безобидная программка сотрет все содержимое документа, заменив его пустым абзацем:

Set myRange = ActiveDocument.Range
myRange.InsertParagraph

Листинг 1: html, txt

Говоря о методах вставки текста, нельзя не упомянуть о таком мощном методе, как InsertFile — он позволяет вставлять не только текст или таблицу Excel, но и целый документ, хранящийся в файле. Вот простой пример вызова метода, при котором в начало активного документа вставляется существующий документ:

Public Sub test1()
   Dim myRange As Range
   Dim myPath As String
   
   With ActiveDocument
      myPath = .Path
      Set myRange = .Range(Start:=0, End:=0)
      myRange.InsertFile myPath & "DocTwo.doc"
   End With
End Sub

Листинг 1: html, txt

Работа с буфером

Известно, как полезен буфер при работе с одним и, особенно, с несколькими документами. Объекты Range и Selection в полной мере позволяют задействовать все возможности буфера. Метод Copy, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод Cut, действуя аналогично, копирует объект в буфер, заодно удаляя его. Заметьте, что в отличие от предыдущей версии, теперь метод Cut работает, как ему положено, не только копируя объект, но и удаляя его, ранее удаления не происходило, вместо этого объект, вызывавший метод стягивался в точку. Метод Paste позволяет приклеить объект, помещенный в буфер. Рассмотрим пример:

.Public Sub test1()
   Dim myRange As Range
   Set myRange = ActiveDocument.Paragraphs(5).Range
   myRange.Select
   'Добавляем новый абзац
   myRange.InsertAfter "New Text"
   myRange.InsertParagraphAfter
   'Выделяем и затем вырезаем добавленный абзац и помещаем его в буфер
   myRange.MoveStart Unit:=wdParagraph
   myRange.Select
   Selection.Cut
   'Добавляем новый абзац
   Selection.InsertAfter "Новый текст!"
   Selection.InsertParagraphAfter
   'Добавляем абзац из буфера
   Selection.Collapse Direction:=wdCollapseEnd
   Selection.Paste
End Sub

Листинг 1: html, txt

Метод Paste позволяет «вклеить» содержимое буфера в область, заданную объектами Range и Selection. Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection, стянутым в точку вставки. В выполнении этого метода есть нюансы. У объекта Range содержимое буфера включается в его область, Объект Selection остается точкой вставки, расположенной после текста, добавленного из буфера.

Заметьте, в буфер можно копировать не только текст. В нашем следующем примере в буфер копируется рисунок, являющийся элементом коллекции TableOfFiguress. Напомню, что элементы этой коллекции вставляются аналогично символам текста и являются частью абзаца. В тестовом документе DocOne, с которым я работаю, в начало текста вставлен рисунок мышки. Я буду работать с первым абзацем этого текста, содержащим этот рисунок, как с обычным текстом, выделю рисунок, помещу его в буфер, а затем приклею в другом месте текста. Вот код соответствующей процедуры:

Public Sub CopyImage()
   'Копирование рисунка через буфер
   Dim MyRange As Range
   Set MyRange = Documents("DocOne").Paragraphs(1).Range
   With MyRange
      'Первый абзац этого документа содержит рисунок
      ' - элемент коллекции TableOfFiguress.Выделяем рисунок
      .MoveEnd Unit:=wdCharacter, Count:=-7
      .Select
      .Copy
   End With
      Set MyRange = ActiveDocument.Paragraphs(6).Range
      MyRange.Select
      Selection.Collapse Direction:=wdCollapseEnd
      Selection.Paste
   
End Sub

Листинг 1: html, txt

Иногда в буфер копируют формат текста. Этим занимается метод CopyFormat, копирующий формат по первому символу объекта Selection. Если этот символ — метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект Selection.

Метод PasteFormat применяет форматирование, хранящееся в буфере к объекту Selection.

Метод PasteSpecial позволяет явно управлять форматированием в момент вставки объекта из буфера.

Назад Оглавление Вперёд

  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)

The Range.Select method is used by VBA Macro developers for various purposes. These can be as simple as selecting a cell on an active worksheet, selecting one on another worksheet, or selecting a range of cells on a worksheet from a different workbook.

Sample code # 1: Selecting a range of cells on the active worksheet

Sub RangeSelect()
    ActiveSheet.Range("B2:E5").Select
End Sub

OR

Sub RangeSelect()
    ActiveSheet.Range("B2", "E5").Select
End Sub

Sample code # 2: Selecting a range of cells on another worksheet in the same workbook

Notice that the sample code below doesn’t require us to have “select” text. This is another way of selecting a range of cells by using “Application.Goto” which basically has the same result as “Range.select” method. However, you can still use the “select” method by activating the target worksheet before selecting the specified range.

Sub RangeSelect()
    Application.Goto ActiveWorkbook.Sheets("AnotherWorksheet").Range("B2:F9")
End Sub

OR

Sub RangeSelect()
    Sheets("AnotherWorksheet").Activate
    ActiveSheet.Range(Cells(2, 2), Cells(9, 6)).Select
End Sub


Sample code # 3: Selecting a range of cells offset from a specified range

This is commonly used when selecting a range of data, skipping the header row.

Sub RangeSelect()
    ActiveSheet.Range("B1:E5").Offset(2, 0).Select
End Sub

To include rows above or columns to the left of the specified range, use negative integers for offset

Sub RangeSelect()
    ActiveSheet.Range("C3:F8").Offset(-1, -1).Select
End Sub

Note that the offset works on the entire range, i.e. for a offset of -1 rows on range C3:F8 will result in C2:F7  and an offset of -1 columns will eventually result in the range B2:E7

Sample code # 4: Selecting the last cell of a column of contiguous data

The following sample code is used to select the last row of the specified column (ex. column “B”) that has data or is a non-blank cell.

Sub RangeSelect()
    ActiveSheet.Range("B2").End(xlDown).Select
End Sub

And if you want to select the entire range of data in a column:

    Sheet1.Range("C2", ActiveSheet.Range("C2").End(xlDown)).Select

Sample code # 5: Selection using named ranges

You can also use named ranges, instead of specifying the actual range. For instance,

Application.Union(Range("RangeA"), Range("RangeB")).Select

Sample code # 6: Selecting non-contiguous data

You can also select non-contiguous data, though you may not find much practical use for it

Sub nonContiguous()
    Sheet1.Range("B2:E2,D2:D8").Select
End Sub

Sample code # 7: Selecting non-contiguous data using union

This is similar to the above method, by using a different approach

Sub nonContiguous()
    Dim y As Range
    Set y = Application.Union(Range("Sheet1!B2:C3"), Range("Sheet1!C3:D4"))
    y.Select
End Sub

Needless to say, when working with multiple ranges, all the ranges must lie on the same sheet, or you will get an error. For instance, this piece of code will not work as the two ranges are on 2 different sheets. Or if you’re using named ranges, “RangeA” and “RangeB” should be on the same sheet.

Sub nonContiguous()
    Dim y As Range
    'This statement will throw an error -- Union method of application class failed
    Set y = Application.Union(Range("Sheet1!B2:C3"), Range("Sheet2!C3:D4"))
    y.Select
End Sub

Sample code # 7: Selecting intersection of two ranges

Just like union, you can use intersect to select the intersection of two ranges.

Sub selectIntersect()
    Dim y As Range
    Set y = Application.Intersect(Range("Sheet1!B2:C4"), Range("Sheet1!C3:D4"))
    y.Select
End Sub

Sample code # 8: Selecting a rectangular range around specified cell

This can prove useful when you have multiple tables in a sheet and you want to do some operation, like say plot a graph, on any one region of the sheet. For this you use the CurrentRegion Method. CurrentRegion is an area bounded by any combination of blank rows and blank columns.

Sub selectCurReg()
    ActiveSheet.Range("D3").CurrentRegion.Select
End Sub

Sample code # 9: Selecting a rectangular range around specified cell including blanks

The above code (# 8) works fine when there are no blank rows or columns in your data. If you need to include data beyond the blanks, use the code below

Sub selectCurReg()
    Dim lastCol As Long, lastRow As Long
    lastCol = ActiveSheet.Range("B2").End(xlToRight).Column
    lastRow = ActiveSheet.Cells(65536, 2).End(xlUp).Row
    ActiveSheet.Range("B2", ActiveSheet.Cells(lastRow, lastCol)).Select
End Sub

Here we are simply getting the last non empty row and column and selecting everything in between

Sample code # 10: Selecting an entire row

Use this code to select the entire second row

Sub selectRow()
    Range("2:2").Select
End Sub

Sample code # 11: Selecting a range in a sheet from another workbook

So far, we have seen only how to select a cell / range from within a workbook. It is also possible to select a range from another workbook through VBA:

Sub selectFromAnotherWB()
    Application.Goto Workbooks("Book2").Sheets("Sheet1").Range("A1:E10")
End Sub

Note that this will work only if both the Excel files are saved in the same location. If the file paths are different for both, use the complete path to the file

All of the examples in the article are well applicable to worksheets from another workbook as well.

Sample code # 12: Selecting a range and then resize the selection

Sub selectFromAnotherWB()
    Range("B2:F6").Select
    Selection.Resize(Selection.Rows.Count + 1, Selection.Columns.Count - 1).Select
End Sub

For this we use the resize method. After execution of the first step, the selection looks like

And after resizing:


You can find more information on counting rows in Excel here. And more info about dynamically selecting ranges with unknown size, here.

These were some of the most common ways to select a cell or range of cells using VBA. It is worth mentioning here that, it is best to avoid using select and selection whenever you can. This will prevent Run-time errors that can occur if a user happens to select another cell while the code is being executed. In truth, there should be very few cases you will actually need to use these methods.


Понравилась статья? Поделить с друзьями:
  • Vba word выпадающий список
  • Vba word range information
  • Vba word вызов функции
  • Vba word print from to
  • Vba word выделить ячейку таблицы