【问题标题】:Runtime error 9 "subscript out of range" array redim preserve vba运行时错误 9“下标超出范围”数组 redim 保留 vba
【发布时间】:2019-01-18 00:06:44
【问题描述】:

我的代码将 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

【问题讨论】:

    标签: arrays excel vba dynamic-programming


    【解决方案1】:

    在循环中第一次调用 Redim 语句时,没有什么可以“保留”。首次对数组进行标注时调用 Redim 而不使用“Preserve”。

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

    【讨论】:

    • 嗨@Variatus,Redim Preserve 第一次工作(第一个循环)但不是第二次让我发疯。我试着按照你说的做,循环外的 Redim 和 Redim 保留在里面,但我一直收到相同的错误消息
    • 只能增加最后一个数组向量的元素。
    • 使用 ReDim Preserve myArray(0 To 1, 0 To PN) 代替 ReDim Preserve myArray(0 To PN, 0 To 1) 并调整其余代码以使最后一个向量动态化。
    • 如果我必须这样做,我必须改变我的整个代码的结构:/,没有办法像我一样重新调整?
    • 没有。不支持这种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    相关资源
    最近更新 更多