在VBA中重新引用一个数组

在VBA中调整二维数组的大小时遇到​​严重的问题。 我已经做了很多关于这个(stream行)问题的阅读,但我仍然无法弄清楚我的代码中有什么问题。

所以,我在电子表格中有一些数据。 在第二行中,我有一些元素的描述,而在第一行中,我有这些元素的类别。 我想要做的是创build一个数组,它有第一行中的(不同的)类别和与第二行中的特定类别相关的描述索引。 代码工作正常,直到如果j = UBound(distinctList,2)然后ReDim进来,我得到一个“下标超出范围的错误”。 如果有,添加一个新的类别,并打算如果电子表格中的条目不等于新arrays的任何条目踢。

Function distinctValues(arr) Dim distinctList() As String Dim j As Integer k = 0 'ReDim distinctList(0 To 0, 0 To 1) 'Dodaj pierwszy wpis For i = LBound(arr) To UBound(arr) If arr(i) <> "" Then ReDim distinctList(0 To 1, 0 To j) distinctList(0, 0) = arr(i) distinctList(1, 0) = i + 1 'k = k + 1 Exit For End If Next i 'Dodaj kolejne wpisy For i = LBound(arr) + 1 To UBound(arr) If arr(i) <> "" Then For j = LBound(distinctList, 2) To UBound(distinctList, 2) If arr(i) = distinctList(0, j) Then distinctList(1, j) = distinctList(1, j) & ", " & i + 1 'k = k + 1 Exit For End If If j = UBound(distinctList, 2) Then ReDim Preserve distinctList(0 To 1, 1 To UBound(distinctList, 2) + 1) distinctList(0, j) = arr(i) distinctList(1, j) = distinctList(UBound(distinctList, 2), 1) & ", " & i + 1 Exit For End If Next j End If Next i Debug.Print distinctList(0, 0) & " => " & distinctList(1, 0) 'distinctValues = distinctList End Function 

这是因为你不能改变第二维的下界,你需要保持不变。

您在顶部声明ReDim distinctList(0 To 1, 0 To j)

当你redim,你需要保持第二维的下界为0

 ReDim Preserve distinctList(0 To 1, 0 To UBound(distinctList, 2) + 1)