Основы офисного программирования и язык VBA


Метод Select и свойство Selection - часть 2


Это предохраняет нас от соблазна "обмануть систему" и иметь две переменные - два объекта Selection одновременно.

Типичный и правильный способ работы с объектом Selection таков:

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

Рассмотрим пример, в котором пользователь переключается между двумя областями выделения

Sub WorkWithTwoReg() 'Переключение между двумя областями выделения документа 'Создание двух областей Dim myRange1 As Range Dim myRange2 As Range Dim i As Byte Dim Answer As Variant ' Выбор пользователя 'Добавляем новый документ Documents.Add With ActiveDocument 'Добавляем 7 абзацев в текст созданного документа For i = 1 To 7 .Paragraphs.Last.Range.Text = "Абзац " & i .Paragraphs.Add Next i Set myRange1 = .Range(Start:=.Paragraphs(2).Range.Start, _ End:=.Paragraphs(3).Range.End)

Set myRange2 = .Range(Start:=.Paragraphs(6).Range.Start, _ End:=.Paragraphs(7).Range.End) Answer = InputBox(prompt:=" Выберите область выделения (1/2)", _ Default:=1) If Answer = 1 Then myRange1.Select 'Макрос ItInSel работает с первой выделенной областью ItInSel Else myRange2.Select 'Макрос ItInSel работает со второй выделенной областью ItInSel End If End With

End Sub

Пример 1.9.

В этом макросе почти все применяемые средства хорошо знакомы. До сих пор мы не пользовались только стандартным для Visual Basic методом InputBox, который открывает диалоговое окно, позволяющее принять ввод пользователя. Заметьте, что работу в выделенной области осуществляет процедура ItInSel. Ее можно было сделать довольно сложной, но мы ограничились одним оператором:

Public Sub ItInSel() Selection.Font.Italic = True End Sub

Анализируя этот макрос, обратите внимание на два обстоятельства:

  • Если мы хотим постоянно работать с некоторыми областями, имеет смысл создать соответствующие им объекты. "Хранителями" областей выступают объекты класса Range В нашем примере это переменные myRange1 и myRange2. Объекты Selection появляются в последнюю минуту, когда область нужно выделить и начать с ней работать.
  • Работа с объектом Selection может быть предпочтительнее, так как явные ссылки заменяются косвенными. Это позволяет создать процедуру, не зависимую от области. Подобную ситуацию демонстрирует вызов процедуры ItInSel.




Начало  Назад  Вперед



Книжный магазин