#excel #vba #progress-bar #procedure
#excel #vba #индикатор выполнения #процедура
Вопрос:
У меня есть мой шаблон, который изменяет строку состояния в левом нижнем углу экрана Excel при обновлении шаблона. Большинство моих коллег, вероятно, этого не заметят. Поэтому, чтобы информировать их о прогрессе, достигнутом во время выполнения макроса, я хотел бы создать индикатор выполнения.
Поэтому я рассмотрел некоторый пример и теперь разработал индикатор выполнения, который отлично работает для предоставленного кода. Для моей конкретной потребности я хочу, чтобы индикатор выполнения обновлялся каждый раз при вызове нового дочернего элемента. Я знаю фиксированное количество вспомогательных операций, выполняемых во время процедуры (6), и я хочу, чтобы VBA проверял, какое число выполняется. после завершения подраздела 1 прогресс составляет 1/6 = 16,67%, после подраздела 2 — 33% и т.д. и т.п.
Я искал методы vba для подсчета количества дочерних элементов в коде и для определения того, где в процессе находится процедура.
Могу ли я получить то, что хотел бы иметь?
У меня эти вспомогательные элементы вызываются во время выполнения процедуры:
Call datawissen
Call dataplaatsen
Call kolomtitels
Call toevoegen
Call maaktabel
Call refreshpivot
Комментарии:
1. Просто имейте переменную счетчика, которая увеличивается на 1 при каждом вызове процедуры.
Ответ №1:
Нет ничего невозможного в программном подсчете количества дочерних элементов в фрагменте кода, вероятно, это выходит за рамки ваших потребностей. Большинство, скорее всего, сделает что-то вроде этого:
total_no = 6
cnt = 0
refresh_bar cnt / total_no
Call datawissen
cnt = cnt 1
refresh_bar cnt / total_no
Call dataplaatsen
cnt = cnt 1
refresh_bar cnt / total_no
Call kolomtitels
cnt = cnt 1
refresh_bar cnt / total_no
Call toevoegen
cnt = cnt 1
refresh_bar cnt / total_no
Call maaktabel
cnt = cnt 1
refresh_bar cnt / total_no
Call refreshpivot
cnt = cnt 1
refresh_bar cnt / total_no
Где refresh_bar — это вспомогательный элемент, который повторно отображает индикатор выполнения с процентом полного значения, указанного в качестве параметра.
Комментарии:
1. это то, что я также создавал, когда вы опубликовали свой ответ: counter = 0 Вызовите datawissen counter = counter 1 для i = 1 для рабочих листов. Подсчитайте, если рабочие листы (i). Name = «Output Totaal» Затем вызовите ASW Следующий i counter = counter 1 Вызовите dataplaatsen, где counter будет значением, которое используется для индикатора выполнения. (и разделите на 6, чтобы получить процент)