VBA. Лабораторна робота 5.
Excel. Об’єктна модель Excel.
Об'єкти, властивості й методи
Кожний об'єкт Excel має у своєму розпорядженні набір властивостей (properties) і методів (methods). Прикладами об'єктів в Excel є книги, аркуші, діаграми, шрифти й т.п. Сюди включаються 192 об'єкта, у тому числі приховані й застарілі.
Властивості
Термін властивість у цьому випадку використовується у тому ж контексті, що й у звичайній українській мові. Це особливість, атрибут або характеристика об'єкта. Наприклад, об'єкт Worksheet має 55 властивостей, у число яких входять Cells, Mate, ProtectionMode і UserRange. Значення властивості може належати до будь-якого дійсного типу даних, скажемо, Integer, Single, String або навіть до одного з об'єктних типів даних.
Якщо значення властивості належить до типу Integer, воно називається цілочисельним. Цілочисельні властивості настільки поширені, що компанія Microsoft створила велику кількість вбудованих перечислень (їхнє число досягає 152, з 1266 індивідуальними константами), що дозволяють привласнювати цим значенням символьні імена. Наприклад, властивість Calculation об'єкта Application може приймати будь-яке значення з наступного перерахування:
Enum XlCalculation
xlCalculationManual = 4135
xlCalculationAutomatic = -4105
xlCalculationSemiatomatic = 2
End Enum
Значення властивості може бути об'єктом. Наприклад, властивість ActiveChart об'єкта Workbook повертає об'єкт Chart, що має свій власний набір властивостей і методів.
Тому що об'єкт Chart можна отримати з об'єкта Workbook, його називають дочірнім (child object). Відповідно, об'єкт Workbook буде батьківським (parent) стосовно об'єкта Chart.
Методи
Методом (method) називається дія, що може бути виконана над об'єктом. Наприклад, з об'єктом Worksheet зв'язаний метод Protect, що захищає аркуш від редагування.
У термінах програмування властивості й методи об'єкта є всього лише вбудованими функціями й підпрограмами. Важливо підкреслити, що в деяких випадках можна зіштовхнутися з досить довільним трактуванням даних термінів. Наприклад, елемент Item іноді називається властивістю, а іноді методом, залежно від розглянутого об'єкта. Іноді навіть співробітники компанії Microsoft не можуть точно визначитися.
Властивості й методи мають загальну назву: члени об'єкта (members). Їх не варто плутати з дочірніми об'єктами.
Сімейства об'єктів
При роботі з об'єктною моделлю Excel (втім, як і з будь-якою іншою об'єктною моделлю) часто потрібно обробити кілька об'єктів відразу. Наприклад, кожна комірка у виділеному наборі є окремим об'єктом (об'єкт Range), як і кожен стовпець і рядок у відкритому аркуші. Для таких випадків був розроблений спеціальний об'єкт, названий сімейством (collection object).
Звичайно сімейства складаються з об'єктів одного типу. Наприклад, в об'єктній моделі Excel існує сімейство Rows, у яке входять всі рядки розглянутого аркуша. Для кожного відкритого аркуша існує своє сімейство Rows. Властивості й методи об'єкта Collection сконструйовані з урахуванням необхідності керування сімейством.
У загальному випадку пізнати сімейство об'єктів можна по його назві, що являє собою множину від назви вхідних у сімейство об'єктів. Наприклад, набір Worksheets містить об'єкти Worksheet. Однак із цього правила існує ряд виключень. Наприклад, набір Rows містить об’єкти Range. В об'єктній моделі Excel не існує таких об'єктів, як Cell, Row або Column. Замість них використовується об'єкт Range.
Сімейства повсюдно зустрічаються в об'єктній моделі Office. Більше того, до них належить майже половина всіх об'єктів об'єктної моделі Excel. У табл. 9.1 перераховані найбільше часто використовувані в Excel сімейства.
Таблиця 9.1. Деякі сімейства об'єктної моделі Excel
Areas FormatConditions Series Collection
Axes LegendEntries Sheets
Borders Names Windows
ChartObjects PivotFields Workbooks
Charts PivotTables Worksheets
DataLabels Points
Filters Range
Ще раз підкреслимо, що сімейство являє собою всього лише спеціальний тип об'єктів, що задовільняє наступним вимогам:
Наявність властивості Count, що повертає число об'єктів набору. Цю властивість неможливо відредагувати вручну, вона автоматично оновлюється редактором VBA.
Наявність методу Add, що дозволяє додавати в сімейство нові об'єкти.
Наявність методів Remove, Close і Delete або їм подібних, що дозволяють видаляти об'єкти із сімейства.
Наявність методу Item, що дає доступ до будь-якого об'єкта сімейства. Об'єкт при цьому звичайно визначається по імені або по індексу.
Перераховані вище вимоги не є суворими. Існують як сімейства, що не володіють будь-якою із зазначених властивостей, так і сімейства з безліччю додаткових властивостей і методів. Наприклад, сімейства Areas і Borders не мають метод Add, тобто користувач не має змоги додавати туди нові об'єкти.
В Excel існують і дуже складні сімейства, що володіють рядом властивостей і методів, властивих винятково типу об'єктів, що у них утримуються. Наприклад, із сімейством Sheet пов'язані 10 властивостей і 8 методів. Деякі з них, наприклад метод PrintOut, включені спеціально, щоб дати можливість одночасно обробляти всі вхідні в сімейство аркуші. У цьому випадку під терміном sheet мається на увазі як аркуш, що містить звичайні дані, так і аркуш із діаграмою.
Нумерація членів сімейства
Нумерація членів сімейства може починатися як з нуля, так і з одиниці. Більшість сімейств в Excel і в VBA відноситься до другого виду. Але деякі більш старі сімейства мають нумерацію, що починається з нуля. Я думаю, що фірма Microsoft одержала безліч скарг із приводу наявності таких сімейств, і тому було вирішено поміняти їхню нумерацію.
Перед звертанням до членів сімейства по номеру важливо визначити, до якого виду це сімейство відноситься. У деяких випадках необхідну інформацію можна знайти в довідковій системі VBA, але простіше скористатися зразком коду. Наприклад, код:
For i = 1 To Selection.Cells.Count
Debug.Print Selection.Cells(i).Value
Next i
повністю коректний, тому що нумерація сімейства Cells починається з одиниці. Однак нумерація сімейства UserForm, в яку входять всі нестандартні діалогові вікна, завантажені в цей момент, починається з нуля, тому код
For i = 1 To UserForms.Count
Debug.Print UserForms(1).Value
Next i
приведе до появи повідомлення про помилку. Правильний код виглядає так:
For i = 0 To UserForms.Count -l
Debug.Print UserForms(i).Value
Next i
Він повідомляє про кількість завантажених в активний проект нестандартних діалогових вікон.
Ієрархія об'єктної моделі
Той факт, що деякі об'єкти Excel включені в інші об'єкти, має першорядну важливість і додає в об'єктну модель дуже корисну структуру.
У процесі читання різних джерел створюється враження, що не існує однозначної відповідності між батьківськими й дочірніми об'єктами. У нашому випадку, якщо об'єкт А має властивість або метод, що повертає об'єкт В, то об'єкт А буде батьківським відносно об'єкта В. Наприклад, об'єкт Range має властивість Font, що повертає об'єкт Font. Відповідно, об'єкт Range є батьківським стосовно об'єкта Font. При цьому останній є дочірнім також відносно об'єкта ChartArea. Тобто число предків і нащадків об'єкта необмежено.
Не варто розуміти аналогію предок-нащадок дослівно. Пам’ятайте, що ієрархія об'єктів наповнена замкнутими співвідношеннями предок-нащадок. Наприклад, об'єкт Range є дочірнім відносно об'єкта Worksheet, а об'єкт Worksheet - відносно об'єкта Range. У більшості моделей багато об'єктів мають властивості, які повертають самий верхній об'єкт в ієрархії моделі. В об'єктній моделі Excel практично кожен об'єкт має властивість Application, що повертає об'єкт Application, розташований на верхньому рівні ієрархії. Відповідно, практично кожен об'єкт у цьому випадку можна вважати батьківським відносно об'єкта Application.
Ієрархія об'єктів в об'єктній моделі часто зображується у вигляді деревоподібної структури, невелика частина якої показана на рис.9.1

Рис. 9.1. Частина об'єктної моделі Excel. Тег <v> означає, що об'єкт вперше з'явився у версії X додатка Excel
Синтаксис об'єктної моделі
Прийшов час обговорити базовий синтаксис, що використовуєтся при програмуванні об'єктної моделі.
Посилання на властивості й методи об'єкта здійснюються досить просто. Якщо objVar - змінна об'єкта, а AProperty - властивість цього об'єкта, то доступ до читання й редагування даної властивості здійснюється в такий спосіб: objVar.AProperty(необхідні параметри)
Наприклад, наступний код задає шрифт у першому ряді активного аркуша:
' Опис змінної об'єкта
Dim rng As Range
' Зіставлення змінної rnd першого ряду
Set rng = ActiveSheet.Rows(1)
' Вказання імені шрифту
Rng.Font.Name = “Arial”
Останній рядок коду активує дві властивості; властивість Font змінної rng повертає об'єкт Font, властивості Name якій привласнене значення Arial.
Метод AMethod для об'єкта objVar можна викликати за допомогою інструкції:
objVar.AMethod (необхідні параметри)
Зверніть увагу, що в цьому випадку використовується практично той самий синтаксис, що й при виклику звичайних підпрограм і функцій. Просто тепер разом з ім'ям об'єкта