Excel 2007 VBA 范围变量引用指定范围之外的单元格

标签 excel vba

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

例如,如果我编写以下代码:

 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 个值 - 但最后 2 个语句会导致“A6”和“A7”中的值存储在“H6”和“H7”中。

既然变量“Rate”只分配给“A1:A5”,为什么它能够引用A列中的其他单元格(即“A6”和“A7”)?

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

最佳答案

没有什么问题,这就是它的工作原理。我个人很喜欢这个“功能”。
如果您宁愿收到错误,那么您可以使用类似

 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 错误的唯一方法是使用 Areas 来代替:

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

关于Excel 2007 VBA 范围变量引用指定范围之外的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39341717/

相关文章:

c - 什么是用于处理 Excel 文件的简单可靠的 C 库?

vba - 如果文件扩展名为 .xls,则 MsgBox

excel - 在 VBA 中设置 ODBC 连接字符串

c# - 从 C# 中提取 Word 文档中的宏到文本文件

vba - 比较excel中的两个单元格然后返回行

excel - 对文件夹中的所有文件执行 VBA 宏

VBA 手动转置数组的变体

performance - 高分辨率计时器/代码运行时间-> 开销?

java - 在excel文件中导出Jtable

vba - 在excel vba的最后插入一列