Редагування макросів

Припустимо, що ви записали макрос, який вводить ряд заголовків, встановлює для них шрифт і малює рамку Потім ви виявляєте, що пропустили якийсь крок чи щось зробили неправильно, наприклад застосували не той тип кордону Що робити в цьому випадку

Щоб додати інструкції в існуючий макрос, ви повинні записати дії у допоміжний макрос і потім скопіювати інструкції з нього в змінюваний макрос Так, щоб включити в макрос Адрес_Компаніі крок, який встановлює шрифт для назви фірми, виконайте такі дії

1 Перейдіть на лист, що містить введений раніше адресу, і виділіть комірку А6 з назвою фірми

2 У меню Сервіс виберіть команду Макрос і потім – Почати запис, щоб відкрити діалогове вікно Запис макросу Введіть назву МасгоТеmp в полі Імя макросу та натисніть кнопку ОК Excel виведе на екран панель інструментів Зупинка запису

3 Виберіть у меню Формат (Format) команду Осередки (Cells) Потім в списку шрифтів на вкладці Шрифт (Font) діалогового вікна, виберіть шрифт Arial (або інший встановлений шрифт) розміром 14 пунктів і налаштуйте його як напівжирний курсив Потім натисніть кнопку ОК, щоб застосувати це форматування

4 Клацніть на кнопці Зупинити запис панелі інструментів Зупинка запису

5 У меню Сервіс виберіть команду Макрос У діалоговому вікні Макрос виберіть імя

MacroTemp і натисніть кнопку Змінити (Edit)

Вікно проекту як і раніше містить список обєктів, що належать активній книзі: три листа, обєкт, що представляє книгу в цілому, і один модуль Але у вікні, що показує вміст модуля, тепер вже два макроси, що видно з рис 318

Рис 318Макрос MacroTemp, що містить щойно записані інструкції форматування

6 Виділіть всі рядки конструкції With .. End With і потім у меню Edit (Правка)

виберіть команду Сміттю (Копіювати)

7 Прокрутіть вікно вгору, щоб вивести на екран макрос Адрес_Компаніі

8 Клацніть на початку рядка, що містить інструкцію

Range(&quotA7&quot)Select

Потім натисніть клавішу Enter, щоб вставити порожній рядок, і вкажіть точку вставки, клацнувши на початку утворилася рядка

9 У меню Edit (Правка) виберіть команду Paste (Вставити)

10 Прокрутіть вікно до макросу MacroTemp і видаліть цей макрос, від інструкції Sub

no інструкцію End Sub

Тепер текст макросу Адрес_Компаніі виглядає так, як показано далі (за ис-

ключенних коментарів):

Sub Адрес_Компаніі () Range (A6) Select

ActiveCellFormulaR1C1 = Регіональна Торгова Компанія With SelectionFont

.Name = &quotArial Cyr&quot

. FontStyle = напівжирний курсив

.Size = 14

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic End With

Range(&quotA7&quot)Select

ActiveCellFormulaR1C1 = Морська вулиця, 15 Range (A8) Select

ActiveCellFormulaR1C1 = 325 611, Кузнецьк, Росія Range (A9) Select

End Sub

Щоб перевірити роботу зміненого макросу, поверніться в Excel (натисніть клавіші Alt + F11 або клацніть на кнопці Excel на Панелі завдань Windows) і натисніть клавіші Ctrl + Shift + A

Конструкція With .. End With задає ряд властивостей обєкта, в даному випадку – шрифту поточного виділення Ця конструкція являє собою коротку форму запису послідовності інструкцій VBA, які інакше мали б такий вигляд:

SelectionFontName = Arial SelectionFontFontStyle = напівжирний курсив SelectionFontSize = 14

і т д У макросе Адрес_Компаніі обидва обєкти, ActiveCell і Selection, вказують на один і той же діапазон, а саме осередок Аб Оскільки ряд параметрів форматування шрифту можна застосувати до цілого діапазону, Excel використовує ключове слово Selection замість ActiveCell Завдання властивостей всередині структур With .. End With, крім спрощення інструкцій, зменшує час виконання макросу

Абсолютні і відносні посилання в макросах

У макросе Адрес_Компаніі звернення до осередків здійснюється у вигляді абсолютних посилань у форматі «А1», і тому макрос завжди поміщає відформатований адресу фірми в комірку А6

У VBA вказівку на осередки записується у вигляді абсолютних посилань, якщо ви не натиснете кнопку Відносне посилання (Relative Reference) на панелі інструментів

Зупинка запису Після цього кнопка буде виглядати натиснутою, показуючи тим самим, що при подальшій записи макросу будуть використовуватися відносні посилання на клітинки Під час запису макросу ви вправі у час переключатися з відносних посилань на абсолютні і навпаки

Припустимо, що замість занесення назви і адреси фірми в діапазон А6: А8 активного листа ви хочете вставити адресу в клітинку, яка виявиться активною на момент запуску макросу Для цього потрібно створити нову версію макросу Адрес_Компаніі (назвемо його Адрес_КомпанііОтн), де будуть діяти вже відносні посилання, в порядку, описаному нижче

