Лучше показать ProgressBar UserForms в VBA как модальный или немодальный?

Лучше показать ProgressBar UserForms в VBA как модальный или немодальный? Каковы лучшие практики для разработки индикаторов хода выполнения в VBA?

Немодальные UserForms требуют использования Application.Interactive = False, тогда как Модальные UserForms по самой своей природе блокируют любое взаимодействие с приложением, пока базовая процедура не закончилась или отменяется.

Если Application.Interactive = False используется, однако, клавиша Esc прерывает выполнение кода, таким образом, использование Application.EnableCancelKey = xlErrorHandler и обработка ошибок (Err.Number = 18) требуется и в UserForm и в процедуре вызова.

Интенсивно использующие ресурсы процедуры вызова могут также привести к CommandButton_Click и UserForm_Activate события, дающие осечку в немодальном UserForms.

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

Проблема, однако, с использованием модального UserForms для индикаторов хода выполнения состоит в том, что отдельный модуль UserForm требуется для каждой процедуры, для которой нужен индикатор хода выполнения, потому что процедура вызова должна быть в процедуре UserForm_Activate.

Так, в то время как возможно иметь единственный допускающий повторное использование индикатор хода выполнения в немодальном UserForm, это будет менее надежно, чем выполнение кода из нескольких модальных UserForms.

Какой путь лучше?

Спасибо!

8
задан Kuyenda 30 January 2010 в 23:47
поделиться

2 ответа

Я собираюсь закрыть это и сказать, что Modal победил. Я пробовал оба способа, но в итоге вы пытаетесь закрыть слишком много лазеек с помощью немодальных пользовательских форм. Модальный сложнее, потому что он более строг, но он побуждает вас разбивать код на более мелкие части, что в любом случае лучше в долгосрочной перспективе.

1
ответ дан 5 December 2019 в 22:18
поделиться

Также есть третий способ, используя Application .statusbar . Вы даже можете моделировать истинный бар прогресс, используя последовательность символов U + 25A0 и U + 25A1.

3
ответ дан 5 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: