VBA - помилка невідповідності типу для циклу і 2D масиву


0

Те, що я намагаюся зробити, це скопіювати один масив до тимчасового масиву, поки я змінювати розмір вихідного масиву, а потім копіювати тимчасовий масив назад до оригіналу.

Але я працюю в помилку "тип невідповідність", коли перший для циклу працює.

що я роблю неправильно, щоб отримати цю помилку?

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

Off topic ... це належить до Stack Overflow, а не SuperUser
ethanwu10

@ ethanwu10 Це правильно. Ви повинні проголосувати, щоб перенести його, тому ОР не думає, що їм потрібно подвоїти повідомлення, щоб привернути увагу.
CharlieRB

1
@ ethanwu10 & amp; CharlieRB: VBA тут не є темою. Подивитися meta.superuser.com/questions/4565/… . Її не слід закривати, мігрувати, повторно розміщувати, зігнути, складати або спотворювати.
fixer1234

Відповіді:


0

Ви неправильно розумієте, як 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.