VBA-在到达特定行时请保留操作

时间:2018-06-27 06:33:38

标签: excel vba excel-vba

在我的VBA代码中,我从表的最后一行转到表的顶部。但是我希望“直到循环”到达第10行时结束。

现在我正在使用此“直到循环”:

Do 
    ' Do Something
Loop Until ActiveCell.Address = "$N$10:$BI$10"

我该如何更改到达第10行时将停止的代码?

2 个答案:

答案 0 :(得分:2)

假定其余代码正确使用:

Loop Until ActiveCell.Row = 10 

如果失败,则问题出在代码其他部分的逻辑上。 ActiveCell永远不会到达第10行。

答案 1 :(得分:1)

以更理论的方式回答您的问题。在VBA中有多种退出Do循环的方法。

  1. 正确的方法

    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
    
  2. 强制方式
    您可以退出任何循环,包括使用所谓的Do语句的Exit。在到达没有问题语句时,这会跳过当前正在进行的Do循环。尽管通常应该避免使用Exit语句,但是在大多数情况下,可以避免在代码的WhileUntil部分以适当的条件使用它,在某些情况下可以派上用场。

    此外,请记住,在嵌套的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
    
  3. 不太好的强制方式

    或者,您可以使用Stop语句停止整个挤出。我强烈建议您不要这样做,但是从技术上讲,这是一种可能,所以我在这里列出。与End类似,它结束执行,但是与End(例如End Sub)不同,它不会关闭任何文件或清除任何变量-因此从技术上讲,这意味着您可以使用它退出一个循环。但是,我建议仅使用Exit语句代替。我真的无法想到我会使用这种情况的情况。