Обычный способ сделать любой код (который делает любое изменение в книге) быстрее является отключение screen updating
и отключение events
и изменение режима calculation
к Manual
(есть и другие способы, но эти 3 вещи, которые имеют наибольший коэффициент) ,
И все остальное состоит в том, что сбор всех строк в одном диапазоне объединений имеет большой фактор в удалении и вставке строк, потому что время, необходимое для удаления одной строки, похоже на время удаления всего диапазона объединения. Например, если для удаления одной строки требуется 1 секунда, то для удаления 1000 строк потребуется 1000 секунд, но для удаления диапазона объединения, содержащего 1000 строк, требуется только 1 секунда.
Попробуйте этот код:
Sub Hide2ndFix()
'
' Hide2ndFix Macro
'
Dim RowCnt As Long, uRng As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
BeginRow = 414
EndRow = 475
ChkCol = 24
For RowCnt = BeginRow To EndRow
If Cells(RowCnt, ChkCol).Value = 0 Then
If uRng Is Nothing Then
Set uRng = Cells(RowCnt, ChkCol)
Else
Set uRng = Union(uRng, Cells(RowCnt, ChkCol))
End If
End If
Next RowCnt
'
If Not uRng Is Nothing Then uRng.EntireRow.Hidden = True
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
Проблема заключается в том, вероятно, что есть расчеты происходят каждый цикл. В начале кода добавьте 'application.Calculation = xlCalculationManual' и в конце' application.Calculation = xlCalculationAutomatic' –
Также эта строка 'Cells (RowCnt, ChkCol) .EntireRow.Hidden = True' может быть сокращена до' Строки (RowCnt) .Hidden = True' –