VBA范围数组 – 什么?

我在这里感到困惑,这段代码抛出一个下标超出范围错误 – 我看不出为什么

Public Sub Tester() Dim Arr As Variant Dim n As Long Dim size As Integer Dim width As Integer Arr = Sheets("Sheet1").Range("L13:L20") width = LBound(Arr) size = UBound(Arr) Debug.Print size For n = 1 To 8 Debug.Print Arr(n) Next End Sub 

任何帮助将是伟大的 – 我希望我可以俯视简单的东西,但所有的下标超出范围的帮助网上迄今没有太多的使用… … –

将Range转换为Variant / Array时,Excel始终会创build一个2维数组,即使对于单个列也是如此。 你需要:

 For n = 1 To 8 Debug.Print Arr(n, 1) Next 

该数组有尺寸(1到8,1到1)。

我已经能够重现这个问题。 这似乎是由VBA返回二维数组而不是一维数组引起的。 基本上,行和列都有一个维度。 您需要将Arr(n)修改为Arr(n, 1)

考虑:

 Public Sub Tester() Dim Arr As Variant Dim n As Long Dim size As Integer Dim width As Integer Arr = Sheets("Sheet1").Range("L13:L20") width = LBound(Arr) size = UBound(Arr) Debug.Print size For Each a In Arr Debug.Print a Next a End Sub 

正如其他人所提到的,范围的单元格的值在VBA中作为二维数组来操纵。 第一个维度类似于行号,第二个维度类似于列号。 两者都是基数1。

所以你的代码应该如下所示:

 Public Sub Tester() PrintRangeValues Worksheets("Sheet1").Range("L13:L20") End Sub Public Sub PrintRangeValues(rngRange As Range) Dim vntRangeValues As Variant Dim lngRowCounter As Long Dim lngColCounter As Long vntRangeValues = rngRange.Cells.Value For lngRowCounter = 1 To rngRange.Rows.Count For lngColCounter = 1 To rngRange.Columns.Count Debug.Print vntRangeValues(lngRowCounter, lngColCounter) Next lngColCounter Next lngRowCounter End Sub