Word vba снять выделение

Обновлено: 07.07.2024

Дорогие форумчане, перейдя по ссылке, любезно предоставленной уважаемой Pelena, ни чего не понял из диалога умных людей, так как не имею специального образования и постигаю высокие материи методом проб и ошибок. Помогите пожалуйста делом, а не словом. Заранее благодарен.
[moder]Ну тогда и Вы сделайте хоть что-нибудь. Прочитайте Правила форума, например. Там в п.3 четко сказано, что нужен Ваш пример. А то мы сейчас Вам на своем примере сделаем, а Вы скажете - "А у меня в файле все совсем не так и не работает ничего".

Дорогие форумчане, перейдя по ссылке, любезно предоставленной уважаемой Pelena, ни чего не понял из диалога умных людей, так как не имею специального образования и постигаю высокие материи методом проб и ошибок. Помогите пожалуйста делом, а не словом. Заранее благодарен.
[moder]Ну тогда и Вы сделайте хоть что-нибудь. Прочитайте Правила форума, например. Там в п.3 четко сказано, что нужен Ваш пример. А то мы сейчас Вам на своем примере сделаем, а Вы скажете - "А у меня в файле все совсем не так и не работает ничего". Sharf1

Sharf1, в той ссылке готовые макросы для выделения всех чекбоксов на листе.
Что конкретно у Вас не получилось? Приложите свой файл

Sharf1, в той ссылке готовые макросы для выделения всех чекбоксов на листе.
Что конкретно у Вас не получилось? Приложите свой файл Manyasha

Прошу прощения, что сразу не выложил пример. Перейдя по ссылке уважаемой Pelena я не нашёл работающего скрипта, кроме того, который ставит все галочки и тот работает с задержкой. Прошерстя форум, здесь нашёл файл, который в полной мере устраивает мои потребности в части установки/снятия флажков, однако при разборке скриптов я так ни чего и не понял и пугает в скриптах обращения к файлам и папкам.

Прошу прощения, что сразу не выложил пример. Перейдя по ссылке уважаемой Pelena я не нашёл работающего скрипта, кроме того, который ставит все галочки и тот работает с задержкой. Прошерстя форум, здесь нашёл файл, который в полной мере устраивает мои потребности в части установки/снятия флажков, однако при разборке скриптов я так ни чего и не понял и пугает в скриптах обращения к файлам и папкам. Sharf1

Методы класса 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

В данном примере в цикле For (смотрите статью "Урок 6 по VBScript: Циклы for…next и for each…next"), который выполняется шесть раз, происходит вставка перевода на новую строку, вставка текстовой фразы и перемещаем курсов к конец строки. С помощью оператора with мы можем экономить размер программного кода – не нужно лишний раз писать имя класса. Вконце происходит выделение текста Word и преобразование его в таблицу.

Примера на языке JScript – выделение текста в редакторе Word

Логика работы данного программного кода аналогичны предыдущему примеру, тут мы уже использовали цикл for языка JS, читайте в статье "Урок 9 по JScript - оператор цикла for". Тут тоже использовался оператор with, обратите внимание, что имена переменных изменились, а в конце каждой строки кода прописана точка с запятой.

Примера на языке Visual Basic for Application – выделение текста в редакторе Word

Хорошо, давайте продолжим рассматривать методы класса Selection.

выделение текста в редакторе Word, Selection VBA

EndOf () – Перемещает курсор в конец выделения.

StartOf () – Перемещает курсор в начало выделения.

SetRange (start, end) – Позволяет задать начальное и конечное значение для выделения текста Word.

TypeText () – Выполняет ту же функцию, что и свойство Text – ввод информации.

TypeParagraph () - Метод вставляет параграф.

Copy (), Cut (), Paste (), Delete () – Копирует, вырезает, вставляет и удаляет выделенный текст в Word.

CopyAsPicture () – Копирует выбранный материал как изображение.

И так, теперь рассмотрим программный код с данными методами.

По сути, данный программный код практически аналогичен предыдущим. Тут в цикле происходит вставка данных несколько раз, а далее следуют операции выделения текста в документе Word, его копирование и вставка.

Ну и в заключение, привожу программный код для макроса:

Хорошо, на этом можно закончить данную статью. Параллельно, информацию по работе с классом Selection можете рассмотреть еще две публикации, в которых я рассмотрел остальные методы и свойства класса Selection.

Спасибо за внимание. Автор блога Владимир Баталий

Объект Word Selection - как выделить фрагмент текста

Для начала давайте вспомним, что выделение фрагмента текста осуществляется следующим образом: в большинстве случаев нужно выбрать несколько фрагментов, для этого сначала выбираем один нужный фрагмент, далее удерживаем клавишу " Ctrl " и выбираем остальные фрагменты. Теперь перейдем к теме публикации…

Методы Insert… – выделение фрагментов текста в Word

как выделить фрагмент в тексте

Примеры будут как для редактора VBA, так и для сценариев Windows Script Host, и так, начнем…

Методы с префиксом Insert. позволяют вставить текст в документ:

InsertAfter (text) и InsertBefore (text) – Вставка текста (text) в конец или в начало выделения. При отсутствии выделения вставка производится там, где находится курсор. Сам материал остается выделенным.

InsertBreak (type) - Вставляет страницу, колонку или секцию. Параметр type содержит значение константы WdBreakType:

  • wdTextWrappingBreak - 11 - Конец текущей строки и продолжение вставки ниже изображения, таблицы или другого объекта. Материал продолжается на следующей пустой строке, которая не содержит таблицу, совмещенную с левой или правой границей.
  • wdLineBreakClearRight - 10 - Перевод на новую строку.
  • wdLineBreakClearLeft - 9 - Перевод на новую строку.
  • wdColumnBreak - 8 - Разрыв колонки.
  • wdPageBreak - 7 - Вставка новой страницы.
  • wdLineBreak - 6 - Перевод на новую строку.
  • wdSectionBreakOddPage - 5 - Начало нового раздела со следующей нечетной страницы.
  • wdSectionBreakEvenPage - 4 - Начало нового раздела со следующей четной страницы.
  • wdSectionBreakContinuous - 3 - Новый раздел без разрыва страницы.
  • wdSectionBreakNextPage - 2 - Начало нового раздела со следующей страницы.

Прежде чем приступать к программированию, стоит сделать некоторое пояснение. По сути, ряд действий будут всегда одинаковыми – создание нового документа (за это будет отвечать функция или процедура Create_Doc). Изменяться будут только вызываемые методы.

Программный код на VBScript :

Давайте посмотрим, что данный пример делает. При вызове процедуры Insert_After_Before происходит добавление в документ текстовой строки, далее в конец добавляется фраза " . Конец", а в начало - "Начало. ". Потом происходит перевод курсора в конец и добавление перевода строки.

Пример на JScript :

Для VBA мы просто запускаем редактор кода, добавляем новый модуль и прописываем код, в моем случае имя модуля - Module1:

И так, с одной теоретической частью мы закончили и написали программный код, теперь можно приступить к следующей части.

Методы Insert… – выделение фрагментов текста в Word

InsertCaption (Label, Title, TitleAutoText, Position, ExcludeLabel) - Вставляет заголовок сразу после или перед указанным выбором. Обязательным является только параметр Label.

Label – Нумерационный заголовок. Параметр может быть строкой или значением константы WdCaptionLabelID:

  • wdCaptionEquation - Уравнение
  • wdCaptionFigure - Рисунок
  • wdCaptionTable – Таблица

Если метка (Label) не определена, то возникнет ошибка. Для определения метки надо использовать метод Add коллекции CaptionLabels , например:

Title – Заголовок, который будет отображаться справа от метки.

TitleAutoText – Авто-заголовок, перекрывает параметр Title.

Position - Указывает, будет ли вставлен заголовок выше или ниже. Может быть одной из констант WdCaptionPosition:

  • wdCaptionPositionAbove - 0 - Метка название добавляется выше.
  • wdCaptionPositionBelow - 1 - Метка название добавляется ниже.

ExcludeLabel - TRUE - отключить метку, заданную в параметре Label. FALSE - включить метку. Дополнительно.

Ниже я приведу примеры, что бы не дублировать программный код, я привел только содержимое процедуры Sub Insert_Caption.

Тут используется цикл for для вставки нескольких фрагментов - "Урок 6 по VBScript: Циклы for…next и for each…next".

Тут тоже используется цикл for, но уже для JS кода - "Урок 9 по JScript - оператор цикла for".

Обратите внимание, что имена переменных в примерах отличаются, это пришлось сделать с технических причин – в глазах поисковых систем статья становится заспамленой. Хорошо, давайте двигаться дальше.

Методы Insert… – выделение фрагментов текста в Word

как можно выделить фрагмент текста

InsertDateTime (DateTimeFormat) – Метод позволяет вставить дату или время в документ, или одновременно оба значения. Помимо параметра DateTimeFormat есть еще четыре, но они практически не используются.

DateTimeFormat – Необязательный параметр, позволяет указать формат даты и времени.

Обратите внимание на оператор with, он позволяет не писать каждый раз имя класса.

Тут логика работы аналогична.

Хорошо, осталось рассмотреть последнюю третью часть статьи.

Методы Insert… – выделение фрагментов текста в Word

InsertFile (FileName) – Позволяет вставить содержимое указанного файла в документ, параметр FileName хранит имя или путь к файлу, если путь отсутствует, то будет подразумеваться текущий каталог.

InsertNewPage - Вставляет новую страницу в место, где находится указатель.

InsertParagraph - Заменяет выделение знаком абзаца.

InsertParagraphAfter - Вставляет знак абзаца после выделения .

InsertParagraphBefore - Вставляет новый абзац перед выделением.

Методы с префиксом Move. также встречаются едва ли не в любой программе, связанной с вводом текста в Word. Самые важные и удобные из этих методов:

MoveLeft (), MoveRight (), MoveUp (), MoveDown () – Методы дают возможность переместить курсор влево, вправо, вверх и вниз. Все четыре метода принимают следующие параметры (Unit, Count, Extend), являющиеся необязательными:

Unit - Блок, по которым выбор должен быть перемещен. Параметр Unit содержит значения константы wdUnits.

Count – Единица перемещения. Значение по умолчанию 1.

Extend - Может быть либо wdMove (по умолчанию) или wdExtend.

MoveEnd (), MoveStart () – Перемещение курсора в конец или начало выделения, параметры - Unit, Count.

MoveStartUntil (), MoveStartWhile (), MoveEndUntil (), MoveEndWhile () – Позволяют переместить курсор к заданному символу или последовательности символов. Параметры Cset (обязательный) и Count (дополнительный):

Cset - Один или несколько символов. Аргумент является чувствительным к регистру.

Count – Задает целое или отрицательное значение, на которое происходит перемещение курсора.

Move (Unit, Count) – Фактически, тут мы может указать направление (Count) и текстовую единицу (Unit).

Логика работы для следующих примеров остается та же – меняется только код вызываемой процедуры. Фактически, код для языка VBScript и VBA является идентичным.

Видим, что в данном коде мы использовали несколько операторов for.

Обратите внимание на приведенные в самом начале статьи примеры кода для языков VBA и VBScript, в макросе мы можем использовать именованные константы объекта Word, но в теле Windows Script Host сценария нет, так как там они не доступны. Описание свойств класса Selection я рассмотрел в этой статье.

Спасибо за внимание. Автор блога Владимир Баталий

Класс Word Selection

Помним, что бы вручную выделить весть текст в Ворд , достаточно нажать комбинацию клавиш "Ctr + A". Мы рассмотрим некоторые свойства объекта Word.Selection. Говорю "некоторые", так как большинство используются редко, в случае чего – документация MSDN всегда под рукой. И так, сам объект Selection выполняет двойную функцию – с одной стороны он позволяет вставлять фразу в только что созданный документ, с другой стороны – позволяет обрабатывать выделение всего текста в ворде. Описание методов класса Selection можно просмотреть тут и тут.

Свойства класса Word.Selection – выделить весь текст в Ворде

В конце статьи я приведу три примера программного кода – два под Windows Script Host (язык VBScript и JScript) и один под Visual Basic for Application.

И так, сначала давайте познакомимся со свойствами:

Start и End – Если текст уже выделен, то Start и End будут содержать начальную и конечную позиции выделения. Так как они доступны и для записи, то можно задать диапазон для выделения всего текста в ворде.

Flags – Позволяет установить или получить параметры выбора. Flags может быть установлено в одной из следующих констант wdSelectionFlags:

  • wdSelActive - 8 - активное выделение.
  • wdSelAtEOL - 2 – конец строки.
  • wdSelOvertype - 4 – замена символов.
  • wdSelReplace - 16 - выбор был заменен.
  • wdSelStartActive - 1 - начало активного документа.

Само свойство возвращает сумму констант wdSelectionFlags.

Information (Type) - Получить информацию относительно выделения или заданного диапазона. Только чтение. Параметр Type содержит значения константы wdInformation (я указал только основные значения):

  • wdActiveEndAdjustedPageNumber – 1 - Номер страницы.
  • wdActiveEndSectionNumber – 2 - Количество разделов.
  • wdActiveEndPageNumber – 3 – Номер страницы начиная с начала.
  • wdNumberOfPagesInDocument – 4 – Количество страниц в документе
  • wdHorizontalPositionRelativeToPage – 5 - Горизонтальная позиция от левого края выделения к левому краю страницы в пунктах.
  • wdVerticalPositionRelativeToPage – 6 – Вертикальная позиция от верхнего края выделения к верхнему краю страницы в пунктах.
  • wdFirstCharacterColumnNumber – 9- Позиция первого слова в выделении начиная с начала документа.
  • wdFirstCharacterLineNumber – 10 – Позиция строки, с которой начинается выделение, начиная с начала.
  • wdFrameIsSelected – 11 – TRUE, если выделен весть текст в ворде.
  • wdZoomPercentage - 19 – Масштаб в процентах
  • wdCapsLock – 21 – TRUE если включен CapsLock.
  • wdNumLock - 22 – TRUE если включен NumLock.
  • wdRevisionMarking – 24 - Возвращает True, если отслеживание изменений в силу.

Все константы будут содержать значение -1, если информация выходит за пределы допустимой области.

IPAtEndOfLine —True - указатель ввода расположен в конце строки (в крайнем правом положении при выравнивании).

NoProofing — Отменяет (значение TRUE) для выбранного фрагмента проверку орфографии и грамматики.

StoryType – Возвращает тип истории для указанного выбора (только чтение). Константа WdStoryType:

  • wdCommentsStory - 4 – Комментарии.
  • wdEndnoteContinuationNoticeStory - 17 - Сноска продолжения уведомления.
  • wdEndnoteContinuationSeparatorStory - 16 – Сноска продолжения разделителя.
  • wdEndnoteSeparatorStory - 15 - Сноска разделитель.
  • wdEndnotesStory - 3 – Примечания.
  • wdEvenPagesFooterStory - 8 - Четные страницы футера.
  • wdEvenPagesHeaderStory - 6 - Четные страницы заголовка.
  • wdFirstPageFooterStory - 11 –Первый футер страницы.
  • wdFirstPageHeaderStory - 10 – Первый заголовок страницы.
  • wdFootnoteContinuationNoticeStory - 14 - Сноска продолжения уведомления.
  • wdFootnoteContinuationSeparatorStory - 13 - Сноска продолжения разделителя.
  • wdFootnoteSeparatorStory - 12 - Сноска разделитель.
  • wdFootnotesStory - 2 – Сноски.
  • wdMainTextStory - 1 - Основной текст.
  • wdPrimaryFooterStory - 9 - Первичный футер.
  • wdPrimaryHeaderStory - 7 - Первичный заголовок.
  • wdTextFrameStory - 5 - Текст рамки.

Text – Получить или указать материал, который будет вставлен на месте выделения, или просто там, где расположен курсор. Чтение/Запись

Type – Возвращает тип выделения, константа WdSelectionType:

  • wdNoSelection - 0 – Отсутствует.
  • wdSelectionBlock - 6 – Блок.
  • wdSelectionColumn - 4 – Столбец.
  • wdSelectionFrame - 3 – Рамка.
  • wdSelectionInlineShape - 7 – Рядовая форма.
  • wdSelectionIP - 1 – Пункт.
  • wdSelectionNormal - 2 – Нормальный.
  • wdSelectionRow - 5 – Строка.
  • wdSelectionShape - 8 – Форма.

Начинаем программировать – выделить весь текст в ворде

выделение всего текста в документе ворд

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

Пример на языке VBScript:

Пример на языке JScript:

выделить весь текст в документе ворд

Пример под Visual Basic for Application:

И так, с теоретической частью мы разобрались, и даже немного попрограммировали, теперь стоит дать некоторые пояснения к программному коду. В последнем примере для VBA в самом начале есть такая строка:

Дело в том, что функция Sleep (смотрите статью "Объект WScript - методы sleep, quit и echo и 8 свойств") доступна только в сценариях VBS и JS, что бы сделать задержку для макроса, мне пришлось обратиться к системной функции Windows. Для вставки материала в документ используется цикл for, его смотрите описание синтаксиса для JScript - "Урок 9 по JScript - оператор цикла for" и для VBScript - "Урок 6 по VBScript: Циклы for…next и for each…next". В остальном коде я думаю, разобраться несложно, если есть вопросы, задавайте, буду рад ответить.

Спасибо за внимание. Автор блога Владимир Баталий

Здравствуйте, DreamWeaver, Вы писали:

DW> Есть выделенный объект (textBox). Мне нужно сделать активной основную страницу. Как это сделать? Пытался методом Collapse — не помогает

Снять выделение очень просто — например так: Selection.End = Selection.Start.
Непонятно что вы понимаете под "сделать активной основную страницу". Либо я просто не въехал в чем состоит контекст вопроса.


1-ый макрос создает шаблон

2) Копирует весь шаблон в буфер обмена


3) Я определяю сколько строк из ListVIew нужно экспортировать и создаю нужное количество страниц, затем перемещаюсь на самое начало документа


4) Затем в цикле прохожу по всем строкам ListView моего приложения и для каждой вызываю макросы 4 и 5
Этот макрос вставляет содержимое буфера обмена (в нем содержится шаблон формы), а затем переходит на следующую страницу

5) Этот макрос устанавливает для только что вставленного шаблона новые имена. Изменяется не только текст на TextBox-ах, но и имена этих текстбоксов.

А вот теперь проблема: я вставил из буфера обмена несколько TextBox-ов (шаблон), я знаю их имена. Выделяю по отдельности каждый из них и устанавливаю нужный текст. Затем в программе на VC++ начинается новый цикл и снова вставляется из буфера обмена шаблон. Но проблема в том, что у меня уже выделен TextBox и шаблон вставляется в этот выделенный TextBox, а не в основную страницу. Точно не знаю как она называется, но я имею в виду большой белый лист, который отображается на экране. ВОт мне и нужно снять выделение с TextBox-а. Ваш способ Selection.End = Selction.Start не работает.
ЕЩе странность в том, что если поставить на запись макрос, то нет возможности снять выделение с TextBox-а. Как такое может быть?

Und der Haifisch der hat Tränen; Und die laufen vom Gesicht
Doch der Haifisch lebt im Wasser; So die Tränen sieht man nicht

Здравствуйте, DreamWeaver, Вы писали:

DW> А вот теперь проблема: я вставил из буфера обмена несколько TextBox-ов (шаблон), я знаю их имена. Выделяю по отдельности каждый из них и устанавливаю нужный текст. Затем в программе на VC++ начинается новый цикл и снова вставляется из буфера обмена шаблон. Но проблема в том, что у меня уже выделен TextBox и шаблон вставляется в этот выделенный TextBox, а не в основную страницу. Точно не знаю как она называется, но я имею в виду большой белый лист, который отображается на экране. ВОт мне и нужно снять выделение с TextBox-а. Ваш способ Selection.End = Selction.Start не работает.


А зачем Вы для всех параметров указываете Optional? — это именно для необязательных параметров, но тогда нужно проверять, задан параметр или нет, то есть имеет значение по умолчанию, и учитывать это в алгоритме

Читайте также: