Розуміння об'єктної моделі Excel
Свайпніть щоб показати меню
Кожен рядок VBA, який ви коли-небудь напишете в Excel, є реченням про об'єкти: щось існує (Application, Workbook, Worksheet, Range), і ви або зчитуєте одну з його властивостей, або просите виконати один із його методів. Як тільки ця ієрархія стане зрозумілою, решта мови — це переважно словниковий запас.
Зчитування ієрархії
- Application — уся запущена копія Excel; вершина кожної ієрархії;
- Workbooks — колекція всіх відкритих файлів; окремий файл — це Workbook, наприклад,
Section_1_VBA_Intro.xlsm; - Worksheets — колекція вкладок у книзі; окрема вкладка — це Worksheet, наприклад, "Employees";
- Range — одна клітинка, блок клітинок, цілий рядок або стовпець;
- Cells / Value — фактичні дані, що містяться в Range.
Рідко потрібно вводити весь ланцюжок від Application донизу — VBA припускає, що мається на увазі активна книга та активний аркуш, якщо не вказано інше, — але явне зазначення об'єктів відрізняє ненадійний код від надійного. Порівняйте два способи запису однієї й тієї ж інструкції:
' Fragile — depends on whatever sheet happens to be active
Range("F2").Value = 65000
' Reliable — states exactly which workbook and sheet, no matter what's on screen
ThisWorkbook.Worksheets("Employees").Range("F2").Value = 65000
Друга версія буде працювати навіть якщо у користувача відкрито ще три книги та вибрано інший аркуш — звичка, яка має велике значення, коли ваші макроси стають довшими за кілька рядків. Ви постійно використовуватимете ThisWorkbook.Worksheets("SheetName") у такому вигляді протягом усього курсу.
Навігація по об'єктних зв'язках у Вікні негайного виконання
Вікно негайного виконання (Вигляд → Вікно негайного виконання або Ctrl+G у VBE; ^ ⌘ G на Mac) дозволяє тестувати окремий рядок коду без обгортання його у Sub.


Введіть рядок, що починається зі знака питання, і натисніть Enter, щоб одразу побачити результат. Спробуйте ці команди для Section_1_VBA_Intro.xlsm:
?ThisWorkbook.Name
?ThisWorkbook.Worksheets("Employees").Range("B3").Value
?ThisWorkbook.Worksheets("Employees").Range("A1").CurrentRegion.Address
?ThisWorkbook.Worksheets.Count
Третій рядок знайомить з властивістю CurrentRegion, яка розширюється від однієї клітинки до цілого суміжного блоку даних навколо неї.
Завдання
- У Вікні негайного виконання напишіть один рядок, який виводить Посаду
Olivia Brown(рядок 4) без попереднього вибору комірки — зверніться до неї безпосередньо через ієрархію об'єктів. - Напишіть другий рядок, який виводить кількість рядків у таблиці Employees за допомогою
CurrentRegion.Rows.Count.
Зверніться так: ThisWorkbook.Worksheets("Employees").Range("D4").Value — рядок 4 це Olivia Brown, стовпець D — Посада.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат