我遇到了这段代码的问题。宏用于搜索工作表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
答案 0 :(得分:0)
首先将Sheet1
和Sheet3
放在双引号中......它们需要是字符串...没有引号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
更新:如您在问题中所述,测试单元格是否为日期。