【问题标题】:"While .. End While" doesn't work in VBA?“While .. End While”在 VBA 中不起作用?
【发布时间】:2014-05-31 02:19:38
【问题描述】:

下面的代码是 VBA for Excel。我正在使用 Excel 2007 附带的 Visual Basic 编辑器。

Dim counter As Integer
counter = 1
While counter < 20
    counter = counter + 1
end while '<- the compiler is complaining about this statement

代码无法编译。在代码上方我只有声明。根据MSDN,这应该可以工作,但不能。发生了什么事?

【问题讨论】:

  • 到目前为止的两个答案中(Do While / LoopWhile / Wend)我推荐 Do While 选项,原因很简单,如果需要,您可以使用 Exit Do 打破这个循环功能。

标签: vba excel


【解决方案1】:

While 结构不是以End While 结束,而是以Wend 结束。

While counter < 20
    counter = counter + 1
Wend

请注意,此信息在文档中很容易获得;只需按 F1page you link to 处理 Visual Basic .NET,而不是 VBA。虽然(不是双关语)在 VBA 和 VB.NET 之间的语法存在一定程度的重叠,但不能仅仅假设一个文档可以直接应用于另一个文档。

也在 VBA 帮助文件中:

提示Do...Loop 语句提供了一种更结构化和更灵活的方式来执行循环。

【讨论】:

  • 感谢您的建议。我必须说,有两种不同的语言,实际上是三种,具有几乎相同的名称和几乎相同的语句,这有点令人困惑。
【解决方案2】:

VBA 不是 VB/VB.NET

正确的使用参考是Do..Loop Statement (VBA)。另见文章Excel VBA For, Do While, and Do Until。一种写法是:

Do While counter < 20
    counter = counter + 1
Loop

(但For..Next 在这里可能更合适。)

编码愉快。

【讨论】:

  • +1 我会去For .. Next。它还允许退出Exit For
  • @Fionnuala,您也可以使用Exit Do 退出Do While..Loop。我不确定你是否可以退出While.. Wend
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2017-11-13
相关资源
最近更新 更多