debugging 调试VBA时运行循环

nzk0hqpo  于 2023-06-06  发布在  其他
关注(0)|答案(3)|浏览(157)

问题

我正试图调试一些代码,在中间的某个地方我停在了一个断点处。现在我想改变一些变量,并运行某个循环几次。

我走了多远?

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

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

我尝试了代码的几种变体,但每次都得到以下错误:
编译错误:下一个没有for

其他相关信息

我试着搜索,但主要是找到有关循环问题的信息,同时我很确定循环本身是好的。(尤其是在我到达断点之前)。
唯一的地方,我看到有人addres这种情况,他减少了循环到一行,但这样做的每一次将是非常不切实际的,在我的情况下。
我意识到我可以调用一个包含循环的函数,然后函数调用可能会起作用,但这又感觉很不切实际。所以我想这可以归结为下面的问题。

问题

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

z9gpfhce

z9gpfhce1#

实际上有一种在即时窗口中使用循环或其他多行语句的方法-使用冒号:来分隔语句,而不是使用新行。完整的解决方案描述为here。注意 * 在即时窗口中 * 你也不必使用Dim语句声明变量。
总而言之,您的代码片段看起来像这样:

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

0h4hbjxa2#

我想我明白你的问题了。你想运行一个多行代码块(即循环)。这会引发错误,因为“即时窗口”仅用于单行代码。
除了你已经提到的那些,我没有其他建议。我建议将测试循环放到一个单独的函数中,并从即时窗口调用它:

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

另一种选择是设置多个断点。您也可以使用F8一次运行一行代码。
可能是 * 首选 * 的方法(即大多数人实际上所做的)是使用IDE的全部功能,其中包括Immediate、Locals和Watch窗格。你可以在即时窗格中直接赋值,在运行时修改大多数变量的值(i=6将完全按照你的想法去做)。IDE还允许您设置断点、添加监视条件、使用F8逐行单步执行代码、使用Shift+F8单步执行函数或过程调用、使用鼠标/光标单步执行(和返回)代码,除少数例外情况外,您甚至可以在运行时添加新变量。

yqhsw0fo

yqhsw0fo3#

解决方案是使用语句分隔符“:”(冒号)和行连续字符“”(下划线)。
注意冒号之间的空格:和下划线

以下是我的即时窗口:

UpperRow = selection.end(xldown).row
UpperCol = selection.column
LowRow = selection.rows(1).row
LowCol = 5
Set Rng = Cells(LowRow, LowCol)
For i = LowCol To UpperCol Step 2 : _
  cl = Split(Cells(1, i).Address, "$")(1) : _
  s = "$" & cl & LowRow & ":$" & cl & "$" & UpperRow : _
  Set Rng = Union(Rng, Range(s)) : _
Next i 

? rng.address
$E$301:$E$302,$G$301:$G$302,$I$301:$I$302,...

下面是我的MSOffice365Excel即时窗口截图
Excel VBA Immediate Window clip

相关问题