В настоящее время я работаю над книгой Excel/VBA, которая отображает ок. 500 предметов в бюджете, каждый в другом ряду. Я хочу, чтобы пользователь выбирал уровень детализации в бюджете: на самом высоком уровне каждый отдельный элемент будет показан, на более низком уровне детализации несколько элементов будут сгруппированы под одним заголовком.Эффективное скрытие/отображение нескольких (+500) строк в Excel VBA
Метод, описанный ниже (скрытие/скрытие строки), очень медленный: для скрытия/отображения большинства элементов требуется около 4 минут. Надеюсь, у вас есть какие-то намеки на меня, как ускорить программу!
При выборе уровня детализации с помощью диалогового окна, программа проходит через следующие этапы:
1) Обновление экрана подающий:
Application.ScreenUpdating = False
Application.EnableEvents = False
2) для каждой позиции в бюджете определяется, должна ли эта строка быть скрытой или нет. Код, я использую для этого является следующее:
with sheets("[name sheet here]")
.Range("[identifier of budget line item here]").EntireRow.Hidden = False/True
...
[500 times]
...
end with
3) Во-вторых, в зависимости от уровня детализации, текст, соответствующий подколлекторных сделан белый или черный. Это сделано около 20 строк:
With Sheets("[name sheet here]").Range("[identifier of budget line item here]").Font
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
End With
4) И, наконец, опять же в зависимости от уровня детализации, некоторые линии перерисованы, которые становятся невидимыми, когда скрываются некоторые строки. Это делается в 10 раз или так для различных диапазонов:
Range("[range here]").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Hi Chuff, попробовал третий подход и работает как шарм: от 4 до 5 минут до нескольких секунд. Спасибо за вашу помощь! –
по какой-то причине, это не работает для меня. Я получаю сообщение об ошибке: «Объект не поддерживает это свойство или метод». Что я могу делать неправильно? –
Я могу выбрать диапазон конечных продуктов, чтобы убедиться, что это действительно правильный диапазон. Тем не менее, я все еще получаю вышеуказанную ошибку. (FYI Диапазон не соприкасается.) EDIT: Это должно быть свойство «Скрыто», а не «IsHidden». –