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

VBA Excel. Элемент управления MultiPage

    Создание коллекции страниц с наборами элементов управления на пользовательской форме VBA Excel с помощью элемента управления MultiPage. Примеры кода.

    Элемент управления MultiPage

    UserForm.MultiPage – это элемент управления пользовательской формы, представляющий коллекцию страниц (Pages) как единый набор, позволяющий визуально разделить на отдельные страницы (Page) большой объем взаимосвязанной информации.

    Элемент управления MultiPage

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

    Основное свойство коллекции страниц – Value, которое возвращает индекс текущей (активной) страницы (индексация начинается с нуля).

    Основное событие (метод) коллекции страниц – Change, которое происходит в момент перехода между страницами.

    На каждой странице элемента управления MultiPage размещается свой набор элементов управления. Этим коллекция страниц отличается от элемента TabStrip, у которого на каждой вкладке отображается один и тот же набор элементов управления.

    По умолчанию в редакторе VBA Excel на элементе управления MultiPage отображены 2 вкладки. Добавить, удалить, переименовать или переместить вкладку можно через контекстное меню, кликнув по ярлыку страницы правой кнопкой мыши.

    Контекстное меню ярлыков элемента управления MultiPage

    • New Page – добавление новой страницы;
    • Delete Page – удаление страницы;
    • Rename… – переименование страницы;
    • Move… – перемещение страницы.

    Примеры кода VBA Excel с MultiPage

    Пример 1
    Добавление и удаление страниц элемента управления MultiPage с помощью кода VBA Excel.

    Добавление 3-й, 4-й, 5-й и 6-й страниц к двум, которые уже есть по умолчанию:

    Удаление второй страницы:

    Удаление всех страниц:

    Подгон размеров элемента управления MultiPage полностью под размеры пользовательской формы:

    Пример 2
    Добавление информации о новом сотруднике с помощью элемента управления MultiPage и запись в таблицу на рабочем листе Excel.

    Для реализации примера понадобится следующая таблица:

    Пустая таблица с шапкой на рабочем листе Excel

    и проект пользовательской формы в редакторе VBA Excel:

    Наименования страниц элемента управления MultiPage и текст надписей (Label) заданы непосредственно на проекте пользовательской формы. Кнопку будем переименовывать в коде, так как она используется на 1-й и 2-й страницах для перехода на следующую страницу, а на 3-й странице – для записи данных в таблицу.

    Загрузка пользовательской формы с необходимыми параметрами:

    Смена надписи на кнопке в зависимости от индекса текущей страницы элемента управления MultiPage1:

    Обработка клика по кнопке CommandButton1:

    Заполнение данными страниц элемента управления MultiPage1:

    Записанная строка в таблице Excel после нажатия кнопки «Сохранить»:

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

    5 комментариев для “VBA Excel. Элемент управления MultiPage”

    1. Есть одно замечание. Использование скобок при вызове подпрограмм (sub) без ключевого слова call — это, вообще говоря, ошибка. Скобки в этом случае ставить не нужно.
      Неправильно:

      Правильно:

      Обратите внимание, если вы опускаете ключевое слово call при вызове подпрограммы, VBE (редактор исходного кода) автоматически добавляет пробел после имени процедуры. Пробел — это разделитель, после которого должны быть перечислены через запятую параметры подпрограммы. Если вы ставите скобки, это воспринимается компилятором как выражение. Например, если вам нужно передать параметром ссылку на объект, скобки будут означать, что вместо ссылки будет передано значение свойства по умолчанию этого объекта.

      1. Евгений

        Добрый день! Вы правы, что в строке

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

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

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

        Методы могут как возвращать значения (объекты), так и не возвращать. Пример, когда метод MultiPage.Pages.Add возвращает объект:

        Здесь скобки обязательны, без скобок редактор VBA подсветит строку как ошибочную.

        Если метод MultiPage.Pages.Add использовать без присвоения возвращаемого значения переменной, подойдут оба варианта:

        Некоторые операторы, не возвращающие значения (объекты), не допускают использование скобок, например, оператор Open.

        1. Извините за поздний ответ. Не согласен. Методы — это подпрограммы (sub) и функции (function), относящиеся к классу. Синтаксис их вызова — такой же, как у обычных подпрограмм и функций. На всякий случай напомню, что sub не имеет возвращаемого значения, function — имеет, но его можно игнорировать (обычно), вызывая функцию, как процедуру. У процедур 2 способа вызова:
          1. Классический
          Call MySub(p1, p2)
          при котором используются скобки.
          2. Модный
          MySub p1, p2
          при котором скобки не используются.
          Попробуйте определить процедуру
          Sub MySub(p1, p2)
          End sub
          а затем вызвать её так:
          MySub(p1, p2)
          Компилятор сообщит вам об ошибке синтаксиса. Единственный вариант, позволяющий вам втиснуть скобки в модном способе вызова, это вызов процедуры с одним аргументом:
          Sub MySub1(p1)
          End sub


          MySub1 (p1)
          В этом случае компилятор будет считать скобки частью выражения, служащего аргументом. Если p1 — ссылка на объект, то скобки будут означать, что процедуре нужно передать не саму ссылку на объект, а значение его свойства по умолчанию, что не то же самое. Таким образом, скобки не являются опциональной частью модного синтаксиса вызова процедуры, как вы думаете, их просто не должно быть.
          Документация Microsoft не сообщает прямо, что скобок при модном способе вызова не нужно (для случая нескольких аргументов сообщает, для одного — нет), но на практике это так.

    2. Николай Пащенко

      Как изменить высоту шрифта на вкладке MultiPage1

    Обсуждение закрыто.