运行时错误9“下标超出范围”数组redim保存vba

时间:2019-01-18 00:06:45

标签: arrays excel vba dynamic-programming

我的代码将excel中表的所有值复制到一个数组上,对其进行过滤,并用它填充一个组合框,但是我一直在我的代码上收到此错误,并且在调试后,似乎该错误是由于Redim Preserve引起的。 ..你能检查一下吗?

' FIll CB2()

 Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("D1") 
 Dim LC As Long 
 Dim i As Long 
 Dim PN As Long 
 Dim myArray() As String 
 Dim j As Long 
 Dim k As Long 
 Dim temp As String

LC = ws.Cells(ws.Rows.Count, 4).End(xlUp).Row

    For i = 1 To LC

        If StrComp(CB1.List(CB1.ListIndex, 0), ws.Cells(i, 4), vbTextCompare) = 0 Then



        'Set you array with the right dimension
        ReDim Preserve myArray(0 To PN, 0 To 1)

        myArray(PN, 0) = ws.Cells(i, 2)
        myArray(PN, 1) = ws.Cells(i, 3)

        PN = PN + 1


        End If

    Next i 
End Sub

1 个答案:

答案 0 :(得分:0)

第一次在循环中调用Redim语句时,没有“保留”的内容。首次设置数组尺寸时,调用不带“保留”功能的Redim。

如果标注变量的代码行是真实代码,那么令人惊讶的是它没有调用错误。我建议将每个Dim语句单独放在一行中,以便在没有其他原因的情况下提高代码的可读性,并避免在一般情况下使用冒号,特别是为了将声明与值赋值混合使用。