2

Я пытаюсь написать код 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

2 ответа2

2

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

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

1

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

У вас есть следующие 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 секунд, чтобы выполнить

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .