基于列A中的条件1复制并粘贴到工作表2,而不执行工作表1

时间:2012-03-23 15:53:44

标签: excel vba

我想根据列A将表1中的行(从第2行开始)复制并粘贴到表2中。列A包含日期。如果行大于或等于我在另一个工作表上的单元格中的某个日期,我想将行复制并粘贴到工作表2。我运行宏但它在第一个实例后停止执行。任何有关如何解决此问题的建议/指导都非常感激。

Sub CopyRows()

    Dim MinDate As Date

    MinDate = ThisWorkbook.Sheets("sheet3").Cells(2, 124).Value

    lrow = Sheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row

    For I = 2 To lrow
        dest = Sheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(I, 1).Value >= MinDate Then
            Rows(I).Copy Sheets("sheet2").Rows(dest + 1)
        End If
    Next I

End Subl

1 个答案:

答案 0 :(得分:1)

我不清楚你的意思是“在第一个实例后停止执行。”

如果您的意思是宏正在复制第一行> = MinDate然后不复制任何其他行,则您显示的子例程中的任何内容都不会导致该行。但它确实存在一些潜在的问题。

代码正在测试Cells(I,1)并在Rows(I)上复制ActiveSheet。如果每次测试一行时该表不是Sheet1,那么它不会从正确的工作表进行测试或复制。您可以通过明确说明您正在测试和复制的工作表来解决这个问题。

If Sheets("sheet1").Cells(I, 1).Value >= MinDate Then
    Sheets("sheet1").Rows(I).Copy Sheets("sheet2").Rows(dest + 1)
End If

我实际上会重新编写例程来使用工作表对象。我还包含了一些状态消息,因此您可以看到正在复制哪些行。

Sub CopyRows()
    Dim MinDate As Date, lRow As Long, i As Integer, lDest As Long
    Dim shtFrom As Worksheet, shtTo As Worksheet

    Set shtFrom = ThisWorkbook.Sheets("sheet1")
    Set shtTo = ThisWorkbook.Sheets("sheet2")

    MinDate = ThisWorkbook.Sheets("Sheet3").Cells(2, 124).Value

    lRow = shtFrom.Cells(Rows.Count, "A").End(xlUp).Row

    For i = 2 To lRow
        Application.StatusBar = "Row " & i & " of " & lRow
        lDest = shtTo.Cells(Rows.Count, "A").End(xlUp).Row
        If shtFrom.Cells(i, 1).Value >= MinDate Then
            Application.StatusBar = Application.StatusBar & "  Copying..."
            shtFrom.Rows(i).Copy shtTo.Rows(lDest + 1)
        End If
    Next i
    Application.StatusBar = False

End Sub

如果这不是您遇到的问题,请提供更多详情。

如果您不知道任何更多细节,可以通过在VBA屏幕上的宏中按F8一次一步地通过宏。当它以这种方式运行时,如果将鼠标放在变量上,它将告诉您它的当前值是什么。您可以这样做以找出代码中您的问题所在。