А Вы и запускайте и прирывайте макрос из одно й и той же формы.
Более того, можно это сделать одной и той же кнопкой.
Многопоточность в 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 у формы. Тут как хотите, либо
(тогда все будет останавливаться при закрытии формы)
либо
(тогда форму нельзя будетт закрыть пока явно не нажмут Stop)
А Вы и запускайте и прирывайте макрос из одно й и той же формы.
Более того, можно это сделать одной и той же кнопкой.
Многопоточность в VBA возможна, но только средствами WinAPI.
Т.е. CreateTread и прочие функции этой группы. Все они находятся в kernel32.dll.
Если с WinAPI и многопоточностью не знакомы, то проще сделать как я советовал в начале.
Вот пример:
Добавьте форму, на нее кнопку с надписью "Start".
Вот обработчик нажатия кнопки.
[code]
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
[/code]
Пока повторно не нажмут кнопку в ячейку А1 постоянно пишется случайное число.
Только тут еще надо обработать событие QueryClose у формы. Тут как хотите, либо
[code]
CommandButton1.Caption = "Start"
[/code]
(тогда все будет останавливаться при закрытии формы)
либо
[code]
Cancel = CommandButton1.Caption = "Stop"
[/code]
(тогда форму нельзя будетт закрыть пока явно не нажмут Stop)