在调试 VBA 时运行循环

Posted

技术标签:

【中文标题】在调试 VBA 时运行循环【英文标题】:Running a loop while debugging VBA 【发布时间】:2014-06-27 10:23:50 【问题描述】:

问题

我正在尝试调试一些代码,但在中间某处我停在了断点处。现在我想更改一些变量并多次运行某个循环。

我走了多远?

我知道如何更改变量,但是在尝试在即时窗口中运行循环时不知何故卡住了。这是一个例子:

Dim i As Integer 
Dim j As Integer 
For i = 0 To 6
       j=i    ' Do something
Next i 

我尝试了几种代码变体,但每次都收到以下错误:

编译错误:下一步没有for

其他相关信息

我尝试搜索,但主要是找到有关循环问题的信息,而我很确定循环本身很好。 (尤其是我在到达断点之前到达它)。

我看到有人解决这种情况的唯一地方,他将循环减少到一行,但是每次都这样做对我来说是非常不切实际的。

我意识到我可以调用一个包含循环的函数,然后该函数调用可能会起作用,但这又感觉非常不切实际。所以我想归结为以下问题。

问题

在 Excel 中调试 VBA 代码时运行循环的实用方法是什么?

【问题讨论】:

那么您是想将循环代码输入到即时窗格中,还是要乱序重新运行循环? 【参考方案1】:

我想我理解你的问题。您想在即时窗口中运行多行代码块(即循环)。这会引发错误,因为即时窗口仅适用于单行代码。

除了你已经提到的那些,我没有任何建议。我建议将您的测试循环放入一个单独的函数中并从即时窗口调用它:

Sub Test()
Dim i As Integer 
Dim j As Integer 
For i = 0 To 6
       j=i    ' Do something
Next i 
End

另一种选择是设置多个断点。您还可以使用 F8 一次运行一行代码。

首选方法(即大多数人实际使用的方法)可能是使用 IDE 的全部功能,其中包括即时、本地和监视窗格。您可以在运行时通过在即时窗格中直接赋值来更改大多数变量的值(i=6 将完全按照您的想法进行操作)。 IDE 还允许您设置断点、添加监视条件、使用 F8 逐行执行代码、使用 Shift+F8 执行函数或过程调用,使用鼠标/光标跳过(和返回)代码,除了少数例外,您甚至可以在运行时添加新变量

【讨论】:

不是我希望的答案,但你确实明白了我的问题的重点。如果没有方便的方法,那当然也是一个答案。 @David Zemens,我同意您的回答,但您确定它属于我自己的回答的编辑吗?如果您认为这是最好的地方,我会离开它。 我认为可以对您的答案进行编辑-它扩展了您已经触及的内容(断点),并且可能对将来偶然发现此问题并遇到类似问题的任何人有用。 【参考方案2】:

实际上有一种方法可以在即时窗口中使用循环或其他多行语句 - 使用冒号 : 来分隔语句而不是换行。 完整的解决方案描述为here。 请注意,在即时窗口中您也不必使用 Dim 语句声明变量。

总而言之,你的 sn-p 看起来像这样:

For i = 0 To 6: j=i: debug.Print i+j: Next i 

【讨论】:

由于这只是一种解决方法,我不会将其作为可接受的答案,但你确实得到了我的投票! @DennisJaheruddin,这当然取决于您,但我认为您当前接受的答案是解决方法。该问题询问如何在调试期间运行循环。方法是在即时窗口中将循环作为多行语句提交,这是通过使用“:”来实现的,如我的回答中所述。

以上是关于在调试 VBA 时运行循环的主要内容,如果未能解决你的问题,请参考以下文章

excel 运行VBA效率变低了 原来excel运行VBA程序,很快就执行完毕,现在运行相同的程序,效率变得很慢

Excel VBA:宏无法识别循环中的 For

在 VBA 循环中保存 excel 文件

VBA绘制Excel图表

如何运行 VBA 循环来格式化每个工作表并创建摘要选项卡

VBA 使用“或”条件执行直到循环