Excel宏:当L列中的日期在今天的1个月之内时,将所有行复制到新工作表

时间:2014-09-01 13:44:54

标签: excel vba excel-vba

我遇到了这段代码的问题。宏用于搜索工作表1中的列L,如果它在此列中标识了日期,则应将整行复制到工作表3.

任何指针/更正都会非常感激:)

Sub datecompare()
Dim iMatches As Long
For Each cell In Worksheets(Sheet1).Range("L:L")
    ' If (Len(cell.Value) = 0) Then Exit For
    ' If DateDiff("m", Date, cell.Value) < 1 Then iMatches = (iMatches + 1)
        Worksheets(Sheet1).Rows(cell.Row).Copy Worksheets(Sheet3).Rows(iMatches)
    ' End If
Next
End Sub

2 个答案:

答案 0 :(得分:0)

首先将Sheet1Sheet3放在双引号中......它们需要是字符串...没有引号VBA将它们解释为未定义的变量

第二次带回第二个评论If并将iMatches的增量移动到它自己的行中。现在,增量是If计算为true时执行的唯一指令,此后每次执行复制 - 在您在不匹配的End If(如果取消注释)或您尝试插入Sheet3第0行,因为iMatch从未增加过。

答案 1 :(得分:0)

如果感兴趣的范围实际上不是整个“L”列,则可以在Excel工作表中命名范围(date_range),并将其作为VBA中的范围对象引用。如果它确实是整个列,那么只需取消注释第二个set并注释掉第一个。

    Sub datecompare()
    Dim iMatches As Long
    Dim named_range As Range

    Set named_range = Worksheets("Sheet1").Range("date_range")
    'Set named_range = Worksheets("Sheet1").Range("L:L")


For Each cell In named_range
    If IsDate(cell.Value) Then
        If DateDiff("m", Date, cell.Value) < 1 Then
            iMatches = (iMatches + 1)
            'Worksheets("Sheet1").Rows(cell.Row).Copy Worksheets("Sheet3").Rows(iMatches)
        End If
    End If

Next
End Sub

更新:如您在问题中所述,测试单元格是否为日期。