Найти в Дзене
VBA Excel с нуля

VBA Excel № 147. Как настроить UserForm в центре окна и что такое модальность формы

Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Настройка позиции отображения формы

Свойство StartUpPosition объекта UserForm определяет, где на экране будет показано диалоговое окно. Это свойство можно задать в окне свойств или в коде. По умолчанию, значение этого свойства равно 1 (CenterOwner), что означает отображение окна в центре экрана Excel.

Если вы работаете на компьютере с двумя мониторами, иногда может показаться, что StartUpPosition не работает. Например, если окно Excel открыто на втором мониторе, то диалоговое окно может появиться у левого края основного монитора.

Чтобы всегда отображать диалоговое окно UserForm в центре окна Excel, можно использовать следующий код:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

📌 Скачать файл пример, можно в конце статьи.

Пояснение кода:

With МояФорма - Этот оператор With позволяет работать с объектом МояФорма (вашей формы) и обращаться к его свойствам и методам, не повторяя название объекта каждый раз.

  1. .StartUpPosition = 0 - Устанавливается свойство StartUpPosition для формы в значение 0, что означает, что позиция формы будет задана программно (т.е. вручную, с помощью кода). Значение 0 соответствует константе Manual.
  2. .Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width) - Здесь задаётся горизонтальная позиция (отступ слева) для формы.
  • Application.Left— это расстояние от левой границы экрана до левой границы окна Excel.
  • Application.Width — это ширина окна Excel.
  • (0.5 * Application.Width) — это половина ширины окна Excel, т.е. координата центра окна Excel по горизонтали.
  • (0.5 * .Width) — это половина ширины самой формы.
В результате этого вычисления форма будет расположена по горизонтали таким образом, чтобы её центр совпадал с центром окна Excel.

3. .Top= Application.Top+ (0.5 * Application.Height) - (0.5 * .Height) - Здесь задаётся вертикальная позиция (отступ сверху) для формы.

  • Application.Top— это расстояние от верхней границы экрана до верхней границы окна Excel.
  • Application.Height — это высота окна Excel.
  • (0.5 * Application.Height) — это половина высоты окна Excel, т.е. координата центра окна Excel по вертикали.
  • (0.5 * .Height) — это половина высоты самой формы.
В результате этого вычисления форма будет расположена по вертикали таким образом, чтобы её центр совпадал с центром окна Excel.

4. .Show- Этот метод отображает форму на экране.

End With - Закрывает блок With, завершает работу с объектом МояФорма.

Для проверки! Попробуйте в коде вместо 0.5, заменить на 0.4. Что увидите?

Отображение немодальной формы

По умолчанию, форма в Excel является модальной. Это значит, что пока форма открыта, вы не можете взаимодействовать с рабочим листом (например, редактировать данные). Однако, форму можно сделать немодальной, что позволит продолжать работать в Excel, не закрывая её (форму). Для этого используется следующий код:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Отображение пользовательского диалогового окна на основе значения переменной

Иногда нужно выбрать, какое диалоговое окно UserForm отобразить. Если имя формы хранится в переменной, можно использовать метод Add для добавления объекта UserForm в коллекцию UserForms и затем отобразить его с помощью метода Show. Вот пример:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Загрузка пользовательского диалогового окна

В VBA есть команда Load, которая загружает диалоговое окно в память и вызывает событие Initialize (инициализация) объекта UserForm. Однако до тех пор, пока не будет выполнен метод Show, форма останется невидимой. Для загрузки формы МояФорма используйте следующий код:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Если у вас сложная форма, которую нужно быстро показать, можно заранее загрузить её в память с помощью Load, а затем о отобразить с помощью Show.

О процедурах обработки событий

Когда диалоговое окно появляется на экране, пользователь начинает взаимодействовать с ним - например, выбирает опции в списке или нажимает кнопки. Эти действия называются событиями. Например, нажатие на кнопку вызывает событие Click для этой кнопки. Вам нужно написать процедуры, которые будут выполняться при возникновении этих событий. Такие процедуры называются обработчиками событий.

Процедуры обработки событий размещаются в модуле кода объекта UserForm. Они могут вызывать другие процедуры, которые находятся в стандартном модуле VBA. Вы можете изменять свойства элементов управления формы в коде, пока форма отображается на экране. Например, при выборе элемента в TextBox можно изменить текст в Label.

Пример изменения свойств элементов управления

Допустим, у вас есть элемент управления TextBox1, и вы хотите, чтобы при выборе элемента изменялся текст в Label. Вот пример кода:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Этот код будет выполняться каждый раз, когда пользователь наберёт клавиатурой любые символы в TextBox1, а текст Label1 на эти же набранные символы (кстати код прописан в модуле формы).

На каждый макрос я назначил кнопку (см. скриншот).

Скриншот с моего ноутбука
Скриншот с моего ноутбука

СКАЧАТЬ ФАЙЛ ПРИМЕР