2014-03-03 84 views
0

我試圖設置rng對工作表進行搜索以確定在今天的日期之前是否有任何日期,並且如果沒有移動到下一個工作表。將今天的日期設置爲查找搜索的VBA

我有下面的代碼,正如我想要收集任何行之前或包含今天的日期到「宏按鈕」所在的工作表,但如果沒有任何落入日期到那個標準它將返回一個錯誤,並且我想刪除這個錯誤,如果其他人打開電子表格。

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行一些其他的變化似乎並不能得到它的權利,任何幫助,將不勝感激

+0

我得到你發現了錯誤;我改成了:'設置rng = .Range(「I2:I」&lrow).Find(What:= CDate(tdate))',但只找到符合今天的日期 - 不是更早...我會再看一些,但您可能需要一種替代方法。 –

回答

0

一個簡單的解決辦法是找到的最小值日期範圍並與今天的日期進行比較。

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

希望這有助於=]

+0

此代碼完美地工作,謝謝! 爲了讓它工作起來,我花了一些試驗和錯誤,因爲無論我把它放在我的代碼中,它似乎都返回了很多錯誤,然後我意識到在我的測試表中我沒有任何日期它正在檢查導致錯誤。 再次歡呼! – user3358416

相關問題