Vba word selection paste

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

Selection.Paste method (Word)

vbawd10.chm158662777

vbawd10.chm158662777

word

Word.Selection.Paste

f09e3a0f-2c24-6bcb-0a97-eb33318fe6f4

06/08/2017

medium

Selection.Paste method (Word)

Inserts the contents of the Clipboard at the specified selection.

Syntax

expression.Paste

expression Required. A variable that represents a Selection object.

Remarks

Using this method replaces the contents of the current selection. If you don’t want to replace the contents of the selection, use the Collapse method before using this method.

When you use this method with a Range object, the range expands to include the contents of the Clipboard. When you use this method with a Selection object, the selection does not expand to include the Clipboard contents; instead, the selection is positioned after the pasted Clipboard contents.

Example

This example copies the first paragraph in the document and pastes it at the insertion point.

ActiveDocument.Paragraphs(1).Range.Copy 
Selection.Collapse Direction:=wdCollapseStart 
Selection.Paste

See also

Selection Object

[!includeSupport and feedback]

Всем привет, с вами автор блога 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.

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 позволяет явно управлять форматированием в момент вставки объекта из буфера.

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

Inserts the contents of the Clipboard at the specified range or selection. If you don’t want to replace the contents of the range or selection, use the Collapse method before using this method.

expression.Paste

expression    Required. An expression that returns a Range or Selection object.

Remarks

When this method is used with a range object, the range expands to include the contents of the Clipboard. When this method is used with a selection object, the selection doesn’t expand to include the Clipboard contents; instead, the selection is positioned after the pasted Clipboard contents.

Example

This example copies and pastes the first table in the active document into a new document.

If ActiveDocument.Tables.Count >= 1 Then
    ActiveDocument.Tables(1).Range.Copy
    Documents.Add.Content.Paste
End If
		

This example copies the first paragraph in the document and pastes it at the insertion point.

ActiveDocument.Paragraphs(1).Range.Copy
Selection.Collapse Direction:=wdCollapseStart
Selection.Paste
		

This example copies the selection and pastes it at the end of the document.

If Selection.Type <> wdSelectionIP Then
    Selection.Copy
    Set Range2 = ActiveDocument.Content
    Range2.Collapse Direction:=wdCollapseEnd
    Range2.Paste
End If
		

Аннотация: Лекция посвящена описанию объектов 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. В это время выделение сохраняется в исходном документе. Однако, если в это время пользователь случайно или умышленно изменит выделение текущего документа — программа будет работать неправильно — она выделит не тот фрагмент, который был передан ей для обработки, а совсем другой.

Понравилась статья? Поделить с друзьями:
  • Vba word selection find if not found
  • Vba word его объекты
  • Vba word selection find execute
  • Vba word добавить страницу
  • Vba word select words