Отображение оставшегося времени, когда код работает - PullRequest
2 голосов
/ 03 декабря 2008

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

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

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

Ответы [ 4 ]

1 голос
/ 03 декабря 2008

То, что вы, вероятно, ищете, это "Progress Bar".

Я использовал элемент управления Microsoft ProgressBar (его можно найти в разделе «Вставка-> элемент управления ActiveX»), и его не так сложно использовать. Просто установите его значение в процентах (как целое число, а не десятичное).

'foo, being the ProgressBar
me.foo = 70 '70%

Здесь есть хорошая информация о другом методе: http://www.granite.ab.ca/access/progressbar.htm

0 голосов
/ 04 декабря 2008

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

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

0 голосов
/ 03 декабря 2008

У меня обычно есть форма, которую я называю frmProgress или что-то еще, с кнопкой отмены и меткой для отображения сообщения о состоянии. Затем, встроенный в код формы, у меня есть логическое значение bCancel, и когда вы нажимаете кнопку отмены, он просто устанавливает bCancel в значение true.

Также в этом коде у меня есть подпрограмма ShowPercDone (Idx, NumIdc), где Idx - это шаг, на котором выполняется код, а NumIdc - это количество шагов, которые будет выполнять код (при условии, что каждый шаг занимает одинаковое количество времени) , Это хорошо работает, когда я выполняю цикл for, но в основном всякий раз, когда я хочу отобразить обновление статуса, я просто вызываю подпрограмму в форме со своим сообщением, которое я должен добавить, запускает для меня команду doevents.

Так вот как работает форма статуса. В макросе, который я запускаю, я начинаю с простого вызова frmProgress.show (0), чтобы он позволял вам нажимать кнопку отмены. Затем в своем цикле, когда я обновляю сообщение о состоянии, я проверяю frmProgress.bCancel и, если это правда, я выхожу из макроса.

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

0 голосов
/ 03 декабря 2008

Чтобы сделать это «обычным» способом, вам нужно запустить проверку в другом потоке и попросить его сообщить о своем прогрессе обратно в поток пользовательского интерфейса. Однако я не верю, что VBA поддерживает какую-либо многопоточность.

Если ваши процедуры проверки включают цикл или даже просто множество отдельных дискретных операций, вы можете попробовать вставить оператор DoEvents между итерациями цикла (или операциями), а затем периодически обновлять отображение прогресса (скажем, в Application_OnTime обработчик событий).

...