0

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

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

这里缺少什么?

4

2 回答 2

1

您正在声明一维数组Dim stringValues() As String

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

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

删除数组能够存储的元素数量

Dim stringArray(0 to 10)或者Dim stringArray(10)

并且在迭代计数器时从0.

使用ReDim stringValues()允许您在稍后阶段调整边界大小。

该主题过于宽泛,无法在一个答案中进行讨论,因此请查看链接以了解如何为数组设置维度

于 2013-09-09T11:31:37.857 回答
1

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

ReDim stringValues(Sheets("sheet").UsedRange.Rows.Count, 3)
于 2013-09-09T11:33:47.820 回答