2015-09-04 63 views
0

我有兩個文本框,分別在兩個框中輸入兩個日期。我希望宏瀏覽一列日期,並在文本框中鍵入的兩個日期之間隱藏所有日期爲而不是。第一個文本框的日期應該是過去的第二個文本框的日期。VBA:簡單日期宏不起作用

我有以下代碼:

Set ws2 = Sheets("Test") 

Dim StartDate As String 
Dim EndDate As String 

ws2.Range("G2").Value = TXTDate1.Text 
ws2.Range("G3").Value = TXTDate2.Text 

StartDate = ws2.Range("G2").Value ' Start Date in test tab 
EndDate = ws2.Range("G3").Value 

StartDate = Trim(ws2.Range("G2").Value) 
EndDate = Trim(ws2.Range("G3").Value) **'Reverses the format from American date format to English date format** 

Set temprange = ActiveSheet.Range("D5").End(xlDown) 
Set temprange = Range(Range("D6"), temprange) 


For Each z In temprange 

z.EntireRow.Hidden = True 

If TXTDate1.Value <> "" Then 

If z.Offset(0, 5).Value > StartDate Then 

If z.Offset(0, 5).Value < EndDate Then **'PART THAT IS NOT WORKING** 

z.EntireRow.Hidden = False 

End If 

End If 

End If 

Next z 

的問題是第二個條件是行不通的。該宏不識別結束日期之前的日期。如何啓用宏識別第二個條件?

回答

0

我使用AutoFilter Method顯示/隱藏根據您STARTDATE結束日期瓦爾的日期。

Sub hide_dates() 
    Dim ws2 As Worksheet, tempRange As Range 
    Dim StartDate As String 
    Dim EndDate As String 

    Set ws2 = Sheets("Test") 
    ws2.Range("G2").Value = TXTDate1.Text 
    ws2.Range("G3").Value = TXTDate2.Text 

    StartDate = Format(DateValue(ws2.Range("G2").Value), "mm/dd/yyyy") 
    EndDate = Format(DateValue(ws2.Range("G3").Value), "mm/dd/yyyy") 

    With ActiveSheet 
     If .AutoFilterMode Then .AutoFilterMode = False 
     Set tempRange = .Range(.Range("D5"), .Range("D5").End(xlDown)) 
     With tempRange 
      .AutoFilter field:=1, Criteria1:=">=" & StartDate, _ 
       Operator:=xlAnd, Criteria2:="<=" & EndDate, _ 
       VisibleDropDown:=False 
     End With 
    End With 

End Sub 

我隱藏了通常與.AutoFilter關聯的小型下拉箭頭。您將不得不將格式掩碼更改爲EN-UK格式以符合您的數據(d/m/yy ...?)。

通過常規方法或使用數據►排序&過濾器或簡單地關閉.AutoFilter的「清除」命令可以「隱藏」行。