В VBA выделение ячеек всегда записывается в виде абсолютных ссылок в текстовом формате R1 C1, пока вы не нажмёте кнопку Относительная ссылка на панели инструментов Остановка записи. После этого кнопка будет выглядеть нажатой, показывая тем самым, что при записи используются относительные ссылки на ячейки.
Если мы хотим, чтобы рассмотренный макрос вводился начиная с активной текущей ячейки (а не всегда в ячейки А6:А8), необходимо выполнить следующую последовательность действий для макроса с названием CompanyAddressRel:
· Очистите ячейки А6:А8 и выделите А6.
· Выполните команду Сервис/Макрос/Начать запись. В окне диалога Запись макроса
укажите CompanyAddressRel в качестве имени макроса, в поле сочетание клавиш введите строчную букву а и в поле описание – Ввод адреса фирмы в произвольную ячейку. Нажмите ОК.
· На панели инструментов Остановка записи нажмите кнопку Относительная ссылка, после чего кнопка выглядит нажатой.
· Выполните команду Формат/Ячейки. Задайте 14-пунктный Arial и полужирный курсив и нажмите ОК.
|
|
· Выделите текст
Региональная Торговая Компания АВС
нажмите клавишу ¯ и введите
Проспект Правды, 157
Ещё раз нажмите клавишу ¯ и введите
49083, Днепропетровск, Украина
Нажмите Enter
· Нажмите кнопку Остановить запись на панели инструментов Остановка записи.
Проверьте созданный макрос, выделяя разные ячейки и нажимая Ctrl + а. Текст макроса будет иметь вид
Sub Company Address Rel ()
Range(“А6”).Select
Active Cell.Formula R1C1= “Региональная Торговая Компания АВС”
With Selection.Font
.Name = “Arial”
.Font Style = “полужирный курсив”
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderline StyleNone
.ColorIndex = xlAutomatic
End With
Active Cell.Offset (1,0).Range(“А1”).Select
Active Cell.FormulaR1C1= “Прспект правды 157”
Active Cell.Offset (1,0).Range(“А1”).Select
Active Cell.FormulaR1C1= “49083, Днепропетровск, Украина”
End Sub
Обе версии макросов отличаются инструкциями, используемыми для выделения ячеек. В новой версии употребляется инструкция
ActiveCell.Offset (1,0). Range (“A1”).Select
Здесь VBA применяет метод Offset с двумя аргументами, задающими смещение по строкам и столбцам. Range возвращает диапазон, состоящий из одной ячейки А1, метод Select – выделяет этот дипазон.
Применяйте абсолютные ссылки, если хотите получить одно и то же действие в одном и том же месте нескольких листов. Относительные ссылки удобны для выполнения действий в любом месте рабочего листа.
1.5. Макросы и процедуры.
Макрос, который используется другим макросом, называется процедурой (Subroutine).Процедуры облегчают создание сложных макросов т.к. не нужно повторять одинаковые наборы инструкций несколько раз. При использовании одного макроса в другом вызывается процедура, для чего указывается её имя.
|
|
Для демонстрации разделим макрос Company Address Rel () на две части:
· Переключитесь в макрос Company Address Rel и выделите инструкции, которые формируют шрифт с помощью инструкции With…End With. В меню Правка (Edit) выберите команду Вырезать (Cut).
· Щелкните ниже инструкции End Sub в конце макроса Company Address Rel, затем выделите Sub Company Font ().
· Выполните команду Правка/Вставить (Edit/Paste) для вставки тела процедуры, в конце которой должна быть инструкция End Sub.
· После инструкции Active Cell.Formula R1C1= “Региональная Торговая Компания АВС” сделайте щелчёк и вставьте название процедуры Company Font, после чего два макроса будут иметь вид:
Sub Company Address Rel ()
Active Cell.Formula R1C1= “Региональная Торговая Компания АВС”
Company Font
Active Cell.Offset (1,0).Range(“А1”).Select
Active Cell.FormulaR1C1= “Прспект правды 157”
Active Cell.Offset (1,0).Range(“А1”).Select
Active Cell.FormulaR1C1= “49083, Днепропетровск, Украина”
End Sub
Sub Company Font ()
With Selection.Font
.Name = “Arial”
.Font Style = “полужирный курсив”
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xl Underline Style None
.Color Index = xl Automatic
End With
End Sub