Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Создание контекстного меню для кнопки

    Программное создание контекстного меню для кнопки ActiveX с помощью кода VBA Excel. Добавление кнопки на рабочий лист.

    Контекстное меню для кнопки

    С помощью VBA Excel можно заставить кнопку запускать одну процедуру из нескольких на выбор, если создать для неё контекстное меню. Открывается контекстное меню кликом на объекте правой кнопкой мыши.

    В этой статье разберём, как:

    1. Программно добавить кнопку из коллекции элементов управления ActiveX на рабочий лист Excel.
    2. Создать для кнопки контекстное меню с пунктами Код 1, Код 2, Код 3 и связать пункты меню с процедурами Primer1, Primer2, Primer3.
    3. Привязать контекстное меню к созданной кнопке с реагированием на правый клик мышью.

    Добавление кнопки ActiveX на лист

    Кнопку можно добавить вручную, но мы создадим её с помощью VBA Excel.

    Пояснения:

    • OLEObjects.Add — добавляет элемент ActiveX.
    • ClassType — тип элемента (указываем кодовое выражение для кнопки).
    • Left, Top, Width, Height — позиция и размер элемента.
    • Caption — текст на кнопке.
    • Кнопка добавляется на активный лист — ActiveSheet (вы можете указать лист явно).

    Код размещается в стандартном модуле.

    Создание контекстного меню

    Теперь создадим собственное контекстное меню с тремя пунктами: Код 1, Код 2, Код 3, и привязкой к этим пунктам процедур Primer1, Primer2, Primer3.

    Код размещается в стандартном модуле.

    Привязка контекстного меню к кнопке

    Чтобы при правом клике по кнопке ActiveX открывалось наше контекстное меню, нужно обработать событие кнопки MouseDown.

    Самый простой вариант

    Код размещается в модуле листа, на котором будет создана кнопка.

    Защита от отсутствия меню

    Если по какой-то причине меню ещё не создано (или было удалено), указанный выше код вызовет ошибку. Лучше добавить проверку на отсутствие контекстного меню:

    Код размещается в модуле листа, на котором будет создана кнопка.

    Процедуры, вызываемые из меню

    Добавим процедуры, которые будут выполняться при выборе пунктов меню:

    Код размещается в стандартном модуле.

    Инициализация

    Чтобы всё работало корректно, выполните инициализацию:

    Код размещается в стандартном модуле. Обе процедуры можно запустить и по отдельности из редактора VBA.

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

    Отображение контекстного меню для кнопки ActiveX:

    Контекстное меню для кнопки ActiveX

    Результат нажатия пункта «Код 1»:

    Сообщение о запуске кода из контекстного меню

    Примечания

    • Контекстное меню создаётся постоянное. Если нужно временное меню, которое исчезает при закрытии Excel, замените Temporary:=False на Temporary:=True.
    • Вы можете добавить макрос для клика левой кнопкой мышы.
    • Элементы ActiveX работают только при включённых макросах в параметрах Excel.

    Добавление контекстного меню к элементам управления ActiveX с помощью VBA позволяет существенно расширить стандартный интерфейс программы Excel.


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