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

184

Часть III. Visual Basic for Applications

Средство записи макросов — это чрезвычайно полезный инструмент, но не забывайте

оследующих моментах.

Запись лучше всего выполнять для простых макросов или небольшого фрагмента более сложного макроса.

Не все выполняемые в Excel действия могут записываться.

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

Средство записи макросов всегда создает процедуры типа Sub. С ее помощью не­ возможно создать процедуру типа F u n c tio n .

Созданная в результате записи программа зависит от определенных вами настроек.

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

Что записывается

Средство записи макросов Excel преобразует действия, выполненные с помощью мыши и клавиатуры, в код VBA. Принцип выполнения можно описать на нескольких страницах, но целесообразнее рассмотреть пример. Выполните следующие действия.

1.Начните с пустой рабочей книги.

2.Убедитесь, что окно Excel полностью не развернуто. Добейтесь, чтобы на экране оставалось свободное место.

3.Нажмите клавиши <Alt+Fl 1> для открытия окна VBE.

Примечание. Убедитесь в том, что это окно развернуто не полностью. Если это ус­ ловие не выполняется, одновременный просмотр окон VBE и Excel невозможен.

4.Измените размер и разместите окна Excel и VBE таким образом, чтобы возможен был их просмотр. (Для достижения наилучших результатов сверните окна всех выполняющихся приложений.)

5.Перейдите в окно Excel, выберите команду Разработчик^Код1^Запись макро­ са (Developer^Code1^Record Macro) и щелкните на кнопке ОК для запуска функ­ ции записи макросов.

6.Перейдите в окно VBE.

7.В окне Project Explorer дважды щелкните на узле M o d u le l для отображения мо­ дуля в окне кода.

8. Закройте окно Project Explorer в среде VBE для лучшего просмотра окна кода.

В результате получим экран, показанный на рис. 7.13. Размер окон зависит от вы­ бранного разрешения экрана. Если вы являетесь счастливым обладателем двухмониторной системы, на первом мониторе отобразите окно VBA, а на втором — окно Excel.

Теперь поработайте на рабочем листе, выбирая разные команды Excel. Посмотрите, как генерируется код в окне, представляющем модуль VBA. Вам следует выполнить не­ сколько действий: выделить ячейки, ввести данные, изменить формат ячеек. Далее ис­ пользуйте команды ленты, создайте диаграмму, поработайте с графическими объектами и т.д. Все прояснится, когда на экране появится код программы.

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

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

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

Для реализации относительной формы записи воспользуйтесь командой Разработчик^Код^Относительные ссылки (Developer^Code^Use Relative References). Эта кнопка играет роль переключателя. Как только она окрашивается в другой цвет, это служит признаком записи кода с относительными ссылками. Если кнопка окрашена в стандарт­ ный цвет, записывается код с абсолютными ссылками. Метод записи может быть изме­ нен в любой момент, даже в середине процесса записи.

Чтобы увидеть, как работает относительная форма записи макросов, очистите содер­ жимое ячеек В1 :G1 и выполните следующие действия.

1.Активизируйте ячейку В1.

2.Выберите команду Разработчик^Код^Запись макроса (Developer^Code«=> Record Macro).

3.Для начала записи щелкните на кнопке ОК.

4.Щелкните на кнопке Относительные ссылки (Use Relative Reference) для выбо­ ра относительного режима записи. При этом цвет данной кнопки изменится.

5.В ячейки B1:G1 введите сокращенные названия первых шести месяцев, как в пре­ дыдущем примере.

6.Выделите ячейку В1.

7.Остановите запись макроса.

Если установить относительный режим записи, созданный Excel код приобретет иной вид.

Sub

М а с г о 2 ()

 

 

 

 

A c t i v e C e l l . F o r m u l a R l C l = "Я н в "

 

A c t i v e C e l l . O f f s e t (0,

1 ) . R a n g e ( "А 1 " ) . S e l e c t

 

A c t i v e C e l l . F o r m u l a R l C l

=

"Ф кв"

 

