【问题标题】:Exit a while loop in VBA/VBS在 VBA/VBS 中退出 while 循环
【发布时间】:2016-01-05 06:50:09
【问题描述】:

我有一个 Excel VBA 程序,它循环遍历数据表中的每一行数据。

我的目标是在布尔值 bFound 设置为 True 后退出 while 循环。

我认为我的条件“Or bFound=True”可能不正确。

bFound = False
While Sheets("Data").Cells(iRow, 1) <> "" Or bFound = True

    If Sheets("Data").Cells(iRow, 11) = Sheets("Data2").Cells(iRow, 1) Then
        bFound = True
    End If

    iRow = iRow + 1
Wend
'exit loop after the boolean=true

【问题讨论】:

标签: vba excel vbscript


【解决方案1】:

使用Do ... LoopExit Do

bFound = False
Do While Sheets("Data").Cells(iRow, 1) <> ""
    bFound = Sheets("Data").Cells(iRow, 11) = Sheets("Data2").Cells(iRow, 1)
    If bFound Then Exit Do
    iRow = iRow + 1
Loop

【讨论】:

  • @bigbryan,请注意,循环外部 iRow 指向已匹配退出条件的行,而不是代码中预期的下一行。
【解决方案2】:

翻转逻辑,我希望这对你有用:

bFound = False
While Sheets("Data").Cells(iRow, 1) <> "" And bFound = False

    If Sheets("Data").Cells(iRow, 11) = Sheets("Data2").Cells(iRow, 1) Then
        bFound = True
    End If

    iRow = iRow + 1
Wend

解释:

While Sheets("Data").Cells(iRow, 1) <> "" And bFound = False

仅当我们仍有数据要处理并且我们仍未更改 bFound 时才允许循环继续进行,其初始值为 False


另一种选择是在 VBS 中使用 While 的可破坏形式:

Do While Sheets("Data").Cells(iRow, 1) <> ""

    If Sheets("Data").Cells(iRow, 11) = Sheets("Data2").Cells(iRow, 1) Then Exit Do

    iRow = iRow + 1

Loop

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多