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