在VBA中打印Long to Cells的数组,并使下标超出范围错误

我几乎完成了电子表格,在这里我比较了两个数组,而任何在一个数组中而不在另一个数组中的任何数据都被放入第三个数组中。

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

这里是打印数组的循环:

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)是数组中唯一的值。

如果数组中只有一个值,那么应该使用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 

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

 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在arrays上,我认为这两者之一是毫无意义地使直接数组>范围分配更容易做到复杂化,如上所述。