Я отлаживаю следующий код в Excel 2007 VBA, который кажется очень простым. По какой-то причине обработка 900 строк данных занимает около 30 минут. Я думаю, что я сузил его до некоторого форматирования ячеек, в частности, опции WrapText. Есть ли что-то, чего мне здесь не хватает, что может повысить производительность при удалении этих строк.
Sub ClearContentsOfActive()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim NumLines
NumLines = ActiveSheet.UsedRange.Rows.Count
Range("2:" & NumLines + 3).Select
Selection.ClearContents
Selection.Delete Shift:=xlUp
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Кроме того, пользователь не испытывал этих задержек в Excel 2003 с тем же кодом. Заранее спасибо
Обновление
В ответ на избыточность строки ClearContents, это оригинальный код, который работал в Excel 2003, поэтому я оставил его. Комментирование этой строки было одной из первых вещей, которые я попробовал, поскольку я согласился, что она, возможно, была излишней. См. Ниже мои показатели производительности psuedo.
Test1
Selection.ClearContents ''// Takes ~30 mins
Selection.Delete Shift:=xlUp ''// then this takes <1min
Test2
'Selection.ClearContents '// If this line is commented
Selection.Delete Shift:=xlUp ''// then this line takes ~30 mins
Причина, по которой я считаю, что это как-то связано с функцией WrapText, заключается в том, что при очистке строки WrapText, которую он выполняет, и операции AutoFit в строке. Я думал, что сокрытие обновлений экрана или отключение событий поможет.