цикл по ячейкам в именованном диапазоне
Я пытаюсь написать код, который будет проходить через все ячейки в диапазоне. В конце концов, я хочу сделать что-то более сложное, но так как у меня возникли проблемы, я решил создать несколько коротких тестовых программ. Первый пример работает нормально, но второй (с именованным диапазоном) не работает (выдает сообщение об ошибке "диапазон методов Object_Global Failed"). Есть идеи насчет того, что я делаю не так? Я бы очень хотел сделать это с именованным диапазоном... Спасибо!
Работы:
Sub foreachtest()
Dim c As Range
For Each c In Range("A1:A3")
MsgBox (c.Address)
Next
End Sub
Не делает работа:
Sub foreachtest2()
Dim c As Range
Dim Rng As Range
Set Rng = Range("A1:A3")
For Each c In Range("Rng")
MsgBox (c.Address)
Next
End Sub
3 ответа:
Чтобы настроить свой второй код, вы должны признать, что ваш range rng теперь является переменной, представляющей диапазон, и рассматривать его как таковой:
Sub foreachtest2() Dim c As Range Dim Rng As Range Set Rng = Range("A1:A3") For Each c In rng MsgBox (c.Address) Next End Sub
Предупреждение: в большинстве случаев ваш код будет быстрее, если вы сможете избежать циклического перебора диапазона.
Set Rng =Range ("A1:A3") - это создание объекта range, а не именованного диапазона. Это должно сработать
Sub foreachtest2() Dim c As Range Dim Rng As Range Set Rng = Range("A1:A3") For Each c In rng MsgBox (c.Address) Next End Sub
Если вы хотите создать именованный диапазон под названием Rng, то
Range("A1:A3).Name="Rng"
Создаст его, или вы можете создать и замкнуть его, как thsi
Dim c As Range Range("a1:a3").Name = "rng" For Each c In Names("rng").RefersToRange MsgBox c.Address Next c