在VBA中打印长到单元格的数组并使下标超出范围错误

时间:2016-08-12 15:48:11

标签: arrays excel vba subscript

我差不多完成了电子表格,在那里我比较了两个数组和一个数组中的任何内容而不是另一个数组中的任何数组都被放入第三个数组中。

然后我想将数组中的值放到工作簿的工作表上的单元格中,但是我得到一个超出范围的下标,即使数组在调试器中显示了一个值。

这是打印数组的循环:

 If (Not MissingLoans) = -1 Then
  ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) = "No Missing Loans Found on Roll-Up"

Else
    For i = 1 To (UBound(MissingLoans())) Step 1
       *** ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i)

        PrintCell = PrintCell + 1
    Next
End If

我把星号放在给我超出范围错误的行上,但是MissingLoans(I)显示了一个值。事实上,Missingloans(1)是数组中唯一的值。

2 个答案:

答案 0 :(得分:0)

如果数组中只有一个值,那么您应该使用Missingloans(0)访问它,因为数组是从0开始的。

试试这个

For i = LBound(MissingLoans()) To (UBound(MissingLoans())) Step 1
   ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i)
   PrintCell = PrintCell + 1
Next

答案 1 :(得分:0)

不是循环数组,而是将数组直接分配给工作表:

Else
    Dim myRange as Range
    Set myRange = ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1)

    '## Assumes Option Base 0, if Option Base 1, remove the +1
    myRange.Resize(Ubound(MissingLoans)+1).Value = Application.Transpose(MissingLoans)

    Next
End If

如果名为Inputs and Results的工作表在ThisWorkbook中不存在,此代码也会引发错误,我怀疑这是您的下标超出范围的真正原因。

注意:我只会使用Option Base 0,它是默认设置,也是最常见的。只要学会忍受它。我也会开始在第0位填充数组,而不是1.但如果你坚持使用Option Base 0 从1开始填充...,那么你需要做迭代For i = 1 To UBound(MissingLoans)循环,或数组上的ReDim Preserve,我认为其中任何一个都是毫无意义的复杂化,直接阵列>范围分配可以更容易完成,如上所述。