Question

I have found a workaround for this but if anyone has a cleaner way of doing this I'd be interested/grateful.

I have two boxes on a spreadsheet, called DateFrom and DateTo for use with a Date filter in a pivot table. Both are in the format DD/MM/YYYY. The data feeding into the table is also in this format. The pivot table also returns the dates in the same format. All my settings are in English UK and I've tried this on a separate machine with the same results.

I then use the following code to feed into the pivot table:

ActiveSheet.PivotTables("Pivot").PivotFields("Date").PivotFilters. _
    Add Type:=xlDateBetween, Value1:=Range("DateFrom").Value, Value2:=Range("DateTo").Value

The code reads the two cells as string and then applies this to the pivot table as if they were US format (MM/DD/YYYY). Ridiculous!

This is how I got around it:

I had two more cells looking at these two cells in numeric format and aimed the code at these two cells instead. Not sure about any of you but I would struggle to convert any date into numeric in my head...!

If you have a simplified solution and/or explanation to this utter craziness I'd be much obliged!

Was it helpful?

Solution

Indeed, this is strange. I've reproduced your issue with Excel 2007 and German locale settings.

However, when converting the date values to Longs using CLng, everything works:

ActiveSheet.PivotTables("Pivot").PivotFields("Date").PivotFilters. _
Add Type:=xlDateBetween, Value1:=CLng(Range("DateFrom").Value), Value2:=CLng(Range("DateTo").Value)

OTHER TIPS

I found your method truncated the dates to days. This might be what you want, for me I wanted to get down to the hour. I kept getting the error:

Unable to Set Filter

Level_Trend_Date_From = 14/05/2020 22:00:00
Level_Trend_Date_To = 16/05/2020 00:00:00
Error # 1004 was generated by VBAProject
Application-defined or object-defined error

My fix for this was to just clear the filter before I set it:

Sub Level_Trend_Set_Dates()
'
' Level_Trend_Set_Dates Macro
' Recorded and tweaked
' Some input from https://stackoverflow.com/questions/22938973/filtering-between-two-dates-in-pivot-table-using-vba-uk-to-us-date-format-issue

'
    On Error GoTo ErrorCatch

    Level_Trend_Date_From = Range("Level_Trend_Date_From").Value
    Level_Trend_Date_To = Range("Level_Trend_Date_To").Value

    Level_Trend_Date_From = Format(Level_Trend_Date_From, "DD/MM/YYYY  HH:MM")
    Level_Trend_Date_To = Format(Level_Trend_Date_To, "DD/MM/YYYY  HH:MM")

    'If filter is not cleared before being set, always get Error# 1004: Application-defined or object-defined error
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Date/Time").ClearAllFilters

    ActiveSheet.PivotTables("PivotTable1").PivotFields("Date/Time").PivotFilters.Add _
        Type:=xlDateBetween, _
        Value1:=Level_Trend_Date_From, _
        Value2:=Level_Trend_Date_To
        'Value1:=CLng(Level_Trend_Date_From), _
        'Value2:=CLng(Level_Trend_Date_To)
    GoTo EndSub


ErrorCatch:
    ErrorMsg = "Unable to Set Filter" & vbCr
    ErrorMsg = ErrorMsg & vbCr & "Level_Trend_Date_From = " & Level_Trend_Date_From
    ErrorMsg = ErrorMsg & vbCr & "Level_Trend_Date_To = " & Level_Trend_Date_To
    ErrorMsg = ErrorMsg & vbCr & "Error # " & Str(Err.Number)
    ErrorMsg = ErrorMsg & vbCr & "was generated by " & Err.Source
    ErrorMsg = ErrorMsg & vbCr & Err.Description

    MsgBox ErrorMsg, vbCritical, "Level_Trend_Set_Dates - Error", Err.HelpFile, Err.HelpContext

EndSub:
End Sub

Info: UK Date format!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top