【问题标题】:Why would ReDim throw a Subscript out of range error 9为什么 ReDim 会抛出下标超出范围错误 9
【发布时间】:2014-11-26 16:55:39
【问题描述】:

我的代码在 VB 中动态创建一个数组 Public Function getIndvidualCuts(dblsawKerf As Double) As Double() '返回所有切割的数组

Dim intQuantity As Integer
intQuantity = 0
Dim i As Integer

intQuantity = 0 ' an integer to store the total quanitiy
For i = 0 To Me.getNumCuts() - 1  'for each different cut
    intQuantity = intQuantity + getCutQuantity(i) 'add the cut quantity to the total quantity
Next

Dim total() As Double 'initialize the total cuts array to make room for each individual cut
ReDim total(intQuantity - 1) **error is here**

我不明白为什么 ReDim 会引发错误。我一直在搜索,但我发现的只是人们使用 ReDim Preserve 的情况如果您对动态数组有不同的解决方案,请分享它

提前致谢

【问题讨论】:

  • 下标是否可以为 -1(即 intQuantity = 0)。我不相信你能做到。
  • 是的。我同意@MattCremeens。 Me.getNumbCuts() 很可能返回 1 或 0,这会导致 intQuantity 保持为 0,并且由于您不能拥有长度为 -1 的数组,因此会出现错误。
  • 另外,如果getCutQuantity返回非整数,我相信你可能会遇到麻烦。
  • 这就是@MattCremeens。谢谢您的帮助。我发现了错误并已修复,感谢您帮助解决我的简单错误。
  • @MattCremeens 将您的建议发布为答案,Noah 用户可以将其标记为答案。

标签: excel dynamic-arrays excel-2013 vba


【解决方案1】:

无效数组下标的示例是非整数或负下标。如果intQuantity = 0 在您的程序中的任何位置,那么这将为您的-1 数组生成一个下标。同样,如果getCutQuantity 返回一个非整数,那么您的数组下标将是一个非整数。很高兴有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多