范围 – VBA – 为什么这个代码不起作用?

我试图填补我的VBA知识中的一些空白,我很困惑,为什么这个代码不能在VBA中工作:

Sub RangeTest() Dim TemplateRange As Range Set TemplateRange = ThisWorkbook.Worksheets("Template").Range("A7:BO200") For Each thing In ThisWorkbook.Worksheets("Template").Range("A7:BO200").Columns(2) Debug.Print thing Next thing End Sub 

范围不是可以迭代的一组其他对象吗? 现在想想吧,我想这可能不是。 我注意到我可以遍历范围的.values。 但是我认为范围本身只是一个对象?

您必须说明要使用的.Columns()对象中的哪个集合。 在这种情况下, .Cells集合似乎是你想要的:

 Sub RangeTest() Dim TemplateRange As Range Set TemplateRange = ThisWorkbook.Worksheets("Template").Range("A7:BO200") For Each thing In TemplateRange.Columns(2).Cells ' This is what you want to use, I think --^^^^^^ Debug.Print thing Next thing End Sub 

如果你改变

 Debug.Print thing 

 thing.Select 

你会看到“东西”是你范围内的第二列(So B7:B200)的整个范围。 如果要遍历此范围内的每个单元格,可以将For …语句更改为

 For Each thing In ThisWorkbook.Worksheets("Template").Range("A7:BO200").Columns(2).Cells