Чтобы сказать Excel, чтобы он на мгновение оставлял код, потребляющий процессор, и обрабатывал события от пользователя, вы должны вставить DoEvents в свой код. Например, если у вас есть длинная позиция для l oop, вы можете написать DoEvents
внутри для l oop. Таким образом, на каждой итерации Excel будет обрабатывать пользовательский ввод.
У нас нет образца кода от вас, здесь он мой.
Public Sub YourRoutine()
Dim row_i As Long
'CPU Time consuming loop
For row_i = 1 To 9999999
Cells(row_i,1).Value = "I'm row number" & vbCrLf & row_i & vbCrLf & "."
Next i
End Sub
С приведенным выше кодом Excel не будет отвечать пользователю входы, пока саб не заканчивается. Добавляя DoEvents, как показано ниже, код Excel будет отвечать на пользовательский ввод каждый раз, когда row_i увеличивается.
Public Sub YourRoutine()
Dim row_i As Long
'CPU Time consuming loop
For row_i = 1 To 9999999
Cells(row_i,1).Value = "I'm row number" & vbCrLf & row_i & vbCrLf & "."
'Interrupt for events
DoEvents
Next i
End Sub
Вы также можете сделать 10 шагов и после этих итераций прослушивать пользовательские вводы
Public Sub YourRoutine()
Dim row_i As Long
'CPU Time consuming loop
For row_i = 1 To 9999999
Cells(row_i,1).Value = "I'm row number" & vbCrLf & row_i & vbCrLf & "."
'Interrupt for events every 10 iterations
If row_i Mod 10 = 0 Then
DoEvents
End If
Next i
End Sub
Если у вас нет al oop, а общий c длинный код, поместите DoEvents
в каждую точку, которую вы хотите, чтобы Excel прослушивал пользовательские события