цикл по ячейкам в именованном диапазоне


Я пытаюсь написать код, который будет проходить через все ячейки в диапазоне. В конце концов, я хочу сделать что-то более сложное, но так как у меня возникли проблемы, я решил создать несколько коротких тестовых программ. Первый пример работает нормально, но второй (с именованным диапазоном) не работает (выдает сообщение об ошибке "диапазон методов 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 6

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

Попробуйте вместо этого:

Sub foreachtest2()
Dim c As Range
Range("A1:A3").Name = "Rng"
For Each c In Range("Rng")
    MsgBox (c.Address)
Next
End Sub