Всем доброго дня! Может кто знает как можно циклом перебрать все диапазоны на листе, содержащие в названии определенное слово?
Необходимо в итоге их все перебрать и скрыть строки содержащие искомые диапазоны пробую этим кодом...
Код
Dim rng As Range
For Each i In ThisWorkbook.Names
If InStr(i, "ЗОНА") > 0 Then
rng = Range("i")
rng.Select
Selection.EntireRow.Hidden = True
End If
Next
Юрий М, я не предполагал, что это на столько сложный вопрос, чтобы настолько красочно его расписывать. Я в курсе. И в курсе, что при необходимости, это крайне легко поправимо.
Ну так ЧТО Вам мешало оставить код в файле?.. И причём тут "красочно"? Облегчайте жизнь тем, кто Вам помогает. А про необходимость... КОМУ это необходимо? === На основе Вашего кода:
Код
Sub Test1()
Dim rng As Range
For Each i In ThisWorkbook.Names
If i.Name Like "*скрыть*" Then
Set rng = Range(i)
rng.Rows.EntireRow.Hidden = True
End If
Next
End Sub
Вам-то нужно скрыть диапазоны во всей книге или только на текущем листе? Если второе, то можно ввести проверку:
Код
Sub Test1()
Dim rng As Range, i As Name
For Each i In ThisWorkbook.Names
If i.Name Like "*скрыть*" Then
Set rng = Range(i)
If rng.Worksheet Is ActiveSheet Then rng.Rows.EntireRow.Hidden = True
End If
Next
End Sub
А, да, упустил. Ну не знаю, взял пример, скопировал лист еще 2 раза (итого имеем 6 имен), запустил цикл 200 раз
Код
Sub Test1()
Dim t, i, k&
Dim rng As Range
Application.ScreenUpdating = False
t = Timer
For k = 1 To 200 ' двести раз скрыть-показать строки.
For Each i In ThisWorkbook.Names
If i.Name Like "*скрыть*" Then
Set rng = i.RefersToRange
rng.Rows.EntireRow.Hidden = True
rng.Rows.EntireRow.Hidden = False
End If
Next
Next
Debug.Print Timer - t
Application.ScreenUpdating = True
End Sub
С отключенным обновлением экрана выполнение заняло 0,5 секунды в среднем. Без отключенного - от 3 до 11 секунд. Можно делить на 2 Комп у меня не самый быстрый, плюс куча побочных программ запущена. Я думаю, дело в самих диапазонах - их размер может сильно влиять. Можно еще поотключать пересчет и все остальное.