Vba word выделить текст в ячейке

Автор blacktesta, 04 ноября 2019, 20:19

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

Саму ячейку можно выделить таким кодом (выделяется первая ячейка в первой таблице):
ActiveDocument.Tables(1).Cell(1, 1).Select

А как выделить весь текст в ячейке при помощи VBA?



Администратор

  • Administrator
  • Сообщения: 2,252
  • Записан

Выделение текста ячейки:

Макрос

Sub Макрос1()

        Dim tbl As Table

            ‘ Присваиваем первой таблице имя «tbl», чтобы было удобно читать и писать код.
    Set tbl = ActiveDocument.Tables(1)
    ‘ Выделение первой ячейки в таблице.
    tbl.Cell(1, 1).Select
    ‘ Убираем с конца символ-кружок.
    Selection.MoveEnd Unit:=wdCharacter, Count:=-1

        ‘ Здесь у нас выделен весь текст ячейки.
        ‘ Например, можно посмотреть текст ячейки.
        ‘ Если ячейка пустая, то вернётся символ-кружок, а не пустая строка.
        ‘ Вывод текста в View — Immediate Window.
    Debug.Print Selection.Text

    End Sub

[свернуть]

Не всегда есть необходимость выделять (использование Selection), а достаточно использовать Range:

Макрос

Sub Макрос2()

       Dim tbl As Table, rng As Range

          ‘ Присваиваем первой таблице имя «tbl», чтобы было удобно читать и писать код.
    Set tbl = ActiveDocument.Tables(1)
    ‘ Присваиваем имя «rng» содержимому ячейки.
    Set rng = tbl.Cell(1, 1).Range.Duplicate
    ‘ Убираем с конца символ-кружок.
    rng.MoveEnd Unit:=wdCharacter, Count:=-1

        ‘ Здесь «rng» — это весь текст ячейки.
        ‘ Например, можно посмотреть текст ячейки.
        ‘ Если ячейка пустая, то вернётся пустая строка.
        ‘ Вывод текста в View — Immediate Window.
    Debug.Print rng.Text

    End Sub

[свернуть]


Огромное спасибо!!! Все работает. По видимому загвоздка была в этом символе-кружке.


  • Форум по VBA, Excel и Word

  • Word

  • Макросы в Word

  • Word VBA Макросы: Как обратиться/выделить текст в ячейке в таблице в ворде?

peaceowner

1

16.12.2010, 19:34. Показов 24955. Ответов 9


Студворк — интернет-сервис помощи студентам

Ребята хелп ми, уже из сил выбился. Как выделить отдельную строку в ячейке таблицы Word? Ставлю курсор в начало строки и пробую различные методы типа MoveEnd(), EndOf(), MoveEndUntil() и другие. Все эти методы выделяют ВСЕ строки ячейки. Я даже в ворде проверил, поставил курсор на начало 2ой(из 4ех) строки ячейки и нажал клавишу End с зажатым Шифтом. В итоге выделились ВСЕ строки ячейки включая первую. Опытным путем установил, что двигаться нужно посимвольно, тогда строка выделяется как надо. Вопрос, как мне переместить выделение до последнего символа последней строки ячейки? Вообще пишу на Делфи, но все методы из ВБА. Помогите плиз.

З.Ы. Забыл сказать, что строки ничем не разделены. Знаков переноса каретки нет, т.е. клавиша «интер» не нажималась, а просто сплошняком заполнялся текст в ячейку.

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

16.12.2010, 20:29

2

АктивеДокумент.Таблес(1).Ровс(1).Селект
ОК???



1



306 / 187 / 26

Регистрация: 14.02.2010

Сообщений: 540

16.12.2010, 20:30

3

Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Клавиатурой это Shift+End, почему у Вас это не работает, непонятно. По крайней мере в моем любимом 97 все нормально.



1



peaceowner

16.12.2010, 20:48

4

Всем спасибо, разобрался наконец) Узнал позиции первого и последнего символов желаемого выделения. А дальше при помощи SetRange установил нужное мне выделение.

kukuruku310
Не выделяется с помощью Енд именно в таблице. Видимо это так и нужно. Если текст набран вне таблицы, то помещая курсор в середину строки, при нажатии Шифт+Енд выделение происходит с середины до конца, как и должно быть. В ячейке кроме как посимвольно похоже не выделишь.

Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

