Перейти к содержимому
15 000 бонусов на бронирование отелей!
(Реклама. АО "СУТОЧНО". ИНН 7300037501)

VBA Excel. Свойство Application.Caller

    Свойство Application.Caller в VBA Excel. Получение информации о том, как был вызван Visual Basic. Зависимость возвращаемого значения от ситуации.

    Свойство Application.Caller

    Определение свойства

    Application.Caller в VBA Excel — это свойство, которое позволяет узнать, что именно вызвало выполнение текущей процедуры или пользовательской функции.

    Данное свойство может использоваться для определения источника вызова процедуры при работе с:

    • пользовательскими функциями (UDF);
    • макросами, назначенными на кнопки, изображения или фигуры;
    • обработкой событий.

    Возвращаемые значения

    Значение, возвращаемое свойством Application.Caller, зависит от конкретной ситуации (тип возвращаемого значения — Variant):

    Вызывающая сторона Возвращаемое значение
    Пользовательская функция, введённая в одну ячейку Объект Range, соответствующий ячейке с функцией
    Пользовательская функция, которая является частью формулы массива в диапазоне ячеек Объект Range, соответствующий диапазону ячеек с формулой массива
    Макрос, назначенный фигуре или элементу управления формы на рабочем листе Имя фигуры или элемента управления формы
    Кнопка «Выполнить» из диалогового окна «Макрос», элементы управления ActiveX Ошибка

    Важно: свойство Application.Caller не работает с элементами управления ActiveX, размещённых как на рабочем листе, так и на пользовательской форме.

    Примеры с Application.Caller

    Простейшая пользовательская функция

    Если ввести формулу =MyFunc() в ячейку B5, она вернёт $B$5.

    Пример функции с вычислением

    Формула =SumAbove(), введённая в ячейку A10 просуммирует диапазон A1:A9.

    Простейший макрос для кнопки

    Назначьте данную процедуру элементу управления формы, фигуре или изображению, и, при клике, она вернёт имя объекта, запустившего её.

    Результат работы кода:

    Сообщение с именем фигуры

    Безопасная обработка вызова

    Используйте проверку IsError(Application.Caller), если ваш макрос может быть запущен разными способами, иначе при ручном запуске вы получите ошибку выполнения (Run-time error).

    Макрос для множества фигур

    Универсальный макрос для множества фигур, который меняет цвет нажатой фигуры:

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

    Цвет фигуры изменится после закрытия информационного окна MsgBox.

    Пример от разработчиков

    Немного доработанный пример от разработчиков:

    Результат работы кода:

    Сообщение с именем рисунка

    Использование Application.Caller

    Свойство Application.Caller можно использовать в следующих ситуациях:

    • Когда нужна одна универсальная процедура для обработки нажатий на множество разных кнопок или фигур.
    • Когда пользовательская функция должна «знать», в какой ячейке она вычисляется, чтобы считать данные из соседних ячеек (через Offset).
    • Когда вы хотите вести лог (журнал) действий пользователя, фиксируя, откуда именно был запущен код.

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