Draaitabel filter op datumveld

Status
Niet open voor verdere reacties.

Artemiss

Gebruiker
Lid geworden
13 feb 2009
Berichten
130
Hallo allemaal,

Is er hier iemand die mij kan vertellen, waarom de ClearFilters regel wel werkt en FiltersAdd regel niet

Code:
Sub FilterToepassen()

    Sheets("Materieel").PivotTables("Draaitabel4").PivotFields("Datum").ClearAllFilters
    Sheets("Materieel").PivotTables("Draaitabel4").PivotFields("Datum").PivotFilters.Add Type:=xlValueIsGreaterThanOrEqualTo, Value1:="3/5/2013"
    
End Sub

Ik krijg de volgende foutmelding

Fout 5 tijdens uitvoering: Ongeldige procedure-aanroep of ongeldig argument

Later moet de datumwaarde ook nog vervangen worden door een celwaarde. Ik heb ergens al gelezen dat ik dan waarschijnlijk een probleem krijg met het datumformat, die moet voor VBA mm/dd/yyyy zijn, maar mijn datum is in dd-mm-yyyy format en dat moet ook eigenlijk zo blijven. Weet hier ook iemand een oplossing voor.

Alvast bedankt
 
Artemiss,

In pivottables wordt bij filters op datums geen xlValueIsGreaterThanOrEqualTo gebruikt maar xlAfterOrEqualTo.
Met de functie Format() kan je iedere datum omzetten in een datum die je kunt gebruiken voor Value1 of Value2.

Veel succes.
 
Beste Elsendoorn,

Bedankt voor uw reactie, het is mij gelukt deze te verwerken, maar ik loop hierbij tegen het volgende probleem aan.
Mijn datumveld staat namelijk als rapportfilter, waardoor je volgens mij niet de methode Filter.Add xlTypeAfterOrEqualTo kan gebruiken. Als ik dezelfde code toepas, terwijl ik het datumveld als rijlabel gebruik, werkt de code namelijk wel, maar bij datumveld als rapportfilter krijg ik "door toepassing of door object gedefinieerde fout".
Kan ik dit ook oplossen?
 
Artemis,

Dit is wat ingewikkelder omdat je hier inderdaad geen filter op kan leggen.
Wel kun je op het pijltje naar beneden klikken en alle data die je niet wil zien uitvinken maar
dat is een hoop werk.

Een andere mogelijkheid is om dit door een procedure te laten uitvoeren.
Maar dan loop je weer tegen het probleem van de interne verwerking van datums binnen Excel aan.
De functie Datevalue() werkt hier niet.

Hierbij mijn oplossing. Ik zet een datum om in een waarde (long) die er uit ziet als 20130101 20130102 etc.
Deze kan ik vergelijken met een door mijn ingevoerde waarde 20130503 voor 3 mei 2013.
Hierbij kan je weer in de problemen komen als de instelling van de datum in Windows de datum amerikaanse notatie volgt
maar dat moet je dan maar weer oplossen.

Code:
Sub FilterToepassen()
    Dim pvItem As Variant
    Dim sDatum As Long

    With Sheets("Blad4").PivotTables("Draaitabel1").PivotFields("Datum")
        .ClearAllFilters
        For Each pvItem In .PivotItems
            sDatum = Right(pvItem.Name, 4) & _
                Format(Mid(pvItem.Name, 1, InStr(1, pvItem.Name, "/", vbTextCompare) - 1), "00") & _
                Format(Mid(pvItem.Name, InStr(1, pvItem.Name, "/", vbTextCompare) + 1, _
                    Len(pvItem.Name) - (InStr(1, pvItem.Name, "/", vbTextCompare) + 5)), "00")
            If sDatum >= 20130503 Then
                pvItem.Visible = True
            Else
                pvItem.Visible = False
            End If
        Next
    End With
            
End Sub

Een voorbeeld van de macro voeg ik hierbij toe.

Bekijk bijlage HelpMijFilterDatums.xlsm

Veel Succes.
 
Beste Elsendoorn,

Bedankt. Ik heb nog geen tijd gehad om het toe te passen, maar ik heb wel eerder zo'n datumcode gezien in een bestand, zonder te weten wat de reden daarvoor was. Nu weet ik het dus wel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan