此函数返回错误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
感谢任何帮助人员
答案 0 :(得分:2)
您正尝试更改数组的第一个维度。 Redim preserve只能更改数组的 last 维度,这就是您收到错误的原因。您可以在MSDN网站上找到此信息:ReDim Statement (Visual Basic),特别是“使用保留时调整大小”部分:
使用Preserve调整大小。如果您使用保留,则只能调整大小 数组的最后一个维度。对于每个其他维度,您必须 指定现有数组的边界。
例如,如果您的数组只有一个维度,则可以调整其大小 维度仍然保留数组的所有内容,因为 您正在更改最后一个维度。但是,如果你的阵列 有两个或多个维度,你可以改变最后一个的大小 维度,如果您使用保留。
通常情况下,第一个维度是您的1 to 2
,第二个维度是您的1 to j
,然后在将结果写入工作表时执行Application.Transpose
。