Скажем, у меня есть кнопка, встроенная в мою электронную таблицу, которая запускает некоторую функцию VBA.Как остановить код VBA?
Private Sub CommandButton1_Click()
SomeVBASub
End Sub
Private Sub SomeVBASub
DoStuff
DoAnotherStuff
AndFinallyDothis
End Sub
Я хотел бы иметь возможность иметь какую-то кнопку «отмена», что бы остановить SomeVBASub
выполнение в произвольный момент, и я не в с участием Ctrl+Break
здесь, потому что я бы как сделать это тихо.
Я предполагаю, что это должна быть довольно распространенная проблема, любые идеи?
Спасибо.
у меня была идея реализовать такую логику, но это совсем смущает меня поставить 'DoEvents-Check flag' в КАЖДОЙ точке выхода возможной процедуры (буквально после каждой строки). –
Описанный ниже метод @Faheemitian позволяет избежать этого, но это работает почти так же, как Ctrl + Break. Это зависит от того, какой контроль вы хотите использовать над пользовательским интерфейсом (например,кнопку) и где вы можете позволить вашему коду выйти. Если пользовательский интерфейс не имеет значения, и выходы кода могут быть произвольными (например, никаких проблем с зависимостями, откатами и т. Д.), Это было бы проще всего. Обычно добавление ловушек для флага отмены не является слишком обременительным, поскольку большая часть времени выполнения будет потрачена на циклы, но, возможно, это не так в вашей ситуации. –
Позвольте мне также добавить, что если вы беспокоитесь о том, что процедура не прекращается немедленно, когда они нажимают «отменить» (отсюда нужно добавить столько проверок), то, что я обычно делаю, это отключить кнопку «Отмена» и изменить текст на «Подождите ...» или что-то в процедуре Click, поэтому пользователь знает, что приложение действительно рассматривает их запрос. –