VBA - ReDim保留创建错误的数组元素

时间:2016-01-15 18:37:28

标签: excel vba

这是一个for循环,用于查找范围内的值并创建充满匹配结果的新数组。问题是查看我在第一个If语句中看到的对象AR2(i)创建一个空的元素AR2(0)然后将AR2(1)指定为If Else值。

Sub rt()
Dim AR0() As Variant, AR1() As Variant, AR2() As Variant
Dim WS0 As Worksheet, WS1 As Worksheet
Dim i As Integer, RW0 As Integer, RW1 As Integer
Dim C As Range

Set WS0 = Sheets("lookup")
Set WS1 = Sheets("centro")

RW1 = WS1.Cells(WS1.Rows.Count, "A").End(xlUp).row
AR0 = WS0.Range("A3:A28")

For i = 1 To UBound(AR0, 1)
    With WS1.Range("A2:A" & RW1)
        Set C = .find(AR0(i, 1), LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
        ReDim Preserve AR2(i)
        If Not C Is Nothing Then
            AR2(i) = "YES"
        Else
            AR2(i) = " - "
        End If
    End With
Next

WS0.Range("B3:B28") = WorksheetFunction.Transpose(AR2)

End Sub

1 个答案:

答案 0 :(得分:0)

错误是AR2在没有赋值的情况下创建元素AR2(0)。解决方法是将For循环设置为从0开始,并将AR0(i + 1,1)设置为允许从循环位置0开始查找此值。谢谢!

    Sub rt()
    Dim AR0() As Variant, AR1() As Variant, AR2() As Variant
    Dim WS0 As Worksheet, WS1 As Worksheet
    Dim i As Integer, RW0 As Integer, RW1 As Integer
    Dim C As Range

    Set WS0 = Sheets("lookup")
    Set WS1 = Sheets("centro")

    RW1 = WS1.Cells(WS1.Rows.Count, "A").End(xlUp).row
    AR0 = WS0.Range("A3:A28")

    For i = 0 To UBound(AR0, 1) - 1
        With WS1.Range("A2:A" & RW1)
            Set C = .find(AR0(i + 1, 1), LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
            ReDim Preserve AR2(i)
            If Not C Is Nothing Then
                AR2(i) = "YES"
            Else
                AR2(i) = " - "
            End If
        End With
    Next

    WS0.Range("B3:B28") = WorksheetFunction.Transpose(AR2)

    End Sub