【问题标题】:Setting todays date as a cut off for a Find search VBA将今天的日期设置为查找搜索 VBA 的截止日期
【发布时间】:2014-04-03 21:00:19
【问题描述】:

我正在尝试将 rng 设置为搜索工作表以确定是否有任何日期早于或包括今天的日期,以及是否没有移动到下一个工作表。

我有下面的代码,它的工作原理与我想将今天日期之前或包括今天日期的任何行收集到“宏按钮”所在的工作表中,但如果没有任何日期属于该标准将返回错误,如果其他人打开电子表格,我想删除此错误。

Private Sub CommandButton2_Click()

Dim ws As Worksheet, wsCtrl As Worksheet
Dim lrow As Long, rng As Range
Dim tdate As Date

tdate = Date

Set wsCtrl = ThisWorkbook.Sheets("Collate Info")

With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With

For Each ws In ThisWorkbook.Worksheets
If ws.Name = "Collate Info" Then GoTo nextsheet
With ws
    lrow = .Range("I" & .Rows.Count).End(xlUp).Row
    .AutoFilterMode = False
    Set rng = .Range("I2:I" & lrow).Find(what:="<tdate")
    If rng Is Nothing Then GoTo nextsheet
    .Range("I2:I" & lrow).AutoFilter Field:=1, Criteria1:="<" & tdate
    .Range("I3:I" & lrow).SpecialCells(xlCellTypeVisible).EntireRow.Copy
    wsCtrl.Range("A" & wsCtrl.Rows.Count).End(xlUp).Offset(2, 0).PasteSpecial xlPasteValues
    .AutoFilterMode = False
    Application.CutCopyMode = False
End With
nextsheet:
Next

With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub

我在设置 .Find 行时尝试了一些其他变体,但似乎无法正确设置,我们将不胜感激

【问题讨论】:

  • 您的查找出现错误;我改为:'Set rng = .Range("I2:I" & lrow).Find(What:=CDate(tdate))' 但这只找到今天匹配的日期 - 而不是更早......我会再看一些,但您可能需要另一种方法。

标签: vba date excel find


【解决方案1】:

一个简单的解决方案是找到日期范围内的最小值并与今天的日期进行比较。

If Application.WorksheetFunction.Min(.Range("I1:I" & lrow)) > DateValue(Date) Then GoTo nextsheet

希望这会有所帮助 =]

【讨论】:

  • 此代码运行良好,谢谢!我花了一些试验和错误来让它工作,因为它似乎在我把它放在我的代码中的任何地方都返回了很多错误,然后我意识到在我的测试表中我实际上没有任何日期检查从而导致错误。再次干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2017-05-02
  • 2011-09-26
  • 2014-08-11
  • 1970-01-01
相关资源
最近更新 更多