【问题标题】:Running a loop while debugging VBA在调试 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 代码时运行循环的实用方法是什么?

【问题讨论】:

  • 那么您是想将循环代码输入到即时窗格中,还是要乱序重新运行循环?

标签: vba excel loops debugging immediate-window


【解决方案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,这当然取决于您,但我认为您当前接受的答案是解决方法。该问题询问如何在调试期间运行循环。方法是在即时窗口中将循环作为多行语句提交,这是通过使用“:”来实现的,如我的回答中所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多