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

VBA Excel № 164. Масштабируем и прокручиваем лист Excel из UserForm

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

Пример в этой статье демонстрирует, как использовать элемент управления 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

Для того, чтобы поиграться с кодом, скачайте файл-пример ✔.