【问题标题】:Troubles stopping my loop停止我的循环的麻烦
【发布时间】:2017-08-13 16:31:54
【问题描述】:
Do While Cells(i, 1).Value <> ""

   ....

    End If
    i = i + 1
Loop
End Sub

没错。它适用于数字并完美停止。但与文本。它不会停止。

理想情况下,我想停在内容的最后一行,而不是 Excel 中的最后一行。我设法让它与数字一起正常工作,但我无法用文本修复它。

任何帮助都会很棒,因为我是 VBA 的初学者。

Sub checkRoutine()
Dim i As Integer
Dim LastRow As Long

i = 1


Do While Cells(i, 1).Value <> ""
    If IsNumeric(Cells(i, 1).Value) Then Cells(i, 2).Value = Cells(i, 1).Value & " " & Cells(7, 5).Value

    If Not IsNumeric(Cells(i, 1).Value) Then
        LastRow = Range("A" & Rows.Count).End(xlUp).row + 1
        ActiveSheet.Cells(LastRow, "A").Value = Cells(i, 1).Value & " " & Cells(7, 5).Value
    End If
    i = i + 1
Loop
End Sub

【问题讨论】:

  • 我已重新打开,但请考虑找到最后一行并改用 for 循环。
  • 我们需要看到更多你的循环才能解释这种现象。如果它们是数字或文本,您提供的内容应该无关紧要。
  • 如果您要不断扩大 A 列中值的数量,那么 yes 您将崩溃。只需要一个文本值,您将继续将值写入 A 列,直到您到达工作表的末尾或用完 i 的空间(作为整数)。
  • 如果您找到最后一个值并将其用作For ... Next 中的停止点,那么它将被锁定,您可以在其下方添加文本而不会产生任何后果。如果您像现在一样使用Do While ...,它会重新评估每个循环,并在现有值下添加其他值会导致崩溃。
  • 仅供参考,如果您希望某人收到回复通知,请使用@TheirName 这样做。无论如何,将i 声明为Long,而不是Integer,如果您知道需要停在哪一行,正如人们一直告诉您的那样,您需要一个For i = start to finish 循环,finish 是,我猜,你的LastRow。我投票结束这个问题,因为不清楚你在问什么,直到你edit它来澄清“不起作用”的确切含义。当您对 Stack Overflow 一半的 VBA 专业知识摸不着头脑时,这表明您的问题并不清楚。

标签: excel vba loops automation


【解决方案1】:

按照很多人的建议,您需要更改为使用For 循环:

Sub checkRoutine()
    Dim i As Long
    Dim LastRow As Long

    LastRow = Range("A" & Rows.Count).End(xlUp).row
    For i = 1 To LastRow
        If IsNumeric(Cells(i, 1).Value) Then
            Cells(i, 2).Value = Cells(i, 1).Value & " " & Cells(7, 5).Value
        Else
            LastRow = Range("A" & Rows.Count).End(xlUp).row + 1
            Cells(LastRow, "A").Value = Cells(i, 1).Value & " " & Cells(7, 5).Value
        End If
    Next
End Sub

【讨论】:

  • LastRow 只在For i = 1 To LastRow 行中被评估一次。这意味着在循环内增加它不会改变迭代次数。
  • @Comintern - 没错 - 它在一开始就被评估并“锁定”。因此,代码生成的新行不会被处理,因此不会出现无限循环。
  • @Comintern - 出于某种原因,OP 想要在现有内容之下编写内容。 (老实说,我怀疑Cells(LastRow, "A").Value = 应该是Cells(LastRow, "B").Value =,与Cells(i, 2).Value = 对齐。)可能试图将数字和字母排序到不同的块中?
  • YowE3K 非常感谢。我对其进行了测试,并且效果很好。在我的for循环中,我做了“For Each text In ActiveSheet.Range("A1:A11") ...End If Next text End Sub。但它没有用。幸运的是你使用了“If and Else”和“ For i = 1 To LastRow" 解决了我的问题。再次非常感谢 YowE3K
猜你喜欢
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2021-08-17
  • 2023-03-13
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多