Лучше ли показывать пользовательские формы ProgressBar в VBA как модальные или немодальные?
Лучше ли показывать пользовательские формы ProgressBar в VBA как модальные или немодальные? Каковы лучшие практики для разработки индикаторов прогресса в VBA?
Немодальные пользовательские формы требуют использованияApplication.Interactive = False
тогда как модальные пользовательские формы по самой своей природе блокируют любое взаимодействие с приложением, пока основная процедура не завершится или не будет отменена.
ЕслиApplication.Interactive = False
используется, однако, клавиша Esc прерывает выполнение кода, поэтому использованиеApplication.EnableCancelKey = xlErrorHandler
и обработка ошибок (Err.Number = 18
) требуется как в пользовательской форме, так и в вызывающей процедуре.
Ресурсоемкие процедуры вызова также могут привести кCommandButton_Click
а такжеUserForm_Activate
события осечки в немодальных пользовательских формах.
В целом, индикаторы прогресса, которые используют модальные пользовательские формы, кажутся более простыми, потому что выполняемый код полностью содержится в модуле UserForm, и для передачи переменных меньше необходимости.
Однако проблема использования модальных пользовательских форм для индикаторов прогресса заключается в том, что для каждой процедуры, для которой требуется индикатор выполнения, требуется отдельный модуль UserForm, поскольку вызывающая процедура должна находиться внутри процедуры UserForm_Activate.
Таким образом, хотя в немодальной пользовательской форме можно иметь один повторно используемый индикатор прогресса, он будет менее надежным, чем выполнение кода из нескольких модальных пользовательских форм.
Какой способ лучше?
Спасибо!