“Do While”“Loop”和“While”“Wend”循环。有啥不同?

Posted

技术标签:

【中文标题】“Do While”“Loop”和“While”“Wend”循环。有啥不同?【英文标题】:"Do While" "Loop" and "While" "Wend" Loop. What's the difference?“Do While”“Loop”和“While”“Wend”循环。有什么不同? 【发布时间】:2015-12-20 02:35:11 【问题描述】:

在 *** 中阅读了一些答案,我看到了一个 while wend 循环。我习惯了do whileloop,所以我想知道这两个循环之间有什么区别。

我做了一些测试(下面的代码),似乎都给了我相同的结果。

Sub test_loop_1()
Dim i As Integer
i = 1
Do While i < 10
    Cells(i, 1) = i
    i = i + 1
Loop

End Sub

Sub test_loop_2()
Dim i As Integer
i = 1
While i < 10
    Cells(i, 1) = i
    i = i + 1
Wend

End Sub

【问题讨论】:

另外你不能使用Exit While @PortlandRunner,您的链接指向 VB.NET 资源;在那里,它表明 Exit While 确实存在,但不适用于 VBA; correct VBA link is here. @MarceloScofano - 很好的收获。由于在我发表第一条评论后给出了这么多答案,我将其删除,因为它确实不再具有任何价值。 【参考方案1】:

事实上,您不需要“DO WHILE”,因为您可以在没有“While”的情况下“DO-LOOP”。

如果我需要在没有隐含条件的情况下至少执行一次(或多次)操作,我会使用“DO LOOP”,因为 WHILE-WEND 强制执行。

举个例子,一种闹钟:

  Do
    Display Time at screen
    Sounds a buzz
    if user confirm
       exit do
    end if
  Loop

【讨论】:

很有趣,但这似乎是“do loop”和“do while loop”之间的区别。不是我想要的。【参考方案2】:

除了While Wend不具备的语法选项之外,我认为它们的执行没有太大区别:

Do
    someCode
While (someCondition)

至于速度,我做了一个简单的测试:

Sub whileLoopTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

While (i < 500000000)
    j = i + 2
    i = i + 1
Wend

Debug.Print "While execution time: " & Timer - StartTime
End Sub


Sub doWhileTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

Do While (i < 500000000)
    j = i + 2
    i = i + 1
Loop

Debug.Print "Do While execution time: " & Timer - StartTime
End Sub

结果:

While execution time: 6,429688  
While execution time: 6,429688
While execution time: 6,441406
Do While execution time: 6,429688
Do While execution time: 6,449219
Do While execution time: 6,4375

【讨论】:

至于速度对我来说几乎是一样的。为什么要创建一个完全相同的循环,只是没有一些功能?一位用户评论(并且不知道为什么被删除)“While Wend”将是“Do While”的旧版本,以保持向后兼容性。你知道这是不是真的? @vsoraas @umLu 我不确定,但 While Wend 先出现似乎合乎逻辑,然后 Do While 稍后引入,并具有更多更好的语法和功能。【参考方案3】:

我提到的答案不再可见,但这个答案仍然成立。 While/Wend 是 Basic 的后遗症,Do/Loop 应该是您的首选语法,因为:

    支持before进入循环 Do While [condition] ... Loop(零次或多次循环执行)检查条件 支持进入循环 Do ... Loop While [condition](一次或多次循环执行)后检查条件 它不支持特定条件 Do ...(some logic) (Exit Do) ... Loop(一个或多个循环执行,可能无限)

【讨论】:

VBA 中没有“退出时”吗?还有一位用户评论说,“While Wend”将是“Do While”的旧版本,为了向后兼容而维护。你知道这是不是真的? @NeepNeepNeep "Exit While" 不存在,是的,我相信 While/Wend 的维护是为了向后兼容。确实,您应该使用 Do/Loop。 @vsoraas 的评论似乎不再出现了。 只是补充一点,Repeat ... UntilDo ... Loop While 的旧版本(虽然我记得看到过 Do ... Loop Until 的版本,但我不记得那是在 VBA 中还是另一种基本风格)。 确实不做事情 1 和 2

以上是关于“Do While”“Loop”和“While”“Wend”循环。有啥不同?的主要内容,如果未能解决你的问题,请参考以下文章

“Do While”“Loop”和“While”“Wend”循环。有啥不同?

VBA 中 do while loop 用法

“while”循环和“do while”循环之间的区别

sql server中do while循环怎么写

在“do...while”循环中出现“while expected”错误

VB 循环语句