Excel. Макрос в фоновом режиме + окно с кнопкой Cancel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Kallosh
Сообщения: 1
Зарегистрирован: 03 июн 2005, 15:11

03 июн 2005, 15:21

Есть процедура которая выполняется очень долго. Хочу предоставить пользователю возможность прервать выполнение процедуры в любой момент. Т.е. будет форма с кнопкой Cancel. Пользователь жмет кнопку и процесс прерывается. Знаю про DoEvents, он к сожалению только "размораживает" Excel. Мне бы помог дополнительный поток который бы выполнял мою долгую процедуру, а в главном потоке бы крутилась моя форма с кнопкой. Процедура работает с ячейками в книге. Есть ли какие-нибудь мысли как это можно реализовать на VBA?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

17 июн 2005, 00:37

А Вы и запускайте и прирывайте макрос из одно й и той же формы.
Более того, можно это сделать одной и той же кнопкой.

Многопоточность в 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
Пока повторно не нажмут кнопку в ячейку А1 постоянно пишется случайное число.
Только тут еще надо обработать событие QueryClose у формы. Тут как хотите, либо

Код: Выделить всё

CommandButton1.Caption = "Start" 
(тогда все будет останавливаться при закрытии формы)

либо

Код: Выделить всё

Cancel = CommandButton1.Caption = "Stop" 
(тогда форму нельзя будетт закрыть пока явно не нажмут Stop)
GeorgeSoca
Сообщения: 0
Зарегистрирован: 12 окт 2015, 04:09
Откуда: Guam
Контактная информация:

17 окт 2015, 13:54

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
Ответить