【问题标题】:Why is my VBA For Loop stopping after 30 rows of Running为什么我的 VBA For Loop 在运行 30 行后停止
【发布时间】:2022-01-25 23:48:18
【问题描述】:
Sub CountFruit()
    Dim RowNumber As Long
    Dim i As Long
    Dim U As Long
   
    'J = Worksheets("Sheet2").UsedRange.Rows.Count
  
    U = 2
    RowNumber = 0
    ' Turn off at the start
    'TurnOffFunctionality
            
     For i = 1 To 65                    
         ' Check if cell of column 2 matches column 1
         If Worksheets("Sheet1").Range("B" & i).Value = Worksheets("Sheet1").Range("A" & U).Value Then                 
             'Copy results to new Sheet                
             Sheet1.Cells(i, 2).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & RowNumber + 1)
                
             RowNumber = RowNumber + 1
             U = U + 1
         End If
     Next i
     ' Print total
     Debug.Print "Cell Content "; CStr(Sheet1.Cells(i, 1).Value); " Row number "; RowNumber + 1; " RowNumber equals "; RowNumber; " I equals"; i; " U equal", U

 'TurnOnFunctionality
End Sub

我正在比较 A 列和 B 列,匹配的列将剩余的 3 列复制到新工作表中。 B 中有错误的条目,所以我使用 A 列的参考来挽救 B 中剩余的 3 列

循环仅适用于 30 行,这正是 1 页的长度(不知道这是相关的。但我不知道为什么它会无缘无故地停在中间。 然而 For 循环中的 i 是一个更高的数字 及其测试每个单元格,所以我循环遍历所有带有 U 变量的单元格

,如果有人能指出我可能出错的地方,那就太棒了

【问题讨论】:

  • 我无法重现错误,我只是复制粘贴了您的代码并在循环结束时 i=66,这是正确的。我唯一能想到的就是数据相关。
  • 代码运行,但是当有 100 行时,它停止将行复制到 sheet2 的 30 行
  • 这里是数据mega.nz/file/…
  • 循环仅适用于 30 行,正好是 1 页的长度是什么意思?打印页?如果是这样,它不应该打扰 VBA。如果不是,你是什么意思?
  • 我想你明白了,是的,U 只在有比赛时才运行,但为什么停在 30 处?有 100 行还有更多匹配项让我仔细检查数据。谢谢!爱你们,节日快乐

标签: excel vba for-loop


【解决方案1】:

如果我对问题的理解正确,您正在寻找这样的东西:

Sub CountFruit()

    Dim J As Long
    Dim i As Long
    Dim U As Long
    Dim Iend As Long
        
    
    'J = Worksheets("Sheet2").UsedRange.Rows.Count
  
    U = 2

            
             For i = 1 To 100
                    
               For U = 1 To 100
                 ' Check if cell of column 2 matches column 1
                If Sheet1.Cells(i, 2).Value = Worksheets("Sheet1").Range("A" & U).Value Then
    
                ' Print total
                Debug.Print "Cell Content "; CStr(Sheet1.Cells(i, 1).Value); " Row number "; J + 1; " J equals "; J; " I equals"; i; " U equal", U
                
                'Copy results to new Sheet
                Sheet1.Cells(i, 2).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
                
                J = J + 1
                Exit For

                End If
                
              Next U
            Next i
    

 
End Sub

【讨论】:

  • 非常感谢杰维!你的回答很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2018-05-25
  • 2021-04-27
相关资源
最近更新 更多