错误9使用ReDim保留

这个函数返回一个错误9,为什么? 我已经在这里读过几个类似的问题,但没有什么真正的解释我的。

我真的想了解为什么ReDim Preserve不能在这种情况下工作,因为从“j + 1”开始没有input(我已经检查过我的单元格),所以不会覆盖任何东西。

这里是代码

Function DadosAnoIndenizações() ReDim dados(1 To 10000, 1 To 2) j = 0 For i = 5 To 10000 If (IsNumeric(Worksheets(2).Cells(i, 8).Value) And Not IsEmpty(Worksheets(2).Cells(i, 8).Value)) Then Ano = CInt(Right(Worksheets(2).Cells(i, 8).Value, 4)) SD = Worksheets(2).Cells(i, 11).Value j = j + 1 dados(j, 1) = Ano dados(j, 2) = SD End If Next i ReDim Preserve dados(1 To j, 1 To 2) DadosAnoIndenizações = dados End Function 

感谢任何帮助家伙

您正在尝试更改数组的第一个维度。 Redim保留只能改变数组的最后一个维度,这就是为什么你会得到错误。 您可以在MSDN的网站上find这些信息: ReDim声明(Visual Basic) ,特别是“调整保留大小”部分:

  • resize与保留。 如果使用Preserve ,则只能调整数组的最后一个维度。 对于其他维度,您必须指定现有数组的边界。

    例如,如果数组只有一个维度,则可以调整该维度的大小,并保留该数组的所有内容,因为您正在更改最后一个维度。 但是,如果数组具有两个或更多维度,则只有使用“ 保留”才能更改最后维度的大小。

通常,解决方法是将第一个维度设为1 to 2 ,将第二个维度设为1 to j ,然后在将结果写入工作表时执行Application.Transpose