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

VBA Excel № 180. Создание индикатора текущего состояния

Индикатор текущего состояния — это визуальный элемент, который показывает пользователю, как идет выполнение задачи в Excel. Это иногда важно при выполнении длительных операций, чтобы пользователь понимал, что процесс продолжается, а программа не зависла. Кстати анонс данной статьи вместе с файлом примером был выложен на моём телеграмм канале пару дней назад. Многие читатели заранее скачали файл и ознакомились с работой макросов. Рад, что интересуетесь... В этой статье разберем, как создать индикатор текущего состояния, который будет отображать степень завершенности задачи. Рассмотрим создание формы UserForm с графическим индикатором, ее программирование, а также примеры использования в реальных задачах. Когда макрос выполняет долгую задачу, например запись большого количества данных в ячейки, пользователь может подумать, что Excel завис. Чтобы избежать этого, создается индикатор состояния. Если невозможно точно определить, насколько выполнен процесс, индикатор может просто показывать,
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Индикатор текущего состояния — это визуальный элемент, который показывает пользователю, как идет выполнение задачи в Excel. Это иногда важно при выполнении длительных операций, чтобы пользователь понимал, что процесс продолжается, а программа не зависла.

Кстати анонс данной статьи вместе с файлом примером был выложен на моём телеграмм канале пару дней назад. Многие читатели заранее скачали файл и ознакомились с работой макросов. Рад, что интересуетесь...

В этой статье разберем, как создать индикатор текущего состояния, который будет отображать степень завершенности задачи. Рассмотрим создание формы UserForm с графическим индикатором, ее программирование, а также примеры использования в реальных задачах.

Зачем нужен индикатор состояния?

Когда макрос выполняет долгую задачу, например запись большого количества данных в ячейки, пользователь может подумать, что Excel завис. Чтобы избежать этого, создается индикатор состояния. Если невозможно точно определить, насколько выполнен процесс, индикатор может просто показывать, что работа продолжается.

Пример задачи: генерация случайных чисел

Для демонстрации создадим макрос, который:

  • Очищает рабочий лист.
  • Генерирует 20 тысяч случайных чисел.
  • Отображает процесс выполнения через индикатор состояния.

Основной макрос (в обычном модуле)

Макрос, выполняющий задачу, будет вызывать форму UserForm и обновлять ее в процессе работы. Вот пример:

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

Диалоговое окно UserForm будет отображать индикатор хода выполнения макроса.

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

Создание формы UserForm

Форма UserForm будет служить окном для отображения индикатора. Вот пошаговое руководство:

1. Создайте новую форму UserForm.

  • Установите свойству Caption значение «Ход выполнения процесса»? т.е. 0%.

2. Добавьте элемент управления Frame.т.е.

  • Назовите его frmProgress.

3. Добавьте элемент управления Label.

  • Назовите его lblProgress.
  • Удалите текст в свойстве Caption.
  • Измените цвет фона (BackColor) на зеленый.

4. Добавьте еще одну метку (Label).

  • Расположите ее над Frame.
  • Это будет пояснение процесса. Назовите ее lblDescription и введите текст, например: «Генерация данных».

5. Настройте элементы управления.

  • Сделайте Frame "утопленным", изменив свойство SpecialEffect на fmSpecialEffectSunken.
  • Настройте расположение и размеры всех элементов.

После выполнения этих шагов ваша форма должна выглядеть примерно так:

Окно формы UserForm играет роль индикатора хода выполнения процесса
Окно формы UserForm играет роль индикатора хода выполнения процесса

Инициализация формы (в модуле формы)

При загрузке формы необходимо задать начальные параметры:

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

Метод для изменения описания (в модуле формы)

Этот метод позволяет обновлять текст пояснения над индикатором:

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

Метод для обновления прогресса (в модуле формы)

Метод увеличивает ширину индикатора в зависимости от прогресса выполнения:

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

И давайте как бонус рассмотрим динамическую настройку цвета

Если хотите, чтобы цвет индикатора соответствовал текущей теме книги, добавьте следующий оператор в процедуру UserForm_Initialize:

.lblProgress.BackColor = ActiveWorkbook.Theme. _

ThemeColorScheme.Colors(msoThemeAccent1)

Вместо

.lblProgress.BackColor = vbGreen, путём её "ЗАКОММЕНТИРОВАНИЯ". Как это изображено ниже:

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

и тогда цвет изменится

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Помните о том, что индикатор текущего состояния ЗАМЕДЛЯЕТ выполнение макроса, поскольку обновление индикатора требует дополнительных системных ресурсов. Если для Вас быстродействие макроса превыше всего, от использования индикатора лучше отказаться.

Вот короткое видео на данную тему

СКАЧАТЬ ФАЙЛ ПРИМЕР