Страницы: 1
RSS
VBA перебор диапазонов, содержащих в названии
 
Всем доброго дня!
Может кто знает как можно циклом перебрать все диапазоны на листе, содержащие в названии определенное слово?

Необходимо в итоге их все перебрать и скрыть строки содержащие искомые диапазоны
пробую этим кодом...
Код
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
но ничего не выходит)
Изменено: art013 - 24.03.2015 12:37:18
 
Судя по коду под диапазонами вы понимаете "Именованные диапазоны"?
 
Да,все верно
 
Покажите НЕБОЛЬШОЙ файл-пример с этими диапазонами. Не рисовать же каждому эти таблицы...
 
Вот
 
А в xlsx макросы не живут - Вы в курсе?
 
Юрий М, я не предполагал, что это на столько сложный вопрос, чтобы настолько красочно его расписывать.
Я в курсе. И в курсе, что при необходимости, это крайне легко поправимо.
 
Ну так ЧТО Вам мешало оставить код в файле?.. И причём тут "красочно"? Облегчайте жизнь тем, кто Вам помогает. А про необходимость... КОМУ это необходимо?
===
На основе Вашего кода:
Код
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



 
Юрий М, Спасибо Вам!
Обязательно учту Ваше замечание в следующей созданной мною теме!
 
И что? Не скрываются строки?
 
только какой-то он задумчивый вышел
 
На Вашем примере (два диапазона) отрабатывает мгновенно)) Если диапазонов много, попробуйте отключать обновление экрана.
 
Юрий М, естессно без обновления и пробовал) секунд 10 думает.. в книге диапазонов в районе 200
 
10 секунд многовато... Тогда можно попробовать собирать номера строк в массив, а потом разом эти строки скрывать.
 
Юрий М, это уже наверное другой вопрос, в любом случае Вы мне очень помогли!)
 
См. #15
 
Юрий М, я еще не на столько грамотный)
 
Юрий М, но против грамотной помощи никогда не выступал)
 
Поищите темы (поиском по сайту), в которых упоминается переменная delra
Они практически все про групповое удаление строк.
 
Юрий М, ок)
 
Цитата
art013 написал:
в книге диапазонов в районе 200
Вам-то нужно скрыть диапазоны во всей книге или только на текущем листе? Если второе, то можно ввести проверку:
Код
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
 
Казанский, спасибо, но в моем случае не спасло)  
 
В начало макроса поставьте Application.ScreenUpdate = False, в конец - Application.ScreenUpdate = True.
F1 творит чудеса
 
Макс, я в #13 предлагал. Говорит, что не помогает...
 
А, да, упустил.
Ну не знаю, взял пример, скопировал лист еще 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 :) Комп у меня не самый быстрый, плюс куча побочных программ запущена.
Я думаю, дело в самих диапазонах - их размер может сильно влиять. Можно еще поотключать пересчет и все остальное.
F1 творит чудеса
 
Может быть автор не понял меня, когда я писал про отключение обновления экрана? )
Страницы: 1
Наверх