循环遍历数组的最后一个维度,如果一个元素不存在则添加它

时间:2016-02-01 16:52:39

标签: vba dynamic multidimensional-array

我正在使用VBA从API获取元数据并创建MetadataArray。我被困在标题上。我想检查元素是否存在于数组中,如果没有重新生成数组并添加新元素。当我运行代码时,我收到错误

  

运行时错误'9':下标超出范围

于:
 MetadataArray(0, UBound(MetadataArray, 2) + 1) = AllIndicators(i).ChildNodes(j).BaseName

For k = 0 To UBound(MetadataArray, 2)
    If MetadataArray(0, k) = AllIndicators(i).ChildNodes(j).BaseName Then
    Else
        ReDim Preserve MetadataArray(0 To RowCount, 0 To UBound(MetadataArray, 2) + 1)
        MetadataArray(0, UBound(MetadataArray, 2) + 1) = AllIndicators(i).ChildNodes(j).BaseName
    End If
Next k

1 个答案:

答案 0 :(得分:1)

它无法正常工作的原因是您要求设置一个尚不存在的数组元素。您确实在前一个语句中为MetadataArray创建了一个新的上限,但是在下一个语句中,您要求填充的值比上限值多1,将永远不存在

所以改变

MetadataArray(0, UBound(MetadataArray, 2) + 1) = AllIndicators(i).ChildNodes(j).BaseName

到此:

MetadataArray(0, UBound(MetadataArray, 2)) = AllIndicators(i).ChildNodes(j).BaseName

因为UBound将反映前一语句中数组集的新上限。