Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава 8. Основы программирования на VBA

235

Управление объектами и коллекциями

Как программист вы проведете много времени, работая с объектами и коллекциями. Поэтому нужно знать самые эффективные способы написания кода для обработки объек­ тов и коллекций. VBA предлагает две конструкции, которые помогут вам упростить управление объектами и коллекциями:

конструкция W ith

- End

W ith ;

конструкция F o r

E ach -

N e x t.

Конструкция With - End With

Конструкция W ith - End W ith позволяет выполнять несколько операций над од­ ним объектом. Чтобы понять, как она работает, проанализируйте следующую процедуру, которая изменяет шесть свойств выделенного объекта (подразумевается, что выделен объект Range).

Sub ChangeFont1 ()

 

 

S e le ctio n .F o n t.N a m e

=

"C am bria"

S e le c tio n .F o n t. B o ld

=

True

S e le c tio n .F o n t. I t a l i c

= True

S e le c tio n . F o n t. S ize

=

12

S e le c tio n . F o n t.U n d e rlin e

= x lU n d e rlin e S ty le S in g le

S e le c tio n .F o n t. ThemeColor

= xlT h e m e C o lo rA cce n tl

End Sub

 

Эту процедуру можно переписать с помощью конструкции W ith - End With. Процедура, показанная ниже, работает точно так же, как и предыдущая.

Sub ChangeFont2 ()

W ith S e le c tio n . Font

.Name

=

"C am bria"

.B o ld

=

True

. I t a l i c

= True

.S ize

=

12

.U n d e rlin e

= x lU n d e rlin e S ty le S in g le

.ThemeColor

= xlT h e m e C o lo rA cce n tl

End W ith

 

End Sub

 

Считается, что второй вариант этой процедуры читать сложнее. Однако помните, что целью изменений является увеличение скорости выполнения операций. Первый вариант более прямолинейный и его легче понять, но процедура, использующая для изменения нескольких свойств одного объекта конструкцию W ith - End W ith, помогает повы­ сить эффективность выполнения кода по сравнению с эквивалентной ей процедурой, ко­ торая явно ссылается на объект в каждом операторе.

©

Примечание

При записи макроса VBA в Excel конструкция w ith - End w ith применяет­

 

ся при каждой удобной возможности. Чтобы посмотреть удачный пример

 

этой конструкции, проанализируйте последовательность действий при из­

 

менении параметров страницы с помощью команды Разметка страницы^

 

Параметры страницы^Ориентация (Page Layout^Page Setup^Orientation).

236 Часть III. Visual Basic for Applications

Конструкция For Each - Next

Итак, вы уже знаете, что коллекция — это группа однородных объектов. Например, Workbooks — это коллекция всех открытых рабочих книг (объектов) Workbook. Су­ ществует ряд других коллекций, с которыми вы можете работать.

Предположим, вы решили выполнить действие над всеми объектами коллекции или вам необходимо оценить все объекты коллекции и совершить действие при выполнении определенных условий. Это идеальная ситуация для применения конструкции For

Each - Next.

Синтаксис конструкции For Each - N ext приведен ниже.

For

Each элемент In ко л л е кц и я

[инст рукции]

[E x it For]

[инст рукции]

N ext

[элемент]

В процедуре, приведенной далее, применена конструкция For Each - N ext по отношению к коллекции W orksheets активной рабочей книги. При выполнении этой процедуры функция MsgBox отображает свойство Name каждого рабочего листа. (Если в активной рабочей книге пять листов, функция MsgBox вызывается пять раз.)

Sub

C ou ntS h ee ts()

 

Dim

Ite m

as W orksheet

 

For

Each

Ite m In A ctiveW orkbook.W orksheets

 

MsgBox

Item.Name

 

N ext

Ite m

 

End

Sub

 

 

Примечание

В предыдущем примере ite m — это объектная переменная (точнее, объект W orksheet). В названии ite m не заключен особый смысл; вместо него мож­ но использовать любое корректное название переменной.

В следующем примере конструкция For Each - N ext используется для цикличе­ ского просмотра всех объектов коллекции Windows, а также для подсчета количества скрытых окон.

Sub

HiddenW indows()

 

 

Dim

Cnt

As

In te g e r

 

 

Dim

Win

As

Window

 

 

Cnt

=

0

 

 

 

 

F or

Each

Win In Windows

 

I f

N ot

W in .V is ib le

Then

 

Cnt

=

Cnt

+ 1

 

 

N ext

Win

 

 

 

End

MsgBox

Cnt

St " скрытые

о кн а ."

Sub

 

 

 

 

 

Для каждого скрытого окна значение переменной Cnt увеличивается на единицу. По завершении цикла в окне сообщения отображается значение переменной Cnt.

В следующем примере закрываются все окна, за исключением активного. В этой про­ цедуре используется конструкция If-T h e n для проверки каждой рабочей книги в кол­ лекции W orkbooks.