VBA循环和if语句问题

时间:2014-08-11 11:18:51

标签: excel vba

我遇到以下代码的问题。 我希望每个单元格的值都为" long"在专栏#" U"要复制到新工作表中。 但我开发的代码只检索第一个结果。它确实在" 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 ()

2 个答案:

答案 0 :(得分:2)

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

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表的屏幕截图有助于我们更准确地分析问题。

答案 1 :(得分:1)

首先,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岁的#34; long"在report表单中找回5个单元格。我无法重现你的U6停止。

相关问题