【问题标题】:Do Until loop to get value of a cell greater than a certain number执行直到循环以获取大于某个数字的单元格的值
【发布时间】:2019-02-19 03:49:30
【问题描述】:

我希望代码读取 '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 vResults(1, i) > 21 ... Loop - 这个循环中的任何内容都不会改变vResults(1, i) 所以只会无休止地转来转去。

标签: excel vba loops


【解决方案1】:

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) 的值,要么更改条件以检查循环中会更改的其他内容(可能是vInputs(5, i))。

【讨论】:

  • 感谢您的回复。我输入了“直到 vResults(1, i) = 21”,但现在它给出了一个对象所需的错误?
  • 对不起,我误读了您的评论...当您检查该循环时,您可能需要检查您是否仍在单元格范围内
  • 如果你只是想改变某个单元格周围的单元格,你可以使用Offset属性。这使您不必关心范围限制(仅工作表的限制)
  • 检查答案 int this post 这可能是错误的根源
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多