Пример в этой статье демонстрирует, как использовать элемент управления ScrollBar для прокрутки и масштабирования листа в диалоговом окне. На скриншоте показано окно (UserForm), где можно изменить масштаб рабочего листа от 10% до 400% с помощью ScrollBar, расположенного в верхней части диалогового окна. Два ScrollBar в нижней части окна позволяют прокручивать лист по горизонтали и вертикали.
Инициализация элементов управления
При просмотре кода, вы заметите, что он не так уж сложен (к тому же есть пояснения к каждой строке макроса). Элементы управления инициализируются в процедуре UserForm_Initialize, как показано ниже на скриншоте:
Эта процедура устанавливает значения различных свойств элементов управления ScrollBar на основе данных, полученных из активного окна.
Управление масштабом
Когда используется элемент управления scbZoom, выполняется процедура scbZoom_Change, которая приведена ниже. Эта процедура устанавливает значение свойства Zoom объекта ActiveWindow равным значению свойства Value элемента управления ScrollBar. Также изменяется текст подписи, который отображает текущий масштаб рабочего листа.
Прокрутка листа
Прокрутка листа осуществляется с помощью двух процедур, которые устанавливают значения свойств ScrollRow и ScrollColumns объекта ActiveWindow равными значениям свойств Value элементов управления ScrollBar.
Из обычного модуля вызываем форму:
и "сажаем" на кнопку Вызвать форму:
При желании можно чуть видоизменить код. Так, можно использовать событие Scroll вместо Change в предыдущих процедурах.
И просто переносите код:
Те же самые действия проверните и с процедурами:
- Private Sub scbColumns_Change
- Private Sub scbRows_Change
Или чтобы использовать событие Scroll, просто измените название процедуры, переименовав Change в Scroll.
Разница заключается в том, что событие Scroll срабатывает при прокрутке и масштабировании документа.
Примечание. Если на листе Excel нет никаких данных, то прокрутка листа не осуществляется. Пустой лист можно прокручивать если закомментировать следующие строки кода:
- .Max = ActiveSheet.UsedRange.Columns.Count
- .Max = ActiveSheet.UsedRange.Rows.Count
Для того, чтобы поиграться с кодом, скачайте файл-пример ✔.