Время отображения, оставшееся при выполнении кода


У меня есть форма с несколькими кнопками, которые выполняют код при нажатии, как запуск проверки в базе данных.

Некоторый код может выполняться в течение нескольких минут, так есть ли способ показать оставшееся время или сообщение для отображения % завершенного процесса?

Или выскакивает сообщение, когда начинается оценка кода, и сообщение должно исчезнуть после завершения выполнения кода?

4 2

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 и если это правда я выхожу из макрос.

Надеюсь, это поможет.

Наконец, чтобы быть простым, я решил использовать метод, приведенный здесь

Http://oreilly.com/pub/h/3330#code