【问题标题】:Trouble with for next loop not stopping下一个循环没有停止的问题
【发布时间】:2018-07-07 15:37:31
【问题描述】:

我正在尝试将 列 D 中包含 waiting 的单元格的多张工作表上的所有行复制到名为 waiting 的工作表中。这是代码。循环运行太远导致重复粘贴。
我认为是 j = j + 1 造成的,但我不知道如何纠正。

Sub Waiting()

  ' unfilter entire workbook

   Dim sh As Worksheet

   For Each sh In Worksheets

      sh.AutoFilterMode = False
   Next sh

  ' copy rows to waiting sheet

  Dim c As Range
  Dim j As Integer
  Dim Target As Worksheet

  Set Target = ActiveWorkbook.Worksheets("Waiting")

  j = 1

  For Each sh In Worksheets
    For Each c In sh.Range("D1:D250")   ' Do 1000 rows
      If c = "waiting" Then
         sh.Rows(c.Row).Copy Target.Rows(j)
         j = j + 1
      End If
    Next c
  Next sh
 ' j=j+1 is causing infinite loop

End Sub

【问题讨论】:

  • 如果sh.name = target.name,则需要跳过sh。

标签: vba excel for-loop infinite-loop


【解决方案1】:

如果sh.name = target.name,则需要跳过sh。

Dim c As Range
Dim j As Integer
Dim Target As Worksheet

Set Target = ActiveWorkbook.Worksheets("Waiting")
j = 1

For Each sh In Worksheets
    if sh.name <> target.name then
        For Each c In sh.Range("D1:D250")   ' Do 1000 rows
            If c = "waiting" Then
               sh.Rows(c.Row).Copy Target.Rows(j)
               j = j + 1
            End If
        Next c
    end if
Next sh

【讨论】:

  • jsyk, If c = "waiting" Then 是区分大小写的比较。这就是我将循环中的工作表名称与目标工作表名称而不是字符串“Waiting”进行比较的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
相关资源
最近更新 更多