Автоматическая фиксация положения формы в окне Excel с помощью кода VBA. Фиксация положения формы с кнопками часто используемых макросов.
Для чего это нужно?
Если при работе в Excel часто приходится обращаться к какой-либо форме, например с кнопками вызова часто используемых макросов и/или открытия каких-либо файлов, ее можно отобразить в немодальном окне. А для того, чтобы открытая форма не мешалась перед глазами, ее можно закрепить на постоянное место в окне рабочей книги.
Наиболее подходящим местом для закрепления формы, по моему мнению, является верхний правый угол.
Я использовал такую кнопочную форму:

Фиксация положения формы
Разместите следующие процедуры в указанных программных модулях:
1️⃣ В стандартный модуль:
|
1 2 3 4 5 6 7 |
Sub UserFormPosition() With UserForm1 'Задаем расположение формы (в правом верхнем углу) .Top = ActiveWindow.Top + 40 .Left = ActiveWindow.Left + ActiveWindow.Width - .Width - 20 End With End Sub |
Числовые коэффициенты отодвигают форму от краев окна. Сверху — чтобы не были закрыты кнопки управления окном приложения, а справа — просто так, для лучшего вида.
2️⃣ В модуль листа «Лист1»:
|
1 2 3 4 5 6 7 8 9 10 |
'Загружаем форму при активации листа "Лист1" Private Sub Worksheet_Activate() UserForm1.Show 0 Call UserFormPosition End Sub 'Выгружаем форму при деактивации листа "Лист1" Private Sub Worksheet_Deactivate() Unload UserForm1 End Sub |
3️⃣ В модуль книги:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
'Загружаем форму при открытии книги, если нужно Private Sub Workbook_Open() If ActiveSheet.Name = "Лист1" Then UserForm1.Show 0 Call UserFormPosition End If End Sub 'Перемещаем форму при изменении размеров окна Excel Private Sub Workbook_WindowResize(ByVal Wn As Window) Call UserFormPosition End Sub |
Как это работает?
- При открытии книги, если активным является «Лист1», форма автоматически загружается и размещается в правом верхнем углу.
- В открытой книге: при выборе листа «Лист1» — форма отображается, при выборе любого другого листа — форма закрывается.
- При изменении размеров окна активной книги открытая форма будет перемещаться вслед за правым верхнем углом.
Примечания
- При перемещении окна Книги в пределах экрана вручную, форма будет оставаться неподвижной. Чтобы вернуть ее в свой правый верхний угол, достаточно выбрать другой лист и вернуться на «Лист1».
- Замените в процедурах имя «Лист1» на имя своего листа.
- Для непредвиденных случаев на листе с формой разместите кнопку для прямого вызова этой формы.
- Проверено в Excel 2016. Я работал с такой формой в Excel 2000, но там устанавливал расположение кнопочной формы вручную (которое сохранялось при следующих вызовах), выбрав в свойствах формы:
StartupPosition = 0 - Manual.