In the context of an Outlook add-on using the WordEditor from the Outlook.Inspector I would like to remove the selection after replacing it with a custom text.
For example, if I select something I can change the selection to a custom text as follows:
Word.Selection sel = doc.Windows[1].Selection;
Word.Range range = sel.Range;
if(sel.Text.Length == 0) {
MessageBox.Show("No Text is selected");
return;
}
sel.Text = "New Text";
sel.Collapse();
If I call this function again, now sel.Text.Length is equal to 1 instead of 0.
Deduplicator
44.3k7 gold badges65 silver badges115 bronze badges
asked Jul 18, 2011 at 17:46
3
I had the same problem in MS Word. Word has a method called Selection.Move(). If you use it it will deselect the selected text and place the cursor at the end of the selected text. For example you can use
ThisAddIn.Application.Selection.Move()
This works in a Word add in if you want to deselect selected text, it may work in Outlook too, try and let me know
answered Jul 19, 2011 at 9:05
1
You might wish to try
Selection.Collapse Direction := wdCollapseStart
This will set the start and end positions of the current selection to the same value, namely the start of the current selection (specify wdCollapseEnd
instead for the end of the current selection). The result should be programmatically indistinguishable from actually deleting a selection.
hope this helps, carsten
applies to: word 2007 (tested), word 2010; possibly other releases
answered Oct 24, 2012 at 11:08
collapsarcollapsar
16.9k4 gold badges36 silver badges61 bronze badges
1
0 / 0 / 0 Регистрация: 10.06.2017 Сообщений: 1 |
|
1 |
|
Макрос для снятия выделения текста10.06.2017, 10:44. Показов 7839. Ответов 2
Помогите написать макрос для того, чтобы убрать выделение текста. То есть когда выделяешь текст после использования другого макроса, то некоторые слова дополнительно выделяются цветом более темнее.. Миниатюры
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
12.06.2017, 01:59 |
2 |
Выполнить ту же функцию на компьютере «кого-то другого»!
0 |
anton-sf 123 / 59 / 14 Регистрация: 29.03.2015 Сообщений: 265 |
||||
12.06.2017, 12:42 |
3 |
|||
Загуглил «word vba снять выделение» — куча инфы
0 |
Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим методы объекта Word Selection, которые позволяют очистить материал от форматирования, преобразовать в таблицу, а также производить копирование, вставку и так далее. Помним, что данный класс отвечает за выделение текста в Word.
Содержание
- Методы класса Word.Selection – выделение текста в Word
- Примера на языке VBScript – выделение текста в редакторе Word
- Примера на языке 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 — включить Авто-подбор
Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию.
Примера на языке VBScript – выделение текста в редакторе Word
' ---------------------------------------------------------------------------- ' Объект Selection - выделение текста в Word ' Преобразование в таблицу - язык VBScript ' VBA_Selection_Table.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection oWord.Visible = True For i = 0 To 10 With oSel .InsertBreak 6 .InsertBefore "один, два, три, четыре, пять, шесть, selection word vba" .EndOf .InsertBreak 6 End With Next oWord.Documents(1).Select() oSel.ConvertToTable ",", 31,,,18
В данном примере в цикле For (смотрите статью «Урок 6 по VBScript: Циклы for…next и for each…next«), который выполняется шесть раз, происходит вставка перевода на новую строку, вставка текстовой фразы и перемещаем курсов к конец строки. С помощью оператора with мы можем экономить размер программного кода – не нужно лишний раз писать имя класса. Вконце происходит выделение текста Word и преобразование его в таблицу.
Примера на языке JScript – выделение текста в редакторе Word
// ---------------------------------------------------------------------------- // Объект Selection - выделение текста в Word // Преобразование в таблицу - язык JScript // VBA_Selection_Table.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, i; oWord1 = WScript.CreateObject("Word.Application"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oWord1.Visible = true; for (i=0; i<=10;i++){ with(oSel1){ InsertBreak(6); InsertBefore("один, два, три, четыре, пять, шесть, selection word vba"); EndOf(); InsertBreak(6); } } oWord1.Documents(1).Select(); oSel1.ConvertToTable(",", 31,"","",18);
Логика работы данного программного кода аналогичны предыдущему примеру, тут мы уже использовали цикл for языка JS, читайте в статье «Урок 9 по JScript — оператор цикла for«. Тут тоже использовался оператор with, обратите внимание, что имена переменных изменились, а в конце каждой строки кода прописана точка с запятой.
Примера на языке Visual Basic for Application – выделение текста в редакторе Word
'VBA Dim oWord2 As Object, oDoc2 As Object, oSel2 As Object, i Set oWord2 = CreateObject("Word.Application") Set oDoc2 = oWord2.Documents oDoc2.Add Set oSel2 = oWord2.Selection oWord2.Visible = True For i = 0 To 10 With oSel2 .InsertBreak 6: .InsertBefore "один, два, три, четыре, пять, шесть, selection word vba" .EndOf: .InsertBreak 6 End With Next oWord2.Documents(1).Select oSel2.ConvertToTable Separator:=",", NumRows:=31, Format:=18
Хорошо, давайте продолжим рассматривать методы класса Selection.
EndOf() – Перемещает курсор в конец выделения.
StartOf() – Перемещает курсор в начало выделения.
SetRange(start, end) – Позволяет задать начальное и конечное значение для выделения текста Word.
TypeText() – Выполняет ту же функцию, что и свойство Text – ввод информации.
TypeParagraph() — Метод вставляет параграф.
Copy(), Cut(), Paste(), Delete() – Копирует, вырезает, вставляет и удаляет выделенный текст в Word.
CopyAsPicture() – Копирует выбранный материал как изображение.
И так, теперь рассмотрим программный код с данными методами.
' ---------------------------------------------------------------------------- ' Класс Selection - выделение текста в Word ' Копирование и вставка - язык VBScript ' VBA_Selection_Copy_Paste.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord3, oDoc3, oSel3, i Set oWord3 = CreateObject("Word.Application") Set oDoc3 = oWord3.Documents oDoc3.Add() Set oSel3 = oWord3.Selection oWord3.Visible = True ' Вводим информацию в документ сто раз For i=0 to 100 oSel3.TypeText "Пример ввода данных - selection word vba. " Next With oSel3 ' Выделяем, копируем и вставляем .SetRange 100, 300 .Copy .MoveDown .Paste ' Выбираем материал и копируем ее как изображение .SetRange 100, 300 .CopyAsPicture End With
По сути, данный программный код практически аналогичен предыдущим. Тут в цикле происходит вставка данных несколько раз, а далее следуют операции выделения текста в документе Word, его копирование и вставка.
// ---------------------------------------------------------------------------- // Класс 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.
I’m writing an Excel VBA code that transfers data to a Word document. I’m using the command Application.Selection.Find
and Application.Selection.InsertAfter
in order to fill in the blanks in the Word document.
The problem is that after I select one item I can’t select another one.
I would like to be able to unselect an item so that I could freely select another using the same command. How?
Kara
6,08516 gold badges51 silver badges57 bronze badges
asked Aug 25, 2014 at 10:11
1
Can use Application.Selection.EndOf
.
0
You have more than one option depending on where you want the cursor after the operation. Option 1 is probably the most common presuming you are done working on the current selection and want to move forward, but in some cases you may want to do something just before that selection, but be careful to not enter into an infinite loop.
Option 1
This unselects the selection and puts the cursor after the current selection.
Selection.EndOf
Option 2
This unselects the selection and puts the cursor before the current selection.
Note: with the cursor placement before the current selection it is possible to enter an infinite loop.
Selection.Collapse
Option 3???
Microsoft says that this is an option, but I am working in Word 2013 and it is not an option for me. Maybe it works in something more recent than 2013?
Ref https://learn.microsoft.com/en-us/office/vba/api/publisher.selection.unselect
ActiveDocument.Selection.Unselect
answered Dec 6, 2021 at 13:07
Автор Anton, 23 января 2017, 08:36
Добрый день!
Подскажите пожалуйста, как убрать такое нестандартное выделение текста. Не хочется использовать команду Очистить формат, уж больно много потом переделывать. Пример прикрепил.
[вложение удалено администратором]
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Перед тем, как убирать заливку, выделите весь абзац кроме знака абзаца. А затем убирайте заливку.
Это связано с тем, что заливка применена не ко всему абзацу, а пользователь выделял фрагменты абзаца и их заливал.
Класс! Огромное спасибо!
А можно ли это как-то автоматизировать для всего текста, а то у меня таких фрагментов с полсотни наберется?
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Есть такие варианты:
1) юзер выделяет фрагмент — макрос обрабатывает этот фрагмент;
2) макрос обрабатывает весь файл.
Какой у вас вариант?
А можно ли так: если есть выделенный фрагмент, то обработать его, а если нет — то обработать весь документ?
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Sub Макрос()
Dim rng As Range
‘1. Присваивание нужному фрагменту имени «rng».
‘ Далее в коде можно будет обращаться к нужному фрагменту по этому имени.
‘ Если ничего не выделено, то нужно обработать весь файл.
If Selection.Type = wdSelectionIP Then
Set rng = ActiveDocument.Range
‘ Если что-то выделено.
Else
Set rng = Selection.Range
End If
‘2. Удаление заливки в выделенных абзацах.
rng.Font.Shading.BackgroundPatternColor = wdColorAutomatic
‘3. Сообщение, чтобы юзер понял, что макрос завершил работу.
MsgBox «Готово.», vbInformation
End Sub
[свернуть]
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Можно и вручную это сделать, без макроса:
выделите фрагмент, в котором нужно убрать заливку, — вкладка «Главная» — группа «Абзац» — стрелка кнопки «Границы» — появится выпадающий список — Границы и заливка… — вкладка «Заливка» — в правом нижнем углу «Применить к» — тексту — список «Заливка» — нет цвета — список «тип» — нет (нужно обязательно выбрать этот пункт, даже если там и так стоит «нет»; наверное брак в ворде) — OK.
Спасибо за макрос и объяснение! Макросом получается, кончено, намного быстрее. Но как бороться с такими заливками средствами Word узнал первый раз.
- Форум по VBA, Excel и Word
-
►
Word -
►
Работа в программе «Word» -
►
Word: Убрать выделение