Пользовательские формы — это важный компонент приложений Excel VBA, предоставляющий пользователям графический интерфейс для взаимодействия с данными. Одним из важнейших аспектов дизайна пользовательских форм является выравнивание и центрирование самой формы на экране, обеспечивающее визуально приятный и удобный интерфейс. В этой статье блога мы рассмотрим различные методы центрирования пользовательской формы в Excel VBA, сопровождаемые примерами кода, иллюстрирующими каждый метод.
Метод 1. Центрирование пользовательской формы на экране
Чтобы центрировать пользовательскую форму по горизонтали и вертикали на экране, вы можете использовать следующий код:
Private Sub UserForm_Initialize()
Me.StartUpPosition = 0 ' Centers the userform on the screen
Me.Left = Application.Left + (0.5 * Application.Width) - (0.5 * Me.Width)
Me.Top = Application.Top + (0.5 * Application.Height) - (0.5 * Me.Height)
End Sub
Метод 2. Центрирование пользовательской формы в окне Excel
Если вы предпочитаете центрировать пользовательскую форму в окне приложения Excel, а не на всем экране, используйте следующий код:
Private Sub UserForm_Initialize()
Me.StartUpPosition = 1 ' Centers the userform within the Excel window
Me.Left = Application.Left + (0.5 * Application.Width) - (0.5 * Me.Width)
Me.Top = Application.Top + (0.5 * Application.Height) - (0.5 * Me.Height)
End Sub
Метод 3: центрирование пользовательской формы на определенном листе
В некоторых случаях вам может потребоваться центрировать пользовательскую форму на определенном листе, а не на экране или в окне Excel. Вот пример центрирования пользовательской формы на листе с именем «Лист1»:
Private Sub UserForm_Initialize()
Me.StartUpPosition = 0 ' Centers the userform on the screen
Me.Left = Worksheets("Sheet1").Range("A1").Left + (0.5 * Worksheets("Sheet1").Range("A1").Width) - (0.5 * Me.Width)
Me.Top = Worksheets("Sheet1").Range("A1").Top + (0.5 * Worksheets("Sheet1").Range("A1").Height) - (0.5 * Me.Height)
End Sub
Метод 4. Центрирование пользовательской формы с помощью функций API
В качестве альтернативы вы можете использовать функции API для центрирования пользовательской формы на экране. Этот метод требует объявления внешних функций и использования функции SetWindowPos. Вот пример:
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Sub UserForm_Initialize()
Dim screenWidth As Long, screenHeight As Long
Dim formWidth As Long, formHeight As Long
Dim formLeft As Long, formTop As Long
screenWidth = GetSystemMetrics(0) ' Returns the screen width
screenHeight = GetSystemMetrics(1) ' Returns the screen height
formWidth = Me.Width
formHeight = Me.Height
formLeft = (screenWidth - formWidth) \ 2
formTop = (screenHeight - formHeight) \ 2
SetWindowPos Me.hWnd, 0, formLeft, formTop, 0, 0, 1 ' Centers the userform
End Sub
В этой статье блога мы рассмотрели несколько методов центрирования пользовательских форм в приложениях Excel VBA. Независимо от того, предпочитаете ли вы центрировать экран, в окне Excel или на определенном листе, эти методы помогут улучшить взаимодействие с пользователем, предоставляя визуально сбалансированный интерфейс. Используя предоставленные примеры кода, вы можете легко реализовать эти методы выравнивания в своих проектах и создавать удобные приложения Excel VBA.