Excel 2007 VBA范围变量引用分配范围外的单元格

时间:2016-09-06 06:10:33

标签: excel-vba vba excel

我到处搜索过,但是我们无法弄清楚为什么范围变量能够引用指定范围之外的单元格。

例如,如果我写下面的代码:

 Dim Rate as Range
 Set Rate = Range("A1:A5") 

 For Each Cell In Rate
      Debug.Print Cell.Value
 Next Cell

 Range("H6").Value = Rate(6).Value
 Range("H7").Value = Rate(7).Value

上述例程只打印出" A1:A5"中的5个值。 - 但最后两个语句会导致" A6"和" A7"存储在" H6"和" H7"。

由于变量" Rate"仅被分配到" A1:A5",为什么它能够引用A列中的其他单元格(即" A6"&" A7")?

我做错了吗?任何见解将不胜感激!

1 个答案:

答案 0 :(得分:1)

没有错,它只是它的工作原理。我个人喜欢这个"功能"。
如果您更喜欢错误,那么您可以使用类似

的内容
 Range("H6").Value = Rate.Value2(6, 1)  ' .Value2 because .Value(6, 1) 

因为Rate.Value2将提供5 x 1变体数组。或者使用.Value数组而不是Range:

 Dim Rate ' as Variant
 Rate = Range("A1:A5").Value    ' Variant/Variant(1 To 5, 1 To 1)

 Debug.Print Rate(5, 1) ' ok
 Debug.Print Rate(6, 1) ' Run-time error '9': Subscript out of range

 Dim Rate as Variant
 Rate = Application.Transpose(Range("A1:A5"))   ' Variant/Variant(1 To 5)

 Debug.Print Rate(5) ' ok
 Debug.Print Rate(6) ' Run-time error '9': Subscript out of range

在您的情况下,Rate(6)Rate.Cells(6, 1)的缩写,类似于.Offset。例如:

 Debug.Print Range("C3:D4")( 1,  1).Address   ' prints "$C$3"
 Debug.Print Range("C3:D4")(-1, -1).Address   ' prints "$A$1"

我能想到使用Range获取错误的唯一方法是改为使用区域:

Dim Rate As Areas
Set Rate = Range("a1,a2,a3,a4,a5").Areas

Debug.Print Rate(5) ' ok
Debug.Print Rate(6) ' Run-time error '9': Subscript out of range
相关问题