Использование макросов в ExcelРефераты >> Программирование и компьютеры >> Использование макросов в Excel
Рисунок 17 – Объект Range и несколько его методов
2.7 Семейства объектов
Существует возможность иметь несколько экземпляров одного и того же объекта Visual Basic. Все вместе эти экземпляры образуют семейство (collection). Конкретный экземпляр в семействе объектов идентифицируется с помощью имени или индекса. Например, семейством всех листов в книге является Sheets() Конкретный экземпляр листа можно указать следующим образом:
Sheets (3) 'Третий лист в семействе. или
Sheets ("Итоги") 'Именованный экземпляр листа.
В Visual Basic каждый элемент семейства имеет собственный индекс, но интервал значений индексов не обязательно непрерывен, и поэтому при удалении одного экземпляра объекта индексы других экземпляров могут остаться прежними. Например, если удалить Sheets (3) из семейства 12 листов книги, нет гарантии, что Excel перенумерует Sheets (4) и т. д. до Sheets (12), чтобы заполнить разрыв.
В других языках программирования для многократного повторения операции можно использовать конструкцию For . Next, например
For n = 1 to 12 'Активизация каждого листа
Sheets (n). Activate Next n
Если выполнить эти инструкции после удаления листа Sheets (3), то Visual Basic выведет сообщение об ошибке и остановит макрос, поскольку Sheets (3) больше не существует. Для таких ситуаций Visual Basic предлагает конструкцию For Each . Next, которая применяет ряд инструкций к каждому элементу семейства без учета их индексов. Например, предположим, что нужно присвоить имя каждому листу активной книги, вводя в ячейку А1 значения Sheet 1, Sheet 2 и т. д. Так как в общем случае количество листов в книге может быть неизвестно, можно воспользоваться следующим макросом Visual Basic:
Sub EnterSheetNum() n = 0
For Each Sheet In Sheets ()
n = n+ 1
Sheet. Activate
Range ("A1"), Select
ActiveCell. FormulaR1C1 = "Sheet"+ Str (n) Next End Sub
Можно установить свойство объекта, содержащегося в другом объекте, задав «подобъект» в виде последовательности вложенных объектов. Например, чтобы макрос EnterSheetNum выполнялся быстрее, можно установить свойство FormulaR1C1 ячейки А1 каждого листа без его предварительной активизации. Для этого достаточно заменить следующие инструкции:
Sheet. Activate Range ("A1"). Select
ActiveCell. FormulaR1C1 = "Sheet"+ Str (n) одной строкой:
Sheet. Range ("A1"). FormulaR1C1 = "Sheet"+ Str (n)
Последняя инструкция означает: Установить свойство FormulaR1C1 ячейки А1 листа равным «Sheet n». Основной результат этого изменения заключается в том, что новый макрос выполняется быстрее, поскольку он не заставляет Excel активизировать каждый лист перед вводом текста.
2.8 Имена аргументов метода
В Visual Basic многие методы имеют аргументы, которые позволяют задать параметры выполняемых действий. Если у киберпса метод Wag (вилять) объекта Tail (хвост) имеет аргументы (например, wagRate — количество виляний в секунду, wagTime — продолжительность виляния в секундах и wag Arc — размах виляния в градусах), их можно задать, использовав один из двух вариантов синтаксиса.
В первом варианте, который часто называется синтаксисом по имени (byname syntax), используемые аргументы указываются по имени и в произвольном порядке. Например, следующая инструкция заставляет киберпса вилять хвостом три раза в секунду в течение часа с амплитудой 180 градусов:
Robodogs('Fido"). Tail. Wag
wagRate: = 3,_
wagTime: = 3600,_
wagArc: = 180
Для присваивания значения аргументу используется двоеточие и знак равенства, аргументы отделяются друг от друга запятой.
При использовании второго варианта, который обычно называется синтаксисом по позиции (by-position syntax), аргументы вводятся в предписанном порядке. (Порядок аргументов для каждого метода приведен в справочной системе Microsoft Visual Basic.) Например, предыдущая инструкция, записанная в синтаксисе по позиции, имеет следующий вид:
Robodogs ("Fido"). Tail. Wag (3, 3600, 180)
Нужно обратить внимание, что список аргументов заключен в круглые скобки. Синтаксис по позиции не так удобен, как синтаксис по имени, поскольку требует запоминания порядка следования аргументов. Кроме того, когда впоследствии будет просматриваться текст программы, то отсутствие имен аргументов не освежит память и практически ничего не скажет о примененных параметрах.
2.9 Вставка инструкций в существующий макрос
Предположим, что записан макрос, который вводит ряд заголовков, устанавливает для них шрифт и рисует рамку. Затем обнаружилось, что пропущен какой-то шаг или записан неправильно, например применен не тот тип границы. Что делать в этом случае?
Предыдущие версии Excel позволяли вносить изменения в существующий макрос посредством дозаписи в него последовательности действий, начиная с заданной позиции, с помощью команд Отметить позицию (Mark Position For Recording) и Записать с отметки (Record At Mark). В последней версии среды Visual Basic эти средства не поддерживаются. Чтобы добавить инструкции в существующий макрос, нужно записать действия во временный макрос и затем скопировать инструкции из него в изменяемый макрос.
Например, чтобы добавить в макрос CompanyAddress шаг, который устанавливает шрифт для названия фирмы, выполните описанные ниже действия.
1. Переключиться в лист, содержащий введенный ранее адрес, и выделить ячейку А6 с названием фирмы.
2. В меню Сервис (Tools) выбрать команду Макрос (Macro) и затем — Начать запись (Record New Macro), чтобы открыть окно диалога Запись макроса (Record Macro). Ввести MacroTernp в поле Имя макроса (Macro Name) и нажать кнопку ОК. Excel выведет на экран панель инструментов Остановка записи (Stop Recording).
3. Выбрать в меню Формат (Format) команду Ячейки (Font). Затем в списке шрифтов на вкладке Шрифт (Font) открывшегося окна диалога выбрать шрифт Arial (или другой установленный шрифт) размером 14 пунктов и указать полужирный курсив. Затем нажать кнопку ОК, чтобы применить эти форматы.
4. Нажать кнопку Остановить запись (Stop Recording) на панели инструментов Остановка записи.
5. В меню Сервис выбрать команду Макрос и затем — Редактор Visual Basic (Visual Basic Editor). Если окно проекта отсутствует на экране, в меню View (Вид) выбрать команду Project Explorer (Окно проекта). Окно проекта содержит список объектов, принадлежащих активной книге: три листа, объект, представляющий книгу в целом, и один модуль.
6. Дважды щелкнуть на строке Module1. Появится окно, содержащее записанные макросы, в соответствии с рисунком 18. Прокрутить его вниз, чтобы вывести на экран весь текст макроса MacroTemp.
Рисунок18 – Макрос MacroTemp, содержащий только что записанные
инструкции
7. Выделить в макросе все строки конструкции With . End With и затем в меню Edit (Правка) выбрать команду Copy (Копировать).
8. Прокрутить окно вверх, чтобы вывести на экран макрос Company Address.