在字符串数组中填充数据时,下标超出范围

时间:2013-09-09 11:27:20

标签: vba multidimensional-array

我正在尝试将一些参考数据存储在字符串数组中,然后使用它来与另一个字符串数组进行比较。但是,代码无效,因为我收到“下标超出范围”错误(请参阅下面的代码注释)。

Sub StoreBaseReferences()
    Dim cell As Range
    Dim val As Variant
    Dim stringValues() As String
    Dim i, rowCounter, columnCounter As Integer

    rowCounter = 0
    columnCounter = 0
    For i = 2 To Sheets("sheet").UsedRange.rows.Count

        For Each cell In Range(Cells(i, 2), Cells(i, 4))
            stringValues(rowCounter, columnCounter) = cell.Value 'this is throwing the subscript ouf of range error
            columnCounter = columnCounter + 1
        Next cell

        rowCounter = rowCounter + 1
        columnCounter = 0
    Next i
    MsgBox (stringValues(0, 0))


End Sub

这里缺少什么?

2 个答案:

答案 0 :(得分:1)

您要声明1d数组Dim stringValues() As String

但尝试将其用作二维数组stringValues(rowCounter, columnCounter)

此外,您没有声明数组的大小,而是尝试使用它。在VBA中,您必须确保在声明时告诉数组的大小。

为delcare计算数组能够存储的元素数

Dim stringArray(0 to 10)Dim stringArray(10)

当迭代计数器从0开始。

使用ReDim stringValues()可以在稍后阶段调整边界大小。

该主题过于宽泛,无法在一个答案中查看,请查看链接以了解如何标注数组

答案 1 :(得分:1)

VBA中的数组需要使用预期使用的元素数量来确定尺寸。您已定义维度,但未指定将添加多少个元素。尝试在For循环之前添加以下行:

ReDim stringValues(Sheets("sheet").UsedRange.Rows.Count, 3)