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