“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 while
loop
,所以我想知道这两个循环之间有什么区别。
我做了一些测试(下面的代码),似乎都给了我相同的结果。
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 ... Until
是 Do ... Loop While
的旧版本(虽然我记得看到过 Do ... Loop Until
的版本,但我不记得那是在 VBA 中还是另一种基本风格)。
确实不做事情 1 和 2以上是关于“Do While”“Loop”和“While”“Wend”循环。有啥不同?的主要内容,如果未能解决你的问题,请参考以下文章
“Do While”“Loop”和“While”“Wend”循环。有啥不同?