Посилання на об’єкт у вашому коді VBA важливо, оскільки ви повинні визначити об’єкт, з яким ви хочете працювати в Excel 2016. Зрештою, VBA ще не може читати ваші думки. Ходять чутки, що об’єкт читання думок буде представлений в Excel 2019.
Ви можете одним махом працювати з усією колекцією об’єктів. Однак частіше вам потрібно працювати з певним об’єктом у колекції (наприклад, з певним аркушем у книзі). Щоб посилатися на один об’єкт із колекції, ви вставляєте ім’я об’єкта або номер індексу в дужках після назви колекції, наприклад:
Робочі аркуші (“Аркуш1”)
Зверніть увагу, що назва аркуша береться в лапках. Якщо ви пропустите лапки, Excel не зможе ідентифікувати об’єкт (і вважатиме, що це ім’я змінної).
Якщо Sheet1 є першим (або єдиним) робочим аркушем у колекції, ви також можете використовувати таке посилання:
Робочі аркуші(1)
У цьому випадку число не в лапках. Нижня лінія? Якщо ви посилаєтеся на об’єкт, використовуючи його назву, використовуйте лапки. Якщо ви посилаєтеся на об’єкт, використовуючи його номер індексу, використовуйте звичайне число без лапок.
А як щодо аркушів діаграм? Аркуш діаграми містить одну діаграму. Він має вкладку аркуша, але це не аркуш. Ну, як виявилося, об’єктна модель має колекцію під назвою Charts. Ця колекція містить усі об’єкти аркуша діаграм у книзі (і не включає діаграми, вбудовані в аркуш).
І щоб все було логічним, є ще одна колекція під назвою Таблиці. Колекція Таблиці містить усі аркуші (аркуші та аркуші діаграм) у книзі. Колекція «Таблиці» зручна, якщо ви хочете працювати з усіма аркушами в книзі і вам не важливо, чи є це аркуші чи аркуші діаграм.
Отже, один робочий аркуш з назвою Sheet1 є членом двох колекцій: колекції Worksheets і колекції Sheets. Ви можете посилатися на нього двома способами:
Робочі аркуші (“Аркуш1”)
Аркуші (“Аркуш1”)
Переміщення по ієрархії
Якщо ви хочете працювати з об’єктами Excel, усі вони знаходяться в об’єкті Application. Тому почніть з введення Application .
Кожен інший об’єкт в об’єктній моделі Excel знаходиться під об’єктом Application. Ви дістаєтеся до цих об’єктів, рухаючись вниз по ієрархії та з’єднуючи кожен об’єкт на своєму шляху за допомогою оператора крапки (.). Щоб дістатися до об’єкта Workbook з ім’ям Book1.xlsx, почніть з об’єкта Application і перейдіть до об’єкта колекції Workbooks:
Application.Workbooks(“Book1.xlsx”)
Щоб перейти далі до певного аркуша, додайте оператор крапки та отримайте доступ до об’єкта колекції Worksheets:
Application.Workbooks(“Book1.xlsx”).Worksheets(1)
Ще не досить далеко? Якщо ви дійсно хочете отримати значення з клітинки A1 на першому робочому аркуші книги під назвою Book1.xlsx, вам потрібно перейти ще на один рівень до об’єкта Range:
Application.Workbooks(“Book1.xlsx”).Worksheets(1).Range(“A1”).Value
Коли ви посилаєтеся на об’єкт Range таким чином, це називається повним посиланням. Ви вказали Excel, який саме діапазон ви хочете, на якому аркуші та в якій книзі, і нічого не залишили уяві. Уява хороша в людях, але не дуже в комп’ютерних програмах.
До речі, в іменах робочих книг також є крапка для відокремлення імені файлу від розширення (наприклад, Book1.xlsx). Це просто збіг обставин. Крапка в назві файлу взагалі не має нічого спільного з оператором точки.
Спрощення посилань на об’єкти
Якби від вас вимагали повністю кваліфікувати кожне посилання на об’єкт, яке ви створюєте, ваш код був би досить довгим, і його було б складніше читати. На щастя, Excel надає вам деякі ярлики, які можуть покращити читабельність (і заощадити на введенні тексту). Для початку завжди передбачається об’єкт Application. Є лише кілька випадків, коли має сенс його ввести. Якщо пропустити посилання на об’єкт Application, приклад скорочується до
Робочі зошити(“Книга1.xlsx”).Робочі аркуші(1).Діапазон(“A1”).Значення
Це досить непогане покращення. Але почекайте, є ще. Якщо ви впевнені, що Book1.xlsx є активною книгою, ви також можете пропустити це посилання. Тепер вам належить
Робочі аркуші(1).Діапазон(“A1”).Значення
Тепер ти кудись потрапиш. Ви вгадали наступний ярлик? Це правильно. Якщо ви знаєте, що перший аркуш є поточним активним аркушем, Excel припускає це посилання та дозволяє вам просто вводити
Діапазон (“A1”). Значення
На відміну від того, що деякі люди думають, у Excel немає об’єкта Cell. Клітка просто об'єкт Range , який складається тільки з одного елемента.
Описані тут ярлики чудові, але вони також можуть бути небезпечними. Що робити, якщо ви думаєте, що лише Book1.xlsx є активною книгою? Ви можете отримати помилку або, що ще гірше, отримати неправильне значення і навіть не усвідомлювати, що це неправильно. З цієї причини часто краще повністю кваліфікувати посилання на об’єкт.
Структура With-End With допомагає вам повністю кваліфікувати ваші посилання, але також допомагає зробити код більш читабельним і скорочує введення. Найкраще з обох світів!