Использование макросов в ExcelРефераты >> Программирование и компьютеры >> Использование макросов в Excel
9. Щелкнуть в начале строки, содержащей инструкцию
Range ("A7"). Select
Затем нажать клавишу Enter, чтобы вставить пустую строку, и укажите точку вставки, щелкнув в начале пустой строки.
10. В меню Edit (Правка) выбрать команду Paste (Вставить).
11. Прокрутить окно вверх и удалить весь макрос CompanyAddress от инструкции Sub до инструкции End Sub.
12. Наконец, в меню View (Вид) выбрать команду Microsoft Excel, чтобы переключиться в Excel.
Можно проверить работу измененного макроса, нажав клавиши Ctrl+ Shift+ A. Теперь макрос не только вводит адрес, но также применяет заданные форматы шрифта. Ниже представлен исходный текст макроса CompanyAddress:
Sub CompanyAddress () Range ("A6"). Select
ActiveCell. FormulaR1C1 = "Региональная Торговая Компания" With Selection. Font
. Name = "Arial"
. FontStyle = "полужирный курсив"
. Size = 14
. Strikethrough = False
. Superscript = False
. Subscript = False
. OutlineFont = False
. Shadow = False
. Underline = xlUnderlineStyleNone
. Colorlndex = xlAutomatic End With
Range ("A7"). Select
ActiveCell. FormulaR1C1 = "Морская улица 15" Range ("A8"). Select
ActiveCell. FormulaR1C1 = "325611 Кузнецк, Россия" End Sub
Конструкция With . End With задает ряд свойств объекта, в данном случае — шрифта текущего выделения. Эта конструкция позволяет использовать краткую форму записи последовательности инструкций Visual Basic, которые иначе имели бы следующий вид:
Selection. Font, Name = "Arial"
Selection, Font. FontStyle = "Полужирный курсив"
Selection. Font. Size = 14
Selection. Font. Strikethrough = False
Selection. Font. Superscript = False
и т. д.
В макросе CompanyAddress оба объекта, ActiveCell и Selection, указывают на один и тот же диапазон, а именно ячейку А6. Поскольку ряд параметров форматирования шрифта можно применить к целому диапазону, то Excel использует ключевое слово Selection вместо ActiveCell.
2.10 Использование абсолютных и относительных ссылок
В макросе CompanyAddress Excel записывает адреса ячеек в виде абсолютных ссылок в формате А1, и поэтому макрос всегда вводит отформатированный адрес фирмы в ячейку А6. В Visual Basic выделение ячеек записывается в виде абсолютных ссылок, пока не будет нажата кнопка Относительная ссылка (Relative Reference) на панели инструментов Остановка записи (Stop Recording). После этого кнопка будет выглядеть нажатой, показывая тем самым, что при дальнейшей записи макроса используются относительные ссылки на ячейки. Во время записи макроса можно в любое время переключаться с относительных ссылок на абсолютные, или наоборот.
Предположим, что вместо вставки названия и адреса фирмы в ячейки А6: А8 активного листа нужно вставить адрес в ячейку, которая окажется активной на момент запуска макроса. Для этого нужно создать новую версию макроса CompanyAddress (назовем ее Company AddressRel), в которой будут использоваться относительные ссылки вместо абсолютных.
1. Необходимо переключиться в рабочий лист, выделите ячейки А6: А8, в меню Правка (Edit) выбрать команду Очистить (Clear) и затем — Все (All). После этого выделить ячейку А6.
2. В меню Сервис (Tools) выбрать команду Макрос (Macro) и затем — Начать запись (Record New Macro). В окне диалога Запись макроса (Record Macro) указать CompanyAddressRel в качестве имени макроса, в поле Сочетание клавиш (Shortcut Key) ввести строчную букву а, и в поле Описание (Description) — Ввод адреса фирмы в произвольную ячейку. Нажать кнопку ОК, и Excel выведет на экран панель инструментов Остановка записи (Stop Recording).
3. На панели инструментов Остановка записи нажать кнопку Относительная ссылка (Relative Reference). (После этого кнопка должна выглядеть нажатой, показывая тем самым, что записываются относительные ссылки.)
4. В меню Формат (Format) выбрать команду Ячейки (Cells). Задайте 14-пунктный шрифт Arial и полужирный курсив, а затем нажать кнопку ОК.
5. Ввести текст
Региональная Торговая Компания
Нажать клавишу -1- и ввести
Морская улица 15
Еще раз нажать клавишу #П# и ввести
325611 Кузнецк, Россия Затем нажать клавишу Enter.
6. Нажать кнопку Остановить запись (Stop Recording).
Нужно проверить созданный макрос, выделяя разные ячейки и нажимая клавиши Ctrl+ a (на этот раз без клавиши Shift). Если переключиться в Visual Basic, нужно открыть Module1 и найти макрос Company AddressRel, то можно увидеть текст, представленный ниже:
Sub CompanyAddressRel() 'CompanyAddressRel Макрос 'Ввод адреса фирмы в произвольную ячейку 'Сочетание клавиш: Ctrl+ a
ActiveCell. FormulaR1C1 = "Региональная Торговая Компания" With Selection. Font
. Name = "Arial"
. FontStyle = "Полужирный курсив"
. Size = 14
. Strikethrough = False
. Superscript = False
. Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.Colorlndex = xlAutomatic End With
ActiveCell, Offset (1, 0). Range ("A1"). Select ActiveCell. FormulaR1C1 = "Морская улица 15" ActiveCell. Offset (1, 0). Range ("A1"). Select ActiveCell. FormulaR1C1 = "325611 Кузнецк, Россия" End Sub
Первоначальный макрос CompanyAddress вводит адрес фирмы в диапазон А6: А8 независимо от того, какая ячейка является активной при его запуске. Новый же макрос вводит адрес, начиная с активной ячейки, независимо от того, где она расположена.
Если сравнить две версии макроса, то можно увидеть, что они отличаются только инструкциями, используемыми для выделения ячеек. Например, новая версия макроса не содержит инструкции для выделения первой ячейки, поскольку в ней применяются относительные ссылки, и первая ячейка уже выделена.
Кроме того, для выделения второй ячейки первоначальный макрос использует инструкцию
Range ("A7"). Select В то же время в новой версии употреблена инструкция
ActiveCell. Offset (1, 0). Range ("A1"). Select
Чтобы перейти из активной ячейки в следующую, расположенную ниже, в новом макросе Visual Basic применяет к выделенному объекту метод Offset с двумя аргументами, задающими смещение по строкам и по столбцам. Ключевое слово Range возвращает диапазон, имеющий ту же размерность, что и его аргумент. В данном случае аргумент «A1» задает диапазон, состоящий из одной ячейки. Наконец, метод Select выделяет этот диапазон, как и в первоначальном макросе.
Очевидно, что при использовании макроса с относительными ссылками расположение активной ячейки имеет большое значение. Перед запуском этого макроса обязательно выделить ячейку, в которую нужно ввести адрес. Иначе адрес будет введен там, где случайно оказалась активная ячейка.
Основное различие между ссылками на ячейки в рабочем листе и в модуле состоит в следующем: в рабочем листе символ $ указывает на то, что ссылка на столбец или строку является абсолютной, а в модуле все ссылки являются абсолютными. Таким образом, относительные ссылки в модуле могут быть построены только посредством применения метода Offset к объекту Range, использующему абсолютные ссылки.