17.12.2010, 03:30

5

Что Вам здесь

Visual Basic
1
ActiveDocument.Tables(1).Rows(1).Cells(2).Select

и здесь

Visual Basic
1
Номер_текущей_таблицы_где_находится_курсор = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count

не понравилось



0



306 / 187 / 26

Регистрация: 14.02.2010

Сообщений: 540

17.12.2010, 12:32

6

да хоть в таблице, хоть в тексте, Shift+End работает одинаково, проверьте настройки Word. Я сам не пользуюсь ничем, кроме 97, поэтому конкретнее сказать не могу.

Миниатюры

Выделение отдельной строки в ячейке таблицы Word
 



0



306 / 187 / 26

Регистрация: 14.02.2010

Сообщений: 540

17.12.2010, 14:46

7

Щательнее подумавши еще добавлю: в последней строке ячейки действительно будет выделять весь текст целиком. Во избежание, наиболее просто, моно сделать финт ушами: запомнить текущую позицию Range — это будет начало диапазона, а для определения его конца перейти в конец строки без выделения. Как второй вариант, использовать переход в начало (Shift+Home), который, в отличие от Shift+End, всегда срабатывает одинаково, но это более заморочно, если выделять не от начала строки.



0



Ksenya100

72 / 64 / 3

Регистрация: 13.05.2010

Сообщений: 349

27.02.2012, 18:11

8

в эту же тему
подскажите как выделить несколько символов в одной ячейке (в Word)
что-то типа

Visual Basic
1
set myrange=ActiveDocument.Tables(1).Cell(Row:=i,Column:=2).Range(start:=kk, end:=kkk)

но так, естественно не работает.

я так поняла peaceowner, разобрался…?



0



Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

27.02.2012, 18:30

9

Visual Basic
1
2
3
4
Последних_знака = 3
'... последних знака в 2 таблице, 3 строке, 4 ячейке выделить цветом ...
'1 в строке кода это последний знак в таблице - концевая сноска
ActiveDocument.Range(ActiveDocument.Tables(2).Rows(3).Cells(4).Range.End - 1 - Последних_знака, ActiveDocument.Tables(2).Rows(3).Cells(4).Range.End - 1).HighlightColorIndex = wdYellow



2



72 / 64 / 3

Регистрация: 13.05.2010

Сообщений: 349

27.02.2012, 18:50

10

Ципихович Эндрю, Спасибо!!
все работат.



0



I have a table with two columns and «x» number of rows.

In the 2nd column is formatted text which I would like to change to unformatted text.

The manual way of doing so is:

Select the whole cell in the 2nd column » Cut » Click Edit » Click Paste Special » Click Unformatted

The idea is to paste the unformatted text back into the cell it was Cut from and then move down to the cell below.

I would really appreciate some code that can apply this to all the cells in the 2nd column of a table.

R3uK's user avatar

R3uK

14.4k7 gold badges43 silver badges77 bronze badges

asked Aug 27, 2013 at 12:41

AneeshS's user avatar

7

Here is the solution to my problem. A friend had a piece of code which I manipulated to suit my needs:

Sub CutAndPasteSpecialUnformatted()

        Dim value As Variable

        ' Process every row in the current table. '
        Dim row As Integer
        Dim rng As Range

        For row = 1 To Selection.Tables(1).Rows.Count
            ' Get the range for the rightmost cell. '
            Selection.Collapse Direction:=wdCollapseStart
            Set rng = Selection.Tables(1).Cell(row, Column:=2).Range

            ' For each, toggle text in rightmost cell. '
            rng.Select
            Selection.Copy
            Selection.Delete
            rng.Select
            Selection.Style = ActiveDocument.Styles("Normal")
            Selection.Delete
            Selection.Collapse Direction:=wdCollapseStart
            Selection.Range.PasteSpecial DataType:=wdPasteText
        Next

End Sub

LondonRob's user avatar

LondonRob

70.6k36 gold badges142 silver badges197 bronze badges

answered Aug 28, 2013 at 10:21

AneeshS's user avatar

AneeshSAneeshS

