VBA-带for循环和2D数组的类型不匹配错误

马修·约翰斯顿

我想做的是在调整原始数组大小的同时将一个数组复制到临时数组,然后将临时数组复制回调整后的原始大小。

但是,当第一个for循环运行时,我遇到了“类型不匹配”错误。

收到此错误我做错了什么?

Public Sub UpdateNamesPaid(NameValue As String, Paid As String)

    NamesPaid(NamesPaidSize, 0) = NameValue
    NamesPaid(NamesPaidSize, 1) = Paid

    NamesPaidSize = NamesPaidSize + 1
    Dim TempArray() As Variant
    ReDim TempArray(0 To NamesPaidSize, 0 To 1)

    Dim i As Integer
    Dim j As Integer

    i = 0
    j = 0

    For i = 0 To UBound(NamesPaid(i, j)) 

        For j = 0 To UBound(NamesPaid(i, j))

            TempArray(i, j) = NamesPaid(i, j)

        Next j
    Next i

    ReDim NamesPaid(0 To NamesPaidSize, 0 To 1)
    NamesPaid() = TempArray()

End Sub
用户名

您会误解该UBound()函数的参数的含义:第一个参数是数组名称,第二个是您要查看的维。
正确的代码是:

    Public Sub UpdateNamesPaid(NameValue As String, Paid As String)
    Dim i As Long, j As Long
    Dim NamesPaidSize As Long
    Dim NamesPaid() As String
    ReDim NamesPaid(0 To 0, 0 To 1)

    NamesPaidSize = LBound(NamesPaid, 1) ' or whatever you meant...
    NamesPaid(NamesPaidSize, 0) = NameValue
    NamesPaid(NamesPaidSize, 1) = Paid

    Dim TempArray() As String
    ReDim TempArray(0 To NamesPaidSize, 0 To 1)


    For i = LBound(NamesPaid, 1) To UBound(NamesPaid, 1)
        For j = LBound(NamesPaid, 2) To UBound(NamesPaid, 2)
            TempArray(i, j) = NamesPaid(i, j)
        Next j
    Next i

    NamesPaidSize = NamesPaidSize + 1
    ReDim NamesPaid(0 To NamesPaidSize, 0 To 1)

   ' NamesPaid = TempArray
    For i = LBound(TempArray, 1) To UBound(TempArray, 1)
        For j = LBound(TempArray, 2) To UBound(TempArray, 2)
             NamesPaid(i, j) = TempArray(i, j)
        Next j
    Next i
End Sub

请注意,增量为1时效率可能非常低。您可以将大小为10的初始数组填满,然后填充,然后在复制步骤中再增加10。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章