A c t i v e C e l l . O f f s e t (0,

1 ) . R a n g e ( " A l " ) . S e l e c t

 

A c t i v e C e l l . F o r m u l a R l C l

=

"M ap"

 

A c t i v e C e l l . O f f s e t (0,

1 ) . R a n g e ( " A l " ) . S e l e c t

 

A c t i v e C e l l . F o r m u l a R l C l = "A n p "

 

A c t i v e C e l l . O f f s e t (0,

1 ) . R a n g e ( " A l " ) . S e l e c t

 

A c t i v e C e l l . F o r m u l a R l C l

=

"Май"

 

A c t i v e C e l l . O f f s e t (0,

1 ) . R a n g e ( " A l " ) . S e l e c t

 

A c t i v e C e l l . F o r m u l a R l C l

=

"Июн"

 

A c t i v e C e l l . O f f s e t (0,

- 5 ) . R a n g e ( " A l " ) . S e l e c t

E n d

Sub

 

 

 

Для вызова этого макроса на выполнение активизируйте рабочий лист и выберите команду Разработчика Код■=>Макросы (Developer^Code^Macros). Выберите имя нужного макроса и щелкните на кнопке Выполнить (Run).

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

Макрос кажется сложным, хотя на самом деле это не так. Первый оператор вводит Янв в активную ячейку. (Используется активная ячейка, так как перед оператором не

Глава 7. Введение в VBA

187

указан оператор активизации ячейки.) Следующий оператор использует метод S e l e c t (Выделение) (наравне со свойством O f f s e t (Смещение)) для перемещения курсора на одну ячейку вправо. Следующий оператор вставляет в нее текст и т.д. В результате ис­ ходная ячейка выделяется путем вычисления относительного адреса (смещения). В отли­ чие от предыдущего, данный макрос всегда начинает ввод текста в активной ячейке.

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

Примечание

В этом макросе сгенерирован код, который будто бы ссылается на ячейку А1, что может показаться странным, поскольку ячейка А1 в макросе не ис­ пользуется. Это побочный эффект функции записи макросов. (Свойство O f f s e t будет рассмотрено далее.) На данном этапе макрос работает так, как требуется.

Кстати, код, сгенерированный Excel, намного сложнее, чем необходимо, и представ­ ляет не самый эффективный способ программирования описанной операции. Следую­ щий макрос, который был введен вручную, представляет собой более простой и быстрый способ выполнить те же действия. В примере показано, что не обязательно выделять ячейку перед помещением в нее информации— это важный момент, который сущест­ венно ускоряет работу макроса.

Sub М асгоЗ ()

A c t i v e C e l l . O f f s e t (0,

A c t i v e C e l l . O

f f s e t (0,

A c t i v e C e l l . O

f f s e t (0,

A c t i v e C e l l . O

f f s e t (0,

A c t i v e C e l l . O f f s e t (0, A c t i v e C e l l . O f f s e t (0 ,

End Sub

0)= "Я н в "

1)= "Ф ев"

2)= "M ap"

3)= "A n p "

4)= "Май"

5)= "Июн"

Данный макрос можно еще больше упростить с помощью конструкции W ith -E n d

With.

Sub M acro4 ()

 

 

 

W ith A c t i v e C e l l

 

 

. O f f s e t (0,

0)

=

"Я нв

. 0 f f s e t ( 0 /

1)

=

"Фев

. O f f s e t (0,

2)

=

"Map

. O f f s e t (0,

3)

=

"Anp

. 0 f f s e t ( 0 ,

4)

=

"Май

. O f f s e t (0,

5)

=

" Июн

End W it h

 

 

 

d Sub

 

 

 

Если же вы гениальный программист на VBA (как и я), можете поразить своих кол­ лег, выполнив все описанные выше действия в одном операторе.

Sub МасгоБ ()

A c t i v e C e l l . R e s i z e (, 6) = A r r a y ( " Я н в " , " Ф е в " , " М а р " , " А п р " , " М а й " , "И ю н ") End Sub