2016-08-12 25 views
2

我几乎用电子表格完成了比较两个数组以及任何在一个数组中但不在另一个数组中的任何数据都放入第三个数组的情况。在VBA中打印长单元格数组并获取下标超出范围错误

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

这里是循环打印数组:

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

+1

当PrintCell失败时,它的价值是什么? –

+0

11.它从单元格A11开始并向下工作 –

+0

似乎不存在名为“Inputs and Results”的工作表。 –

回答

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 
+0

数据从1开始放入数组中。我将其更改为Option Base 1并使用了Lbound。仍然收到错误。 –

+0

如果循环从'1'开始,但是'Ubound' == 0,那么循环将不会执行,所以这次数组绑定*不能成为此错误的来源。我的钱在工作表名称上。 –

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 ,其中任何一种我认为无意义地使用直接数组>范围分配更容易完成的任务变得复杂,如上所述。