Время отображения, оставшееся при выполнении кода
У меня есть форма с несколькими кнопками, которые выполняют код при нажатии, как запуск проверки в базе данных.
Некоторый код может выполняться в течение нескольких минут, так есть ли способ показать оставшееся время или сообщение для отображения % завершенного процесса?
Или выскакивает сообщение, когда начинается оценка кода, и сообщение должно исчезнуть после завершения выполнения кода?
4 ответа:
То, что вы, вероятно, ищете, - это "индикатор выполнения".
Я использовал элемент управления Microsoft ProgressBar (вы можете найти его в разделе Insert - >ActiveX Control), и это не так уж трудно использовать. Просто установите его значение в процентах (как целое число, а не десятичное).
'foo, being the ProgressBar me.foo = 70 '70%
Здесь есть хорошая информация о другом методе: http://www.granite.ab.ca/access/progressbar.htm
Чтобы сделать это" обычным " способом, вам нужно будет запустить проверку в другом потоке и заставить его сообщить о своем прогрессе обратно в поток пользовательского интерфейса. Однако я не верю, что VBA поддерживает какую-либо многопоточность.
Если ваши процедуры проверки включают цикл или даже просто несколько отдельных дискретных операций, вы можете попробовать вставить оператор
DoEvents
между итерациями цикла (или операциями), а затем периодически обновлять отображение хода выполнения (например, в событииApplication_OnTime
обработчик).
Обычно у меня есть форма, которую я называю frmProgress или что-то еще, с кнопкой отмены и меткой для отображения сообщения о состоянии. Затем в коде формы у меня есть логическое выражение bCancel, и когда вы нажимаете кнопку cancel, оно просто устанавливает bCancel как true.
Также в этом коде у меня есть подпрограмма ShowPercDone( Idx , NumIdc), где Idx-шаг, на котором выполняется код, а NumIdc-количество шагов, которые будет выполнять код (при условии, что каждый шаг занимает одинаковое количество времени). Эта работа ну, когда я выполняю цикл for, но в основном каждый раз, когда я хочу отобразить обновление статуса, я просто вызываю процедуру в форме с моим сообщением, которое я должен добавить, запускает команду doevents для меня.
Так вот как работает форма статуса. В макросе, который я запускаю, я начинаю с простого вызова frmProgress.показать (0), чтобы можно было нажать кнопку Отмена. Затем в моем цикле, когда я обновляю сообщение о состоянии, я затем проверяю frmProgress.bCancel и если это правда я выхожу из макрос.
Надеюсь, это поможет.