在我的VBA代码中,我从表的最后一行转到表的顶部。但是我希望“直到循环”到达第10行时结束。
现在我正在使用此“直到循环”:
Do
' Do Something
Loop Until ActiveCell.Address = "$N$10:$BI$10"
我该如何更改到达第10行时将停止的代码?
答案 0 :(得分:2)
假定其余代码正确使用:
Loop Until ActiveCell.Row = 10
如果失败,则问题出在代码其他部分的逻辑上。 ActiveCell永远不会到达第10行。
答案 1 :(得分:1)
以更理论的方式回答您的问题。在VBA中有多种退出Do
循环的方法。
正确的方法
1.1。 从头到尾
这首先检查条件,如果满足条件,它将进入循环并在每个循环开始时重复满足条件的条件。
Do While i <= 5
'#code here
Loop
这两个是等效的。
Do Until i > 5
'#code here
Loop
1.2。 或直到最后
这与上面描述的几乎相同。唯一的区别是,在开头只有唯一的Do
语句的情况下,您的代码块始终至少执行一次!当您希望至少执行一次某件事,但又不想重复执行,除非满足条件时,这特别有用。
Do
'#code here
Loop While i <= 5
或
Do
'#code here
Loop Until i > 5
强制方式
您可以退出任何循环,包括使用所谓的Do
语句的Exit
。在到达没有问题语句时,这会跳过当前正在进行的Do
循环。尽管通常应该避免使用Exit
语句,但是在大多数情况下,可以避免在代码的While
或Until
部分以适当的条件使用它,在某些情况下可以派上用场。
此外,请记住,在嵌套的Do
循环中,Exit
始终仅退出最内部的循环。这意味着,这只会退出内部循环,而让其他循环运行,就像Continue
Do While (handler = True)
Do
'# execute me
If weird_condition = True Then
Exit Do
' i return to the "handler" loop
End If
field = field + 1
Loop Until field = field_amount
Loop
不太好的强制方式
或者,您可以使用Stop
语句停止整个挤出。我强烈建议您不要这样做,但是从技术上讲,这是一种可能,所以我在这里列出。与End
类似,它结束执行,但是与End
(例如End Sub
)不同,它不会关闭任何文件或清除任何变量-因此从技术上讲,这意味着您可以使用它退出一个循环。但是,我建议仅使用Exit
语句代替。我真的无法想到我会使用这种情况的情况。