VBA - ข้อผิดพลาดประเภทไม่ตรงกันสำหรับลูปและอาร์เรย์อาร์เรย์ 2 มิติ


0

สิ่งที่ฉันพยายามทำคือการคัดลอกหนึ่งอาร์เรย์ไปยังอาร์เรย์ชั่วคราวในขณะที่ฉันปรับขนาดอาร์เรย์เดิมแล้วคัดลอกอาร์เรย์ชั่วคราวกลับไปเป็นต้นฉบับที่ปรับขนาดแล้ว

แต่ฉันพบข้อผิดพลาด "type mismatch" เมื่อลูปแรกทำงาน

ฉันทำอะไรผิดเพื่อรับข้อผิดพลาดนี้

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

ปิดหัวข้อ ... สิ่งนี้อยู่ใน Stack Overflow ไม่ใช่ SuperUser
ethanwu10

@ ethanwu10 นั่นถูกต้อง คุณควรลงคะแนนเพื่อย้ายมันดังนั้น OP ไม่คิดว่าพวกเขาต้องการโพสต์ซ้ำเพื่อให้ได้รับความสนใจ
CharlieRB

1
@ ethanwu10 & 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.