VBA循环和if语句问题

我有以下代码的问题。 我希望列“U”中的值为“long”的每个单元格都被复制到新的表格中。 但我开发的代码只检索第一个结果。 它在“U6”之后停止。 你能帮我么?

Sub reportcrea () Worksheets("TLM").Select ActiveSheet.Range("U3").Select Do If ActiveCell.Value = "long" Then ActiveCell.EntireRow.Select Selection.Copy Sheets("report").Select Range("A" & Rows.Count).End(xlUp).Offset(1).Select ActiveSheet.Paste Application.CutCopyMode = False Else ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell.Offset(1, 0)) End sub () 

我在这行代码中发现了一个错误:

 Range("A" & Rows.Count).End(xlUp).Offset(1).Select 

Offset需要两个参数,所以它应该是这样的:

 Range("A" & Rows.Count).End(xlUp).Offset(1,0).Select 

另外,在粘贴剪贴板中的内容后,您应立即取消CutCopy模式:

 ActiveSheet.Paste 'Paste is done here Application.CutCopyMode = False 'This is a good practice 

看看是否有帮助。 另外, TLM表格的屏幕截图可以帮助我们更准确地分析问题。

首先, End Sub不应该有拖尾括号。 当我将它复制到一个模块中时,它立即突出显示一个错误。

您的循环使用ActiveCell.Offset(1, 0).Select两次:

  If ActiveCell.Value = "long" Then ActiveCell.EntireRow.Select Selection.Copy ActiveCell.Offset(1, 0).Select 'first Offset Sheets("report").Select Range("A" & Rows.Count).End(xlUp).Offset(1).Select ActiveSheet.Paste Application.CutCopyMode = False Sheets("TLM").Select ActiveCell.Offset(1, 0).Select 'second Offset Else 

所以在每个"long"被发现之后,你只能看到每一行。

我在10个“纵向”单元上testing了你的代码,并在report表中find了5个。 我无法复制你的U6站点。