Введение в VBA: Объектная модель VBA (Часть 2 из 3)

Иерархия объектов — соединение точек

What do the Dots Mean in VBA

Объекты VBA организованы в иерархию, что облегчает их использование. В верхней части этой иерархии находится приложение Excel. Все объекты в Excel являются членами или подчиненными элементами объекта Application.

Excel Object Hiearchy - Intro to VBA

Вот полная строка кода, которая начинается на уровне Application.

Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Range(«A1»).Value = 100

Точки между словами позволяют нам ссылаться на членов иерархии сверху вниз. Таким образом, Application является верхним уровнем иерархии, а Workbooks является членом Application. Свойство Workbooks () возвращает коллекцию всех открытых книг на компьютере.

Workbooks Member of Application Object - Intro to VBA

Мы ссылаемся на имя книги в свойстве Workbooks, чтобы вернуть объект книги. Это может показаться странным, но в основном это позволяет нам сообщать VBA, на какой объект мы ссылаемся.

Ниже мы ссылаемся на свойство Worksheets, которое возвращает коллекцию всех листов в книге. Рабочие листы являются частью объекта Workbook.

Worksheets Member of Workbook Object - Intro to VBA

Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»)

Опять же, мы указываем имя листа «Sheet1» в свойстве Worksheets для возврата объекта листа.

Вы можете увидеть, как мы проходим путь к объекту Range и значению ячейки A1.

Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Range(«A1»).Value = 100

Важно отметить, что у каждого объекта есть много разных членов, которые мы можем использовать для ссылки на различные объекты. Например, членами объекта «Рабочий лист» могут быть: «Диапазоны», «Сводные таблицы», «Фигуры», «Диаграммы», «Список» и т.д.

Как пример, подумайте обо всех объектах на вашей кухне. Вероятно, существуют десятки, если не сотни объектов, которые имеют свойства и могут выполнять действия. Эти объекты могут быть членами больших коллекций.

Object Hiearchy in the House

Нож шеф-повара входит в коллекцию всех принадлежащих вам кухонных принадлежностей. Каждый из этих инструментов имеет разные свойства и может выполнять разные действия.

Наша иерархия объектов для ножа на кухне может выглядеть следующим образом.

House.Rooms(«Kitchen»).Areas(«Knife Block»).Tools(«Chef Knife»).Clean = True

Видите, как мы начинаем с дома и приближаемся, чтобы найти нож, а затем устанавливаем его свойства.

Квалификационные объекты в VBA

Can you turn the lights on

Если вы состоите в браке или живете с близким другом, то вы уже много знаете о соответствующих объектах.

На днях мы с женой были на кухне и она сказала: «Можешь включить свет, пожалуйста?»

Я сказал: «Конечно!» И включил кухонный свет.

Я сделал некоторые предположения о том, о каком свете она говорила, потому что мы оба были на кухне, а на нашей кухне только один свет.

Ей не нужно было говорить: «Не могли бы вы включить свет на кухне, которая находится над раковиной и управляется настенным выключателем?» Окружающая среда, в которой мы оба находились, соответствовала контексту, и она смогла сократить свой вопрос.

VBA также позволяет нам делать эти предположения при ссылках на объекты. Если вы не указываете рабочую книгу или рабочий лист в строке кода, то VBA предполагает, что вы ссылаетесь на активную рабочую книгу и активный рабочий лист.

Это позволяет нам сократить наш код, облегчая чтение и запись.

  1. Полная запись — Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Range(«A1»).Value = 100
  2. Сокращенная (предполагает ActiveSheet и ActiveWorkbook) — Range(«A1»).Value = 100
Fully Qualified Line of Code in VBA

Первая строка кода считается «полной», поскольку она ссылается на все родительские элементы оцениваемого объекта.

Вторая строка кода будет работать так же, как и первая, если активной книгой была Книга1, а активным листом — Лист1.

Хотя сокращение нашего кода может облегчить нашу жизнь, оно также может привести к проблемам!

Предположения могут привести к неприятностям и вызвать ошибки!

Несколько дней назад я был в спальне, и моя жена кричала из кухни: «Эй, я могу выбросить это ???» Теперь, хотя я только что вышел из кухни, я не знал, о чем она говорила. Это когда-нибудь случалось с тобой?

Что еще более важно, это когда-либо приводило к спору или грубому ответу? Я знаю, что я виновен! Ну, я не поняла ее вопрос, потому что у меня не было контекста. Иногда у нас такие близкие отношения, что мы думаем, что наш близкий друг может читать наши мысли и видеть нашими глазами, и мы делаем предположения, которые могут превратиться в недоразумение. Благослови мою жену за веру, что я умнее, чем на самом деле… 🙂

У VBA точно такие же проблемы с недоразумениями. Они вызывают ошибки и могут быть опасны! Вы должны быть осторожны с тем, как вы сокращаете свои вопросы и команды.

Например, следующая строка кода очистит значения и формулы всех ячеек на активном рабочем листе.

Cells.ClearContents

Если вы не скажете VBA, какой лист, из какой книги вы хотите очистить, это может означать катастрофу! Вы не можете отменить это действие.

Таким образом, вы хотели бы уточнить эту строку кода, чтобы сообщить VBA, на какую рабочую книгу и рабочий лист вы ссылаетесь.

Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Cells.ClearContents

Эта строка кода предотвращает любые недоразумения и возможные бедствия.

Что дальше?

В следующей статье мы рассмотрим несколько советов по чтению, написанию и запуску вашего кода. Мы также рассмотрим некоторые способы повышения эффективности вашего кода.

Предыдущая статья:
Введение в VBA: Макросы. Объяснение на кухне (Часть 1 из 3)

Следующая статья:
Введение в VBA: Чтение, написание и запуск макроса (часть 3 из 3)

Оцените статью
Добавить комментарий

  1. Александр

    Доброй ночи. Сижу и пытаюсь осознать эту схему. Я самоучка в программинге и для меня в программировании существует класс и через NEW мы создаем из него объект, предположим «Х». Потом вызываем его свойства или методы через точку. А тут получается такая цепочка:
    объект.свойство.свойство.метод
    вот пример (Application.ActiveWorkbook.XmlMaps.Add («D:\Docs\XML\CS.xml»))
    VBE подсвечивает ActiveWorkbook и XmlMaps как свойства. 2 свойства в подряд.
    Как такое понимать? Спасибо

    Ответить