Excel 执行直到循环以获取大于某个数字的单元格值

Excel 执行直到循环以获取大于某个数字的单元格值,excel,vba,loops,Excel,Vba,Loops,我希望代码读取'vResults(1,I)'的值,如果它大于21,我希望它将'vInputs(5,I)'的值增加1,并继续这样做,直到'vResults(1,I)'大于21 不会显示任何错误,但Excel会崩溃 Sub CreateTestResultTableV2() Application.ScreenUpdating = False 'helps the code run faster Dim vInputs, vResults() Dim c As Intege

我希望代码读取'vResults(1,I)'的值,如果它大于21,我希望它将'vInputs(5,I)'的值增加1,并继续这样做,直到'vResults(1,I)'大于21

不会显示任何错误,但Excel会崩溃

Sub CreateTestResultTableV2()
    Application.ScreenUpdating = False 'helps the code run faster

    Dim vInputs, vResults()
    Dim c As Integer, i As Integer

    'create INPUTS 
    c = Range("b5").End(xlToRight).Column
    vInputs = Range("b5", Cells(9, c))
    'determine last value in the column
    c = UBound(vInputs, 2)

    'create RESULTS 
    ReDim vResults(1 To 3, 1 To c)

    For i = 1 To c
        If vInputs(1, i) > 22 Then
            'set values
            Range("j16") = vInputs(1, i)
            Range("n12") = vInputs(3, i)
            Range("r14") = vInputs(5, i)

            'copy output values into RESULTS 
            vResults(1, i) = Range("h41")
            vResults(2, i) = Range("k41")
            vResults(3, i) = Range("z14")

            Do Until vResults(1, i) > 21
                vInputs(5, i).Value = vInputs(5, i).Value + 1
            Loop
        End If
    Next i

    Range("c47").Resize(3, c) = vResults
    Application.ScreenUpdating = True
End Sub

do-until
循环重复其指令,直到测试条件变为
true
。在您的情况下,您的情况永远不会改变:

Do Until vResults(1, i) > 21
    vInputs(5, i).Value = vInputs(5, i).Value + 1
Loop
您将进入循环,直到
vResults(1,i)
大于21,但由于该值从未更改,因此循环永远不会结束(也称为无限循环)。Windows最终会说excel没有响应,并会询问您是否要结束该过程以摆脱循环,这可能看起来应用程序崩溃了


要么更改
vResults(1,i)
的值,要么更改条件以检查将在循环中更改的其他内容(可能
vinput(5,i)
)。

直到vResults(1,i)>21为止<代码>循环
-此循环中的任何内容都不会改变
vResults(1,i)
,因此将无休止地循环。感谢您的回复。我把'Do Until vResults(1,I)=21'放在这里,但现在它给出了一个对象所需的错误?对不起,我误读了你的评论。。。检查循环时,可能需要检查是否仍在单元格范围内。如果只想更改某个单元格周围的单元格,可以使用
Offset
属性。这使您不必关心范围限制(仅工作表的限制)检查答案int这可能是错误的来源