Vba word отменить выделение

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's user avatar

Deduplicator

44.3k7 gold badges65 silver badges115 bronze badges

asked Jul 18, 2011 at 17:46

Baadal Gupta's user avatar

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

Hüseyin DEMİRTAŞ's user avatar

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

collapsar's user avatar

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


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

Помогите написать макрос для того, чтобы убрать выделение текста. То есть когда выделяешь текст после использования другого макроса, то некоторые слова дополнительно выделяются цветом более темнее..
Пробовал использовать функцию
ActiveWindow.View.FieldShading = wdFieldShadingNever
Но тогда на моём компьютере выделение убирает,но если скидываешь документ кому-то другому, то там выделение остается. Как убрать такое выделение?

Миниатюры

Макрос для снятия выделения текста
 



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 снять выделение» — куча инфы

Visual Basic
1
ThisDocument.Range(0, 0).Select



0



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

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's user avatar

Kara

6,08516 gold badges51 silver badges57 bronze badges

asked Aug 25, 2014 at 10:11

user3903489's user avatar

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

MustardMan's user avatar

Автор 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: Убрать выделение

Like this post? Please share to your friends:
  • Vba word открытых документов
  • Vba word отключить сообщения
  • Vba word отключить обновление экрана
  • Vba word определить абзац
  • Vba word объектная модель