Хотите, чтобы пользовательская форма автоматически разворачивалась на весь экран при открытии? Это можно сделать двумя простыми способами.
Пользовательская форма на весь экран
Иногда для более удобного пользовательского взаимодействия требуется, чтобы форма в VBA Excel открывалась сразу на весь экран. Это особенно актуально при создании полноценного интерфейса пользователя, для усиления иммерсивности приложения и создания спецэффектов. Ниже рассмотрены два практических способа, как добиться этого с помощью кода VBA Excel.
Способ 1: через объект Application
Первый способ основан на использовании свойств объекта Application
для получения размеров основного окна Excel в полноэкранном режиме и установки этих размеров для UserForm.
Пример кода:
1 2 3 4 5 6 7 8 |
Private Sub UserForm_Initialize() With Application .DisplayFullScreen = True 'Включаем полноэкранный режим приложения Excel Me.Width = .Width 'Устанавливаем ширину формы по ширине приложения Me.Height = .Height 'Устанавливаем высоту формы по высоте приложения .DisplayFullScreen = False 'Отключаем полноэкранный режим приложения Excel End With End Sub |
Преимущества:
- Простая реализация, не требующая подбора каких-либо коэффициентов.
- Работает при любом масштабировании экрана и других влияющих параметрах.
Недостатки:
- Визуальные «мелькания» программы Excel при включении и отключении полноэкранного режима.
- В старых версиях Excel свойство
.DisplayFullScreen
может не поддерживаться. В этом случае, как альтернативу, можно использоватьApplication.WindowState = xlMaximized
перед установкой размеров формы иApplication.WindowState = xlNormal
после.
Способ 2: с использованием WinAPI
Второй способ использует функцию Windows API GetSystemMetrics
, позволяющую получить точные размеры экрана. Это позволяет избежать переключений между режимами Excel и даёт больше контроля над отображением формы.
Подключение функции WinAPI:
Разместите код функции WinAPI в стандартном модуле, в модуле формы она работать не будет:
1 |
Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long |
Ключевое слово PtrSafe необходимо для корректной работы в 64-битных версиях Office.
Основной код формы:
Этот код размещается в модуле формы (UserForm
):
1 2 3 4 5 6 7 8 |
Private Sub UserForm_Initialize() Dim k As Single k = 1.99 With Me .Width = GetSystemMetrics(0) / k 'Получаем ширину экрана .Height = GetSystemMetrics(1) / k 'Получаем высоту экрана End With End Sub |
Преимущества:
- Нет визуальных эффектов в виде «мелькания» основного окна Excel при запуске формы.
- Прямая работа с системными размерами экрана.
Недостатки:
- Требуется использование функции Windows API и ее объявление в стандартном модуле.
- Необходимость подбора коэффициента
k
для корректного отображения формы во весь экран, который может отличаться в зависимости от настроек масштабирования монитора и, возможно, каких-либо других условий.
Коэффициент k
необходим, чтобы учесть масштабирование экрана, которое часто установлено на 125%, 150% или выше. Возможно, что-то еще влияет, кроме масштабирования. У моего монитора масштабирование составляет 150%, но форма разворачивается на весь экран при k = 1.99, а не при k = 1.5.
Заключение
Оба метода позволяют развернуть форму UserForm
на весь экран при запуске. Выбор между ними зависит от ваших приоритетов. Если простота реализации важнее, а кратковременное «мелькание» приложения не является критичным, используйте первый способ со свойствами Application
. Если же вам нужна максимально плавная работа без визуальных артефактов, и вы готовы потратить немного времени на подбор коэффициента k
, второй способ с использованием WinAPI будет предпочтительнее.