Перейти к содержимому
Промокоды на самолёты, поезда, автобусы и отели на Туту.ру >>
(Реклама. ООО «Новые Туристические Технологии». ИНН 7724929270)

VBA Excel. Оператор Set

    Оператор Set и присваивание переменным ссылок на объекты в VBA Excel. Синтаксис оператора Set, примеры использования, причины ошибок, рекомендации.

    Оператор Set в VBA Excel

    В VBA Excel для назначения (присвоения) данных переменной есть два основных оператора: Let и SetLet назначает простые типы данных, а Set — ссылки на объекты.

    Оператор Set назначает переменной ссылку на объект: Workbook, Worksheet, Range, Chart, Dictionary, пользовательский класс и т.д.

    Set не копирует объект, а создаёт ссылку на существующий в памяти объект. Это означает, что переменная и исходный объект указывают на одну и ту же область памяти, и изменение через одну из переменных повлияет на все ссылки (в ситуации, если несколько переменных ссылаются на один и тот же объект).

    Проще говоря, если вы хотите сохранить в переменную ссылку на объект, а не значение какого-либо из его параметров — вам нужен именно оператор Set.

    Синтаксис оператора Set

    Синтаксис оператора Set состоит из следующих элементов:

    Элемент Описание
    объектная_переменная Обязательный параметр. Имя переменной, соответствующее стандартным соглашениям об именовании переменных.
    New Необязательный параметр. Когда New используется с Set, он создает новый экземпляр класса. Ключевое слово New не может использоваться для создания новых экземпляров любого встроенного типа данных и не может использоваться для создания зависимых объектов.
    выражение_объекта Обязательный параметр, если не используется Nothing. Выражение, состоящее из имени объекта, другой объектной переменной того же типа, функции или метода, которые возвращают объект того же типа.
    Nothing Обязательный параметр, если не используется выражение_объекта. Прекращает связь элемента объектная_переменная с любым определённым объектом. При этом освобождаются все системные ресурсы и ресурсы памяти, связанные с ранее указанным объектом, если на него не ссылается другая переменная.

    Виды объектов, требующие Set

    К объектам, требующим оператор Set для присвоения ссылки переменным в VBA Excel относятся:

    • Объекты Excel: ApplicationWorkbookWorksheetRangeChartShapeListObject и др.
    • Объекты других приложений (Word, Access, Outlook) через соответствующие библиотеки.
    • Объекты коллекций: CollectionDictionary.
    • Пользовательские классы (Class Module).
    • Формы и элементы управления: UserFormCommandButtonTextBox.

    Примеры с оператором Set

    Присваивание ссылки на диапазон

    Работа с листами и книгами

    Создание нового объекта через New

    Новый объект с помощью ключевого слова New можно создать двумя способами. Рассмотрим оба способа на примере создания новых объектов Collection.

    Присваивание одной объектной переменной другой

    Использование универсального типа Object

    Типичные ошибки при работе с Set

    Ошибка 91

    Ошибка 91: Переменная объекта или переменная блока With не задана (Object variable or With block variable not set) возникает, когда переменная начинает использоваться без присвоения ей ссылки на объект через оператор Set, или когда ссылка на объект назначается через обычное присваивание.

    Ошибка 91: Object variable or With block variable not set

    Ошибка 13

    Ошибка 13: Несоответствие типов (Type mismatch) возникает, когда переменной присваивается несовместимый тип данных.

    Ошибка 13: Несоответствие типов (Type mismatch)

    Ошибка 424

    Ошибка 424: Требуется объект (Object required) возникает, когда необъектной переменной присваивается объект.

    Ошибка 424: Требуется объект (Object required)

    Рекомендации по работе с Set

    • Всегда включайте Option Explicit в начале модуля. Это заставит компилятор проверять объявления переменных, что предотвратит ошибки типизации.
    • Используйте, когда это возможно, конкретные типы данных, а не Object. Объявление переменной с конкретным типом данных является ранней привязкой, что даёт возможность проверки на этапе компиляции и использования интеллектуального автодополнения и анализа кода (IntelliSense).
    • Не создавайте лишние ссылки. Если объект нужен один раз, можно использовать его напрямую.
    • Освобождайте ресурсы при работе с файловой системой, ADO, Dictionary, FileSystemObject путем присвоения уже ненужным объектным переменным значения Nothing.
    • Используйте имена переменных, отражающие их тип: wb, ws, rng, dict, fso.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.