对于... VBA中的下一个循环超出限制

时间:2014-07-05 04:37:09

标签: excel-vba for-loop vba excel

我正在使用For... Next循环来填充数组,如下所示

ReDim array(1 to 100, 1 to 100)

For i = 1 to 100

Next i 

但是i计数器似乎总是转到101而不是停在100.这样就在我的数组中创建了第101个元素,这给了我错误“下标超出范围”。有人知道如何解决?

4 个答案:

答案 0 :(得分:4)

Next i步骤相当于编写

i = i + Step    'Step is an optional parameter which defaults to 1 for VBA For loops
Goto Loop_Start

因此,当您完成循环时,计数器将始终设置为1(或更多,具体取决于Step大小),大于产生True条件的最大循环值。

您可以尝试使用这个小代码自行测试。

Sub TestCLoop()
    Dim i As Long

    For i = 1 To 100
    Next i

    MsgBox i
End Sub

你会得到结果......

Output of the empty loop, as you see, <code>i = i + 1</code>

如果您打算使用“最后一个值”&#39;循环完成后,可以采用的方法是

Sub TestCLoop()
    Dim i As Long, MaxValue as Long
    MaxValue = 100

    For i = 1 To MaxValue
         ' Do something
    Next i

    i = MaxValue

    'Use i now
End Sub

如果已经编写了很多使用i的代码,这应该可以解决问题。恕我直言,你不应该在增量循环过程中使用增量变量,因为它会导致你刚刚经历的错误(除非你真的知道你正在做什么,例如知道什么是{{1}等等。)。

此外,一个好的设计实践是将循环运行不是硬编码的最大值,而是运行一个变量,该变量保存此值或在程序中非常明显的位置声明的某个常量。这使得修改代码更容易,并且更有可能保持无bug。

答案 1 :(得分:0)

在数组中,第一个元素的索引为零,第二个元素为1,依此类推。第100个元素是99.所以试试这个

 For i = 0 to 99

答案 2 :(得分:0)

上面的for循环就像

i = 0
While i < 101
    ' DoSomething
    array(i)
    i = i + 1
End While

在最后一次迭代i = 101之后且条件为假,因此您会看到“超出”您所期望的值。

但真正的原因是大小为N 的数组的索引经常从0变为N-1 ,因此您应该编辑for循环以从0开始运行至99

编辑:

编辑后很清楚地看到OP正在使用1索引数组。这意味着下面的代码应该可以正常工作而不会出现任何超出范围的错误

For i = 1 to 100
    array(i) ' Do something with it
Next i

除非OP在循环中访问array(i + 1)或更高。不幸的是我们永远不会知道

答案 3 :(得分:0)

这个问题我有点晚了,但是我自己才遇到这个问题。我用过

For cntr = 1 to Limit
.
...Run Loop Code
    If cntr = Limit Then Exit For
Next cntr

在我的循环中,并且计数器未超过我的限制。