631 gold badge1 silver badge6 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.

! Знаю ячейку, а как выделить всю строку?

GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

! Знаю ячейку, а как выделить всю строку?

Привет!

Люди, подскажите, пожалуйста.. :wink:

Как выделить строку если я знаю ячейку в этой строке?

Заранее большое спасибо.


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.04.2005 (Ср) 10:38

Rows(номер_строки).Select

Если в строке есть ячейки, объединенные с другими строками, выделится несколько строк.


GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

Сообщение GAL » 06.04.2005 (Ср) 10:49

Я не знаю номер строки.

Я немогу явно указать номер этой строки.

У меня в макросе запускается поиск, нахожу ячейку с таким-то содержимым и мне нужно выделить строку содержащую эту ячейку.

Есть такая возможность? :?:


GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

Сообщение GAL » 06.04.2005 (Ср) 10:52

Я незнаю номер строки.

Я немогу указать его явно.

У меня макрос ищет ячейку с таким-то содержимым и когда найдет мне нужно выделить строку содержащую эту ячейку.

Есть такая возможность? :?:


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.04.2005 (Ср) 10:53

Да, если x — это твоя найденная ячейка, то она содержится в столбце x.Column и в строке x.Row. Соответственно, можешь выделить строку так:

Rows(x.Row).Select


GAL
Обычный пользователь
Обычный пользователь
Аватара пользователя

 
Сообщения: 69
Зарегистрирован: 05.11.2004 (Пт) 15:57

Сообщение GAL » 06.04.2005 (Ср) 11:03

Да, так получилось.:)

Спасибо uhm!


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.04.2005 (Ср) 12:51

x.entirerow.select

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

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

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
    Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

    Обратите внимание:
    1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
    2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
    3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
    4. Используйте теги [ code=vba ] …текст программы… [ /code ] для выделения текста программы подсветкой.
    5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
    6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

    Полезные ссылки:
    user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google


    Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.

    >
    Выделение одновременно 2-х ячеек в макросе Word

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    27.09.03, 09:50

      Народ, помогите, пожалуйста, программисту на С++.
      Задача такая. Когда записывается макрос в Word, мышью я не могу выделить несколько ячеек таблицы. С помощью верхнего меню Таблица->Выделить и т.д. могу выделить только одну ячейку. А нужно более одной для дальнейшего объединения. В макросе я пишу конкретно:

      Sub Макрос2()

      ActiveDocument.Tables(1).Cell(1, 2).Select
      ActiveDocument.Tables(1).Cell(1, 3).Select

      End Sub

      Выделяется ячейка 3-тья по последней строки, а со второй выделение слетает. По поводу Or или And  в справке VBA ничего найти не могу. Как все-таки выделить? Помогите дилетанту  VBA. ???


      Lamerroot



      Сообщ.
      #2

      ,
      27.09.03, 15:49

        Попробуй так, врядли заработает, неуверен я. В любом случае надо ипользовать класс Range:
        ActiveDocument.Tables(1).Range.SetRange 1, 5
        ActiveDocument.Tables(1).Range.Select


        brovey



        Сообщ.
        #3

        ,
        28.09.03, 06:38

          rs = ActiveDocument.Tables(1).Cell(1, 2).Range.Start
          re = ActiveDocument.Tables(1).Cell(1, 3).Range.End
          ActiveDocument.Range(rs, re).Select


          Lamerroot



          Сообщ.
          #4

          ,
          28.09.03, 17:59

            Ну или так!


            laifik



            Сообщ.
            #5

            ,
            29.09.03, 07:12

              Спасибо огромное! Все получилось. :D


              Lamerroot



              Сообщ.
              #6

              ,
              29.09.03, 18:43

                ;D

                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                0 пользователей:

                • Предыдущая тема
                • Visual Basic: Общие вопросы
                • Следующая тема

                Рейтинг@Mail.ru

                [ Script execution time: 0,0437 ]   [ 16 queries used ]   [ Generated: 14.04.23, 17:32 GMT ]  

                Понравилась статья? Поделить с друзьями:
              • Vba word paragraphformat alignment
              • Vba word выделить все таблицы в word
              • Vba word number of words
              • Vba word выделенный текст в переменную
              • Vba word no spacing