Excel. Макрос в фоновом режиме + окно с кнопкой Cancel
Модератор: Naeel Maqsudov
Есть процедура которая выполняется очень долго. Хочу предоставить пользователю возможность прервать выполнение процедуры в любой момент. Т.е. будет форма с кнопкой Cancel. Пользователь жмет кнопку и процесс прерывается. Знаю про DoEvents, он к сожалению только "размораживает" Excel. Мне бы помог дополнительный поток который бы выполнял мою долгую процедуру, а в главном потоке бы крутилась моя форма с кнопкой. Процедура работает с ячейками в книге. Есть ли какие-нибудь мысли как это можно реализовать на VBA?
- Naeel Maqsudov
- Сообщения: 2551
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
А Вы и запускайте и прирывайте макрос из одно й и той же формы.
Более того, можно это сделать одной и той же кнопкой.
Многопоточность в VBA возможна, но только средствами WinAPI.
Т.е. CreateTread и прочие функции этой группы. Все они находятся в kernel32.dll.
Если с WinAPI и многопоточностью не знакомы, то проще сделать как я советовал в начале.
Вот пример:
Добавьте форму, на нее кнопку с надписью "Start".
Вот обработчик нажатия кнопки.
Пока повторно не нажмут кнопку в ячейку А1 постоянно пишется случайное число.
Только тут еще надо обработать событие QueryClose у формы. Тут как хотите, либо
(тогда все будет останавливаться при закрытии формы)
либо
(тогда форму нельзя будетт закрыть пока явно не нажмут Stop)
Более того, можно это сделать одной и той же кнопкой.
Многопоточность в VBA возможна, но только средствами WinAPI.
Т.е. CreateTread и прочие функции этой группы. Все они находятся в kernel32.dll.
Если с WinAPI и многопоточностью не знакомы, то проще сделать как я советовал в начале.
Вот пример:
Добавьте форму, на нее кнопку с надписью "Start".
Вот обработчик нажатия кнопки.
Код: Выделить всё
Private Sub CommandButton1_Click()
If CommandButton1.Caption = "Start" Then
CommandButton1.Caption = "Stop"
While CommandButton1.Caption = "Stop"
[a1] = Rnd
DoEvents
Wend
Else
CommandButton1.Caption = "Start"
End If
End Sub
Только тут еще надо обработать событие QueryClose у формы. Тут как хотите, либо
Код: Выделить всё
CommandButton1.Caption = "Start"
либо
Код: Выделить всё
Cancel = CommandButton1.Caption = "Stop"
-
- Сообщения: 0
- Зарегистрирован: 12 окт 2015, 04:09
- Откуда: Guam
- Контактная информация:
On our web, you can feel safe! Besides we use mirrored hard drives on all of our servers so we also take backup twice a day on separate servers. We use ISPmanager as the control panel. ISPmanager is a control panel that makes it easy to administer its Web site. With us you can place as many websites and domains you wish for a hosting account.
virtual hosting
virtual hosting