2015-09-04 78 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的“清除”命令可以“隐藏”行。