使用ReDim Preserve时出错9

时间:2016-02-04 18:39:22

标签: arrays excel vba

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

我真的想了解为什么ReDim Preserve在这种情况下无效,因为来自" j + 1"没有输入(我已经检查过我的单元格),所以不会覆盖任何内容。

继承代码

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

感谢任何帮助人员

1 个答案:

答案 0 :(得分:2)

您正尝试更改数组的第一个维度。 Redim preserve只能更改数组的 last 维度,这就是您收到错误的原因。您可以在MSDN网站上找到此信息:ReDim Statement (Visual Basic),特别是“使用保留时调整大小”部分:

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

         

    例如,如果您的数组只有一个维度,则可以调整其大小   维度仍然保留数组的所有内容,因为   您正在更改最后一个维度。但是,如果你的阵列   有两个或多个维度,你可以改变最后一个的大小   维度,如果您使用保留

  •   

通常情况下,第一个维度是您的1 to 2,第二个维度是您的1 to j,然后在将结果写入工作表时执行Application.Transpose

相关问题