Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试VBA时运行循环 问题 我试图调试一些代码,在中间的某个地方,我在断点处停了下来。现在我想更改一些变量,并多次运行某个循环 我走了多远?_Vba_Excel_Loops_Debugging_Immediate Window - Fatal编程技术网

调试VBA时运行循环 问题 我试图调试一些代码,在中间的某个地方,我在断点处停了下来。现在我想更改一些变量,并多次运行某个循环 我走了多远?

调试VBA时运行循环 问题 我试图调试一些代码,在中间的某个地方,我在断点处停了下来。现在我想更改一些变量,并多次运行某个循环 我走了多远?,vba,excel,loops,debugging,immediate-window,Vba,Excel,Loops,Debugging,Immediate Window,我知道如何更改变量,但当我试图在即时窗口中运行循环时,不知何故我被卡住了。以下是一个例子: Dim i As Integer Dim j As Integer For i = 0 To 6 j=i ' Do something Next i 我尝试了代码的几种变体,但每次都出现以下错误: 编译错误:下一步不带for 其他有关资料 我尝试过搜索,但大部分都找到了有关循环问题的信息,同时我非常确定循环本身是好的。(特别是当我到达断点之前) 我唯一看到有人添加这种情况的地方

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

Dim i As Integer 
Dim j As Integer 
For i = 0 To 6
       j=i    ' Do something
Next i 
我尝试了代码的几种变体,但每次都出现以下错误:

编译错误:下一步不带for

其他有关资料 我尝试过搜索,但大部分都找到了有关循环问题的信息,同时我非常确定循环本身是好的。(特别是当我到达断点之前)

我唯一看到有人添加这种情况的地方是,他将循环减少到一行,但是每次这样做在我的情况下是非常不切实际的

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

问题
在Excel中调试VBA代码时运行循环的实用方法是什么?我想我理解您的问题。您希望在即时窗口中运行多行代码块(即循环)。这会引发错误,因为即时窗口仅用于单行代码

除了你刚才提到的建议外,我没有其他建议。我建议将测试循环放入一个单独的函数中,并从即时窗口调用该函数:

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遍历函数或过程调用、使用鼠标/光标遍历(或返回)代码,除少数例外,您甚至可以在运行时添加新变量

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

总而言之,您的代码片段如下所示:

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

那么你想在即时窗格中输入循环代码,还是想按顺序重新运行循环?这不是我希望的答案,但你确实明白了我问题的重点。如果没有方便的方法,那当然也是答案。@David Zemens,我同意你的答案,但你确定它属于我自己答案的编辑吗?如果你认为这是最好的地方,我会留下它。我认为它可以作为对你答案的编辑——它扩展了你已经触及的东西(断点),并且可能对将来遇到类似问题的任何人都有用。因为这仅仅是一个解决方法,我不会让它成为公认的答案,但你会得到我的投票@DennisJaheruddin,这当然取决于你,但我认为你目前接受的答案是解决办法。问题是如何在调试期间运行循环。方法是在即时窗口中以多行语句的形式提交循环,这是通过使用“:”实现的,如我的回答中所述。