VBA Excel 2007 помогает ускорить код для скрытия строк

VBA Excel 2007 помогает ускорить код для скрытия строк

Я пытаюсь написать код VBA, который автоматически скрывает строки, если значение в строке равно "". Мой диапазон значений - A37:A400. Поскольку мой диапазон очень большой, мой предыдущий VbA слишком медленный и просматривает по одной строке за раз. Есть идеи, как сделать быстрый код, который будет проходить по этому большому списку и быстро скрывать строки. Сейчас скрытие строк занимает около минуты, что слишком долго.

Sub HideRows()
    Dim cell As Range
    For Each cell In Range("A37:A400")
        If Not IsEmpty(cell) Then
            If cell.Value = "" Then
                cell.EntireRow.Hidden = True
            End If
        End If
    Next
End Sub

решение1

Попробуйте добавить Application.ScreenUpdating = Falseнепосредственно перед вашим кодом сокрытия и добавить Application.ScreenUpdating = Trueпосле вашего кода сокрытия. Обычно этот трюк ускоряет большинство макросов VBA примерно в 10 раз, поскольку приложению не приходится постоянно перерисовывать себя во время выполнения кода.

Это должно помочь в вашем случае, поскольку вы проверяете каждую ячейку по отдельности и скрываете строку по отдельности, а не выполняете пакетное скрытие строк.

решение2

Я вообще не понимаю, как работает ваш код.

У вас есть следующие 2 строки

If Not IsEmpty(cell) Then
        If cell.Value = "" Then

Если первая строка не пуста, то вторая строка всегда будет возвращать false. Первая строка говорит "если ячейка не пуста", а следующая строка говорит "если строка пуста"... Ну, она уже была оценена как непустая. Следовательно, вы никогда не сможете скрыть строку, так что я не понимаю, как работает ваш код - я подозреваю, что за пределами кода происходит что-то еще, но...

Однако на моем компьютере это работает отлично.

Sub Button1_Click()
Dim cell As Range
    For Each cell In Range("A1:A1600")
        If cell.Value = "" Then
            cell.EntireRow.Hidden = True
        End If            
    Next
End Sub

У меня 1600 строк, выполнение занимает около 5 секунд.

Связанный контент