1 Перейдіть в робочий лист і очистіть осередку А6: А8

2 У меню Сервіс виберіть команду Макрос і потім – Почати запис У діалоговому вікні Запис макросу вкажіть Адрес_КомпанііОтн як імя макросу, в поле Поєднання клавіш введіть строчную букву а і в полі Опис – текст Введення адреси фірми в довільну комірку Натисніть кнопку ОК, і Excel виведе на екран панель інструментів Зупинка запису

3 На панелі інструментів Зупинка запису клацніть на кнопці Відносне посилання

4 У меню Формат виберіть команду Осередки Задайте 14-пунктний шрифт Arial і напівжирний курсив, а потім натисніть кнопку ОК

5 Введіть текст Регіональна Торгова Компанія У осередок нижче введіть частину адреси Морська вулиця, 15 І в осередок під нею введіть 325611, Кузнецьк, Росія

6 Клацніть на кнопці Зупинити запис

Перевірте створений макрос, виділяючи різні осередки і натискаючи клавіші Ctrl + a Якщо ви перейдіть в VBA, виберете команду Сервіс ► Макрос ► Макроси, знайдете макрос Адрес_КомпанііОтн і натиснете кнопку Змінити, то побачите наступний набір інструкцій:

Sub Адрес_КомпанііОтн () With SelectionFont

.Name = &quotArial Cyr&quot

. FontStyle = напівжирний курсив

.Size = 14

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic End With

ActiveCellFormulaR1C1 = Регіональна Торгова Компанія ActiveCellOffset (1, 0) Range (A1) Select ActiveCellFormulaR1C1 = Морська вулиця, 15 ActiveCellOffset (1, 0) Range (A1) Select ActiveCellFormulaR1C1 = 325 611, Кузнецьк, Росія ActiveCellOffset (1, 0) Range (A1) Select

End Sub

Початковий макрос Адрес_Компаніі вводить адресу фірми в діапазон А6: А8

незалежно від того, яка осередок є активною при його запуску Новий же

макрос своєму розпорядженні адресу, починаючи з активного осередку, незважаючи на те, де вона знаходиться Якщо ви порівняєте ці версії макросу, то побачите, що вони розрізняються тільки інструкціями, що відповідають за виділення осередків Наприклад, новий варіант не містить

інструкції для активізації першого осередку, оскільки вона вже й так виділена

Крім того, щоб зробити активною другий осередок, для початкового макросу була згенерована інструкція

Range(&quotA7&quot)Select

Водночас в новій версії їй відповідає пропозиція

ActiveCellOffset(1, 0)Range(&quotA1&quot)Select

Щоб перейти з активного осередку в наступну, розташовану нижче, клітинку, в новому макросі VBA застосовує до виділеного обєкту метод Offset з двома аргументами, які задають зсув по рядках і по стовпцях Ключове слово Range повертає діапазон, що має ту ж розмірність, що й аргумент методу У даному випадку аргумент А1 визначає діапазон, звужений до одного осередку Нарешті, метод Select виділяє цей діапазон, як і в первинному макросе

Яка форма краще – абсолютна або відносна Абсолютні посилання зазвичай потрібні, якщо ви хочете виконати одне і те ж дію в одному і тому ж місці декількох листів або коли потрібно виконати деяку дію кілька разів в одному і тому ж місці одного листа Відносні посилання зручні, коли ви не обмежуєтеся конкретним діапазоном робочого аркуша

Макроси та процедури

Припустимо, ви створюєте складний макрос і виявили, що, поряд з іншими операціями, він має на увазі завдання, вирішення якого вже було оформлено раніше у вигляді іншого макросу Або припустимо, що завдання, записану як частина макросу, насправді зручніше використовувати у вигляді окремої маленької програми Що стосується нашого макросу Адрес_Компаніі, то, наприклад, було б корисно мати можливість легко і швидко застосовувати формати шрифту, використовувані для назви фірми, до інших елементів на робочому листі

У VBA вдається без праці розділити великий макрос на ряд невеликих або з декількох макросів скомпонувати один великий Макрос, який використовується іншим макросом, називається процедурою Процедури полегшують створення складних макросів, оскільки достатньо написати лише один набір інструкцій, а не повторювати їх знову і знову При зверненні до одного макросу з іншого ви викликаєте процедуру, вказуючи її імя

Як приклад розділимо макрос Адрес_КомпанііОтн на дві частини:

1 Спочатку в Excel виберіть команду Сервіс ► Макрос ► Макроси, потім знайдіть макрос Адрес_КомпанііОтн і натисніть кнопку Змінити Виділіть інструкції, які форматують назва фірми:

With SelectionFont

.Name = &quotArial&quot

. FontStyle = напівжирний курсив

.Size = 14

. Stnkethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.Colorlndex = xlAutomatic End With

2 У меню Edit (Правка) редактора VBA виберіть команду Cut (Вирізати)

3 Клацніть нижче інструкції End Sub наприкінці макросу Адрес_КомпанііОтн, потім введіть Sub Шріфт_Компаніі ()

4 Редактор VBA вставить інструкцію End Sub Додайте порожній рядок між інструкціями Sub і End Sub і в меню Edit (Правка) виберіть команду Paste (Вставити), щоб помістити на її місце вирізані інструкції

Ми створили новий макрос Шріфт_Компаніі, перемістивши інструкції форматування шрифту з макросу Адрес_КомпанііОтн Як вже зазначалося, щоб запустити з одного макросу інший, ви повинні вказати в ньому імя викликається процедури Змініть макрос Адрес_КомпанііОтн так, щоб у ньому був присутній виклик для Шріфт_Компаніі, тобто виконайте наступні дії:

1 Клацніть наприкінці інструкції

ActiveCellFormulaR1C1 = Регіональна Торгова Компанія

Натисніть клавішу Enter, щоб вставити новий рядок

2 Введіть імя Шріфт_Компаніі Після цього наші два макроси повинні виглядати так:

Sub Адрес_КомпанііОтн ()

Шріфт_Компаніі

ActiveCellFormulaR1C1 = Регіональна Торгова Компанія ActiveCellOffset (1, 0) Range (A1) Select ActiveCellFormulaR1C1 = Морська вулиця, 15 ActiveCellOffset (1, 0) Range (A1) Select ActiveCellFormulaR1C1 = 325 611, Кузнецьк, Росія ActiveCellOffset (1, 0) Range (A1) Select

End Sub

Sub Шріфт_Компаніі () With SelectionFont

.Name = &quotArial Cyr&quot

. FontStyle = напівжирний курсив

.Size = 14

.Strikethrough = False

.Superscript = False

End Sub

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic End With

Коли ви запустите макрос Адрес_КомпанііОтн, натиснувши клавіші Ctrl + a, Excel буде послідовно виконувати інструкції цього макросу, починаючи з першої Зустрівши інструкцію, що обертається до процедурі Шріфт_Компаніі, програма перейде до першого рядка цього макросу При досягненні інструкції End Sub наприкінці макросу Шріфт_Компаніі Excel повернеться в точку, розташовану безпосередньо за викликом Шріфт_Компаніі в макросе Адрес_КомпанііОтн, і продовжить виконання останнього, поки не дійде до інструкції End Sub

Особиста книга макросів

При записи макросу Адрес_Компаніі ми запропонували як місця його розташування модуль, що належить активній книзі Але такий макрос стає доступний тільки після відкриття його власної книги

Якщо необхідно, щоб макрос був доступний завжди, збережіть його в особистому книзі макросів Ця книга зазвичай прихована, нови можете вивести її на екран, вибравши в меню Вікно (Window) команду Відобразити (Unhide) і двічі клацнувши на книзі Personal в діалоговому вікні Виведення на екран прихованого вікна книги (Unhide) Якщо особиста книга макросів ще порожня, елемент Personalxls в списку цього вікна не зявиться Тому перед записом будь-якого макросу виберіть пункт Особиста книга макросів (Personal Macro Workbook) у списку, Зберегти в (Store Macro In) діалогового вікна Запис макросу Файл особистої книги макросів Personalxls буде поміщений в папку XLStart Тепер книга Personalxls, як і будь-яка інша, що знаходиться там, буде відкриватися автоматично кожного разу при запуску Excel Оскільки особиста книга макросів завжди доступна при роботі в Excel, має сенс у неї поміщати макроси, які можуть знадобитися вам в будь-яких робочих книгах

Резюме

Прочитавши цю главу, ви навчилися створювати макроси шляхом їх запису Як ви переконалися, запис макросів, як правило, тягне за собою створення надлишкових інструкцій Так, наприклад, в макросе Шріфт_Компаніі рядка

. Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

. Shadow = False

.Underline = xlUnderlineStyleNone

.Colorlndex = xlAutomatic

були зайвими, оскільки нас цікавили тільки основні параметри шрифту: імя, розмір і стиль Якщо видалити ці рядки з макросу, його функціональність аніскільки не постраждає

Раніше в цьому розділі ми наочно показали, що за допомогою VBA можна змінювати властивості обєктів, наприклад параметри шрифту осередку, не виділяючи при цьому саму осередок Проте перед виконанням інструкцій, зачіпають обєкти, завжди здійснюється виділення обєктів, оскільки макроси являють собою не що інше, як просту імітацію дій користувача У міру набуття знань про можливості VBA ви навчитеся більш ефективно організовувати свої макроси

При цьому цілком імовірно, що з часом у багатьох випадках ви віддасте перевагу не записував макроси, а програмувати прямо в VBA Але, швидше за все, іноді ви будете повертатися до запису макросів Обєктна модель Excel містить так багато обєктів, методів, властивостей і аргументів, що практично марно намагатися запамятати їх все Якщо ви не в змозі пригадати, до якого методу, властивості або обєкта слід звернутися в якійсь конкретній ситуації, найпростіший спосіб отримати потрібну інформацію – це включити запис макросу, виконати вручну дії, які ви хочете запрограмувати, а потім переглянути і відредагувати інструкції в редакторі VBA

Джерело: Ефективна робота: Microsoft Office Excel 2003 / М Додж, К Стінсон – СПб: Питер, 2005 – 1088 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*