Excel 根据工作表1中的A列条件复制并粘贴到工作表2未执行

Excel 根据工作表1中的A列条件复制并粘贴到工作表2未执行,excel,vba,Excel,Vba,我想根据A列将第1页的行(从第2行开始)复制并粘贴到第2页。A列包含日期。如果第2页上的某个单元格中的某个日期大于或等于该日期,我希望将该行复制并粘贴到第2页。我运行了宏,但它在第一个实例后停止执行。非常感谢您就如何解决此问题提供任何建议/指导 Sub CopyRows() Dim MinDate As Date MinDate = ThisWorkbook.Sheets("sheet3").Cells(2, 124).Value lrow = Sheets("sh

我想根据A列将第1页的行(从第2行开始)复制并粘贴到第2页。A列包含日期。如果第2页上的某个单元格中的某个日期大于或等于该日期,我希望将该行复制并粘贴到第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

我不清楚你说的“第一次执行后停止执行”是什么意思

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

代码正在测试
单元格(I,1)
并复制
活动表上的
行(I)
。如果该工作表不是每次测试一行时都是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键,一次一行地单步执行宏。当它以这种方式运行时,如果你把鼠标放在一个变量上,它会告诉你它的当前值是什么。您可以这样做来找出代码中的问题所在。

我不清楚“在第一个实例之后停止执行”是什么意思

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

代码正在测试
单元格(I,1)
并复制
活动表上的
行(I)
。如果该工作表不是每次测试一行时都是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键,一次一行地单步执行宏。当它以这种方式运行时,如果你把鼠标放在一个变量上,它会告诉你它的当前值是什么。您可以这样做来找出您的问题在代码中的位置。

它在日期>=某个特定日期的第一个实例之后停止。例如,我在第一列中有两行3/1/12。但是,该代码只会复制第一个实例,而不会复制第二个。我刚刚使用包含3/1/12的多个单元格进行了测试,结果正常。您确定Excel将值视为日期而不是文本吗?尝试合并这两个值并查看是否有错误:
如果CDate(单元格(I,1).Value)>=CDate(MinDate),则它在日期的第一个实例>=某个日期后停止。例如,我在第一列中有两行3/1/12。但是,该代码只会复制第一个实例,而不会复制第二个。我刚刚使用包含3/1/12的多个单元格进行了测试,结果正常。您确定Excel将值视为日期而不是文本吗?尝试合并这两个值,看看是否有错误:
如果CDate(单元格(I,1).Value)>=CDate(MinDate),则