Метод range word vba

Обновлено: 10.07.2024

32 комментария для “VBA Excel. Содержание рубрики”

Здравствуйте! У Вас нет темы по работе с фильтром. Можно проконсультироваться на этот счёт?

Здравствуйте, Сергей!
Задавайте вопрос, постараюсь ответить.

Спасибо, Евгений! Имеется в Excel столбец с включённым автофильтром. Можно ли программно запустить окно фильтра для выбора значений? Т.е. не руками нажимать на иконку фильтра, а заставить окно открываться с помощью макроса. Спасибо за ответ.

Да, это возможно:

Сергей, уточните вопрос: нужно программно нажать кнопки Ok и Отмена или отследить, какая из них была нажата?

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

Пример отслеживания нажатий кнопки «OK» автофильтра. На нажатие кнопки «Отмена» код не реагирует.

myString = Range ( "A1" ) . CurrentRegion . SpecialCells ( xlCellTypeVisible ) . Address myString1 = Range ( "A1" ) . CurrentRegion . SpecialCells ( xlCellTypeVisible ) . Address If Not Intersect ( ActiveCell , Range ( "A1" ) ) Is Nothing Then

Range("A1").CurrentRegion можно заменить на имя таблицы.

Евгений, а формулу в поле B2 оставлять или её можно удалить?

Сергей, событие Worksheet_Calculate() не зависит от команды SendKeys "%" . Ограничение стоит здесь:

If Not Intersect ( ActiveCell , Range ( "A1" ) ) Is Nothing Then

Код в процедуре Worksheet_Calculate() срабатывает только когда активна ячейка Range("A1") . Если заменить в этой строке Range("A1") на диапазон строки заголовков таблицы, тогда код будет срабатывать при любой активной ячейке в заголовке.

В столбце «B» не должно быть пустых ячеек до последней строки таблицы.

Как определить в VBA есть узор в ячейке?

If ActiveCell . Interior . Pattern = xlPatternNone Then

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

Set ws = ThisWorkbook . Sheets ( 1 ) 'можно указать любой лист книги 'устанавливаем защиту на все ячейки рабочего диапазона листа 'снимаем защиту только с пустых ячеек рабочего диапазона листа Set rr = ws . UsedRange . SpecialCells ( xlCellTypeBlanks ) Private Sub Workbook_BeforeClose ( Cancel As Boolean )

Добрый день, Владислав!
Замените строку

Добрый день, Евгений!
ОГРОМНОЕ СПАСИБО. :))

Здравствуйте, помогите, пожалуйста, решить задачу((

Здравствуйте, Рафия!
С разработкой кредитного калькулятора вам помогут только за плату на бирже фриланса.

Добрый день, Евгений! Я только начинаю работать с VBA. Помогите, пожалуйста, прописать код для автоматического перемещения курсора на ячейку вправо после заполнения предыдущей.

Здравствуйте, Ева! Для перемещения фокуса в ячейку справа код VBA не нужен: используйте для этого клавишу «Tab» или настройте клавишу «Enter» для перехода вправо (Файл >> Параметры >> Дополнительно).

Спасибо за ответ! Да, но это надо делать вручную; речь идёт об автоматическом перемещении курсора.

выбор текста - объект Range

В отличии от Selection, Range позволяет не выделить, а выбрать заданный диапазон текста в ворде. Использовать Range более выгодно, чем Selection, так как получить выбор можно только программно, это работает нам на руку, так как пользователь не сможет повлиять на работу макроса или программного кода. Поясню: допустим, мы хотим обработать текст в ворде с помощью объекта Selection, выделив нужный диапазон. Если пользователь во время обработки щелкнет мышью и снимет выделение, то наш макрос потерпит поражение . В случае с Range такой неприятности не произойдет, поэтому и рекомендуется использовать вместо Selection.

Получить доступ к объекту можно несколькими способами:

Одноименный метод объекта Document – данный метод принимает два необязательных параметра, которые задают начальное и конечное значение выбора при работе с текстом в Word. Если вызвать метод без параметров, то будет выбрано содержимое всего документа, например:

Или такой вариант:

Одноименное свойство – данное свойство предусмотрено для большинства классов Word (Bookmark, Selection, Table, Row, Cell, Paragraph и так далее). В данном случае мы получаем Range для заданного класса, автоматически произойдет выбор содержимого данного класса (абзац, выделение, закладка и так далее).

Метод SetRange() – Данный метод предоставляет сам объект Range, и он позволяет переопределить выбор текста в ворде, например:

Класс Range – выбираем текст в ворде

Свойства – работа с текстом в ворде

Выбираем текст в ворде

Свойства, которые позволяет задать или получить значение константы:

Case – Регистр текста в ворд, константа WdCharacterCase:

  • wdNextCase - -1 – Как в предложении
  • wdLowerCase - 0 - Нижний регистр
  • wdUpperCase - 1 - Верхний регистр
  • wdTitleWord - 2 – Начало слова с заглавной буквы
  • wdTitleSentence - 4 - в режиме ввода предложения
  • wdToggleCase - 5 – Инвертировать регистр

CharacterWidth - Ширина символов, константа WdCharacterWidth:

  • wdWidthFullWidth - 7 – Полная ширина.
  • wdWidthHalfWidth - 6 – Половина ширины (нормальный режим).

HorizontalInVertical – Расположение текста в ворде, константа WdHorizontalInVerticalType:

  • wdHorizontalInVerticalNone - 0 – Форматирование отсутствует
  • wdHorizontalInVerticalFitInLine - 1 – Горизонтальное направление
  • wdHorizontalInVerticalResizeLine - 2 – Вертикальное направление

Orientation - Направление ворд текста, константа WdTextOrientation:

  • wdTextOrientationHorizontal - 0 – Горизонтально, по умолчанию.
  • wdTextOrientationVerticalFarEast - 1 – Вертикально вниз от верхней части, справа налево.
  • wdTextOrientationUpward - 2 - Вверх под углом.
  • wdTextOrientationDownward - 3 – Вниз под углом.
  • wdTextOrientationHorizontalRotatedFarEast - 4 - Горизонтально, но справа налево (только для языков с данным типом письма).
  • wdTextOrientationVertical - 5 - Вертикально вниз от верхней части, слева направо.

HighlightColorIndex – Цвет выделения текста в ворде, константа WdColorIndex.

LanguageIDOther – Язык текста в ворд, константа, WdLanguageID.

Style – Стиль, константа WdBuiltinStyle.

Underline – Тип подчеркивания, константа WdUnderline.

работаем с текстами в word

Свойства, которые позволяют задать или получить логическое значение:

Bold – Делает шрифт жирным (true).

Italic - Делает шрифт курсивом (true).

GrammarChecked – Проверка грамматики.

LanguageDetected – Определение языка.

работаем с текстами в ворде

Прочие свойства (чтение и запись), только последнее доступно только для чтения.

Start и End – Начальная и конечная позиция для выбора.

FitTextWidth - Ширина текста в текущих единицах измерения.

ID - Имя идентификатора (строковое значение) для указанного диапазона.

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

Information (type) - Информация об указанном диапазоне (параметр type содержит значение константы WdInformation. Только чтение.

Методы – работа с текстом в Word

обработка текста в ворде

CheckGrammar () - Начинает проверку орфографии и грамматики для указанного диапазона.

CheckSynonyms () - Отображает диалоговое окно "Тезаурус".

Collapse (Direction) - Убирает выделение.

Direction – Дополнительный параметр, который задает направление от позиции курсора. Может быть одним из следующих значений константы WdCollapseDirection: wdCollapseEnd - 0 или wdCollapseStart - 1. Значение по умолчанию wdCollapseStart.

ComputeStatistics (Statistic) – Позволяет получить статистику для заданного выбора. Параметр Statistic содержит значения константы WdStatistic.

Copy (), Delete (), Cut () – Копирование, удаление и вырезание выбранного диапазона.

Paste () – Вставка содержимого буфера обмена.

CopyAsPicture () – Копирование текста в ворде как изображения.

Select () – Выделение текущего выбора.

SetRange (Start, End) – Позволяет задать начальную и конечную позицию для выбора, вернет новый объект Range.

Relocate (Direction) — Переставляет местами абзацы в выбранном диапазоне.

Direction – Обязательный параметр, который задает направление, содержит значение константы WdRelocate:

  • wdRelocateDown - 1 - Ниже следующего видимого абзаца.
  • wdRelocateUp - 0 - Выше предыдущего видимого абзаца.

Ниже я привел два примера программного кода на языке VBScript и JScript, в них я просто выбираю каждый символ в тексте и задаю для него цвет выделения. Работа с текстами в Word. Причем так, что бы цвета периодически менялись.

Программный код на языке VBSCRIPT:

Программный код на языке JSCRIPT:

Хорошо, с программированием закончили, теперь можно дать некоторые пояснения. И так, оба примера работают с текстом в Word одинаково. Имена переменных практически идентичны, только для JSCRIPT я к имени переменных добавил 1. В самом начале происходит подключение основных классов для доступа к приложению Microsoft Word, создание нового документа - "Коллекция Documents", делаем документ видимым. Далее в цикле FOR - "Урок 9 по JScript - оператор цикла for" и "Урок 6 по VBScript: Циклы for…next и for each…next" происходит работа с текстом в ворд, а именно – добавление несколько раз содержимого переменной MyText.

результат работы с текстом в ворде

Переменная oRange будет содержать ссылку н6а класс, используя цикл WHILE - "Урок 7 по VBScript: Циклы do…loop и while…wend" и "Урок 10 по JScript: Цикл while и do. while", мы начинаем обрабатывать каждый символ и менять его цвет, естественно, что количество возможных цветов ограничено. Поэтому нам приходится дополнительно добавить переменные i и j. Ну и все, результат работы можно увидеть на рисунке выше.

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

Как уже говорилось, чаще всего разработчиками для определения места ввода текста и навигации по документу используется объект Selection. Для этих же целей можно использовать и объект Range. Главное отличие между объектами Range и Selection заключается в том, что объект Selection может определить и пользователь (выделив текст мышью), а объект Range можно определить только программно, и он не зависит от текущего положения указателя или действий пользователя.

Рекомендуется, если это возможно, всегда использовать объект Range вместо объекта Selection. Тем самым мы защищаем себя от возможных ошибок, связанных с действиями пользователя (например, если пользователь в момент, когда программно вводится текст, щелкнет мышью по какому-либо месту в документе).

Формальное определение объекта Range выглядит так: это программный объект, который представляет непрерывный участок текста в документе. Этот объект не зависит от объекта Selection — вы можете работать с объектом Range, не изменяя текущего выделения. Он может не включать в себя ни одного символа (представлять курсор ввода текста).

Объектов Range в каждый момент времени может быть сколько угодно, а объектов Selection — только один.

Как создается объект Range:

  • первый способ — воспользоваться методом Range() объекта Document. В этом случае вам потребуется передать номера начального и конечного символа диапазона, а также document story, в который будут отсчитываться эти символы. Например, создать диапазон, который будет включать в себя первые 10 символов документа, можно так:

Dim rngDoc As Range

Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)

  • второй способ — воспользоваться свойством Range, которое предусмотрено для огромного количества объектов ( Bookmark, Selection, Table-Row-Cell, Paragraph и т.п.). В этом случае при помощи этого свойства мы получаем объект Range, представляющий данный объект;
  • третий способ — воспользоваться большим количеством вспомогательных свойств (Characters, Words, Sentences и т.п.), которые делят текст на отрезки — объекты Range. Эти свойства возвращают коллекции объектов Range. Конечно, если вы создаете коллекцию объектов Range, представляющих каждый символ большого документа, с точки зрения производительности такое решение может быть не самым лучшим;
  • четвертый способ — переопределить существующий объект Range. Обычно для этой цели используется метод Range.SetRange();
  • ну и, наконец, пятый способ, самый удобный в реальных приложениях. Он заключается в том, что вы вначале создаете шаблон нужного вам документа (договора, приходного ордера, отчета и т.п.), в который при создании помещаете закладки в тем места, в которые потом потребуется произвести вставку данных. Затем программным способом для каждой закладки создается объект Range, и уже с его помощью производится ввод информации (данные о заказчике, сумма в кассовом ордере и т.п.)

Для целей отладки (чтобы убедиться, что объект Range действительно включает в себя тот участок текста, который вы планировали) можно создавать на основе объекта Range объект Selection (то есть выделять диапазон). Для этого у объекта Range предусмотрен метод Select().

Большая часть свойств и методов объекта Range совпадает с аналогичными свойствами и методами объекта Selection (которые мы уже рассмотрели), поэтому рассматривать здесь мы их не будем. Точно так же чаще всего для объекта Range используется одно-единственное свойство Text, которое позволяет ввести в место в документе, представленное этим объектом, нужный текст. Ниже приведена информация о некоторых уникальных методах объекта Range:

  • InsertDatabase() — возможно, самый простой метод вставить результат запроса к базе данных в файл Word. Генерирует таблицу на основе возвращаемого результата запроса и вставляет ее по месту, определенному объектом Range. Умеет работать по ODBC, DDE, есть встроенные средства работы с MS Access. Возможности этого метода очень ограничены, поэтому рекомендуется использовать его только в самых простых случаях. Во всех остальных случаях лучше использовать объектную библиотеку ADO (см. предыдущую главу). Пример обращения к файлу Access средствами этого метода может выглядеть так:

Format:=wdTableFormatSimple2, Style:=191, _

DataSource:="C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Борей.mdb"

Если вы редактируете документ самостоятельно, вы должны поместить указатель мыши в нужное место либо выделить определенный фрагмент, прежде чем добавлять, удалять или форматировать текст. Однако в Word объекты Range избавляют вас от подобной необходимости. Объект Range определяет неразрывный блок текста в документе. Объекты Range полностью независимы от точки вставки или выделенного раздела, которые пользователь видит в окне документа. После создания объекта Range вы сможете манипулировать текстом, используя команды VBA, полные аналоги мощных команд редактирования Word, точно так же, как при использовании объектов Selection.

Вы можете определить объекты Range в программном коде одним из двух следующих способов:

* работая с диапазонами с помощью свойства Range;

* определив диапазоны с помощью метода Range объекта Document.

Использование свойства Range

Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, а также таблица, отдельная ячейка таблицы, комментарий или нижний колонтитул (и это далеко не полный список) определяют диапазоны. Вы можете считать, что все эти диапазоны существуют в некотором виртуальном мире, пока не вы не обратитесь к ним с помощью свойства Range соответствующего объекта. Например, для определения объекта Range, соответствующего первому абзацу активного документа, вам следует использовать объектную ссылку следующего вида.

ActiveDocumep.t. Paragraphs (1) . Range

Поскольку подобные стандартные диапазоны уже существуют в Word, вы можете использовать объектные ссылки на них напрямую, обходясь без каких-либо переменных. Это особенно хорошо подходит для тех ситуаций, когда вам необходим один конкретный диапазон для одной операции. Например, приведенная ниже инструкция копирует вторую таблицу в документе в буфер обмена, используя метод Сору объекта Range:

ActiveDocument.Tabl es[2) .Range.Copy

Если несколько инструкций используют один и тот же диапазон, вы можете использовать конструкцию With. для ускорения как ввода кода программы, так и ее выполнения. Ниже приведен пример кода, который проводит сортировку абзацев в третьем разделе документа, отображая первое предложение полужирным:

.Sort Sort Order := wdSortOrderAscending

.Sentences ( 1).Range.Bold = True

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

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

Объекты Selection также обладают свойством Range. Это значительно упрощает использование свойств и методов, принадлежащих объектам Range существующих выделенных областей. Приведенный ниже пример присваивает диапазон выделенной области переменной, перемещает выделенную область, после чего преобразует текст прописными буквами:

Set deRange = Selection.Range

Selection.Move Unit := wdParagraph, Count := 3

Использование свойства Range

Использование свойства Range Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, а также таблица, отдельная ячейка таблицы, комментарий или нижний колонтитул (и это далеко не полный список) определяют диапазоны. Вы можете

Определение диапазонов с помощью метода Range

Определение диапазонов с помощью метода Range Если существующие объекты не содержат текст, с которым вы хотите работать, создайте собственный объект Range. В любом открытом документе вы сможете определить столько объектов Range, сколько вам нужно. При этом используется метод

Использование в коде объектов Range для работы с ячейками

Использование в коде объектов Range для работы с ячейками Весьма неожиданно, что в Excel нет объекта Cell (Ячейка). Поэтому при написании кода следует руководствоваться следующим подходом: для указания ячейки в VBA-коде используется объект Range. В Excel объект Range может заключать в

Определение объекта Range

Определение объекта Range В Excel имеется несколько возможных методов идентификации диапазона из одной или нескольких ячеек, на который должен воздействовать написанный код. Для достижения данной цели используются следующие.Стандартная ссылка на ячейку. Так называемый

Работа с MBV-объектами

Работа с MBV-объектами Наши первые приложения удаленного взаимодействия позволяли доступ клиентов к одному WKO-типу. Напомним, что WKO-типы (по определению) являются MBR-типами, поэтому доступ клиента к ним осуществляется через агента-посредника. В противоположность этому,

Работа с объектами команд

Работа с объектами команд Теперь, когда вы понимаете роль объекта соединения, мы выясним, как предъявить SQL-запрос базе данных. Тип SqlCommand (который получается из DbCommand) является объектом представлением SQL-запроса, имени таблицы или хранимой процедуры. Вид соответствующей

Операции с объектами

Операции с объектами Взглянем еще раз на нашу будущую визитку. Вы увидите, что каждый ее отдельный элемент заключен в пунктирную рамочку. А если вы щелкнете по нему, то на линиях рамки проявятся кружочки – по углам и в центре каждой линии. Эти рамки нужны лишь для того,

Действия с созданными объектами

Действия с созданными объектами К основным операциям с объектами относятся изменение размеров и свойств, удаление, копирование, вырезание и др. Также после размещения нескольких объектов на рабочих страницах mimio Блокнота может понадобиться их преобразовать,

Действия с созданными объектами

Действия с созданными объектами К основным операциям с объектами относятся изменение размеров и свойств, удаление, копирование, вырезание, упорядочивание и др.Пропорциональное изменение размера объекта1. Выделить объект инструментом Выбрать.2. Прижать маркер к

Работа с объектами и ссылками

Работа с объектами и ссылками Вернемся к более приземленным проблемам и рассмотрим, как программные системы работают с объектами, как создают и используют гибкие структуры данных.

Что происходит с объектами

Что происходит с объектами ОО-программа создает объекты. Предыдущая лекция показала, как полезно полагаться на динамическое создание для получения гибких объектных структур, подстраивающихся автоматически к нуждам

Работа с утилизированными объектами

Работа с утилизированными объектами Для реализации fresh и recycle, можно среди других возможных вариантов представить available как стек: fresh будет удалять элемент из стека, а recycle будет помещать элемент в стек. Создадим класс STACK_OF_LINKABLES для этого случая и добавим следующие

6.3.6. Управляем объектами

6.3.6. Управляем объектами Для выполнения заданий нам понадобится материал разд. 5.3.3.Вспомним, какие действия будут происходить на слайде.? Звук начинает проигрываться с самого начала С самого же начала появляется текст с фоном.? Затем при чтении слова «Ивашка» появляется

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