Kategorie szkoleń | Egzaminy | Kontakt
  • 4
  • 5
  • 2.0K

Witam.

Mam tabelę przestawną, która zawiera pole z datami w etykietach wierszy , chciałbym napisać makro, które na podstawie zdefiniowanej daty (np. przy pomocy InputBox, może pobierać datę z jakiegoś zakresu danych) wyfiltruje tabelę przestawną pokazując tylko dane związane z wybraną datą.

Sebastian_Ulrych
  • Zapytał
  • @ Sebastian_Ulrych | 09.09.2015
    • 2
    • 0
    • 1
Komentarze (1)
Witam,Da się oczywiście to zrobić, prośba tylko o dołączenie jakiegoś przykładowego pliku jak to wygląda i jak miałoby wyglądać. Pozdrawiam, Paweł N
Skomentował : @ pawel_niemyt ,10.09.2015

Odpowiedzi (4)

  • 3

Oto zarys, przekazanie daty w jakikolwiek sposób to banał, poradzi Pan sobie z dorobieniem tej instrukcji:

Sub FIltrujTP()
    Dim MojaData As Date
    MojaData = #9/27/2015#
    Dim El As PivotItem
    For Each El In ActiveSheet.PivotTables("Tabela przestawna2").PivotFields("D").PivotItems
        If El = MojaData Then
            El.Visible = True
        Else
            El.Visible = False
        End If
    Next
End Sub

Oczywiście należy sparametryzować nazwę pivocika oraz nazwę pola po którym filtrujemy.

  • Odpowiedział
  • @ | 23.09.2015
  • TRENER ALTKOM AKADEMII
  • 2

No wszystko ładnie pięknie chodzi jeśli zmienna MojaData jest tak, jak tutaj stała, ale jeśli mam zakres dat sformatowanych, jak w ustawieniach naszego regionu, czyli yyyy-mm-dd i zrobię pętlę, żeby dla każdej daty z tego zakresu filtrowała tabelę, zaczyna się problem bo mimo zastosowania kodu:

format(MojaData, "mm/dd/yyyy")

Niestety tabela nie jest filtrowana, makro nie znajduje takiej pozycji w tabeli.

Sebastian_Ulrych
  • Odpowiedział
  • @ Sebastian_Ulrych | 24.09.2015
    • 2
    • 0
    • 1
  • 0

Funkcja format jest źródłem niepowodzenia: nie potrzebujemy wartości typu string tylko daty.
Jeśli daty na liście kryteriów są poprawnie wprowadzone, to  nie trzeba nawet używać funkcji konwersji.
Przy operacjach filtrowania w pętli (np. eksporcie kolejnych TP) musi Pan dopisać sobie jeszcze jedną pętlę For Each do cofnięcia wszystkich kryteriów filtrujących.

Sub FIltrujTP()
    Dim El As PivotItem
    Dim MojaData As Date
    MojaData = Cells(16, 5)
        For Each El In ActiveSheet.PivotTables("Tabela przestawna2").PivotFields(" nazwa").PivotItems
            If El.Value = MojaData Then
                El.Visible = True
                
            Else
                El.Visible = False
            End If
        Next
End Sub




  • Odpowiedział
  • @ | 24.09.2015
  • TRENER ALTKOM AKADEMII
  • 2

Witam.

U mnie kod Piotrka działa bez problemu. Jeżeli mamy jedną tabelę przestawną, a pole z Datą nazywa się "Data zamówienia", no i oczywiście w E16 wpiszemy prawidłową datę, to poniższy kod zadziała.

Sub FIltrujTP()
    Dim El As PivotItem
    Dim MojaData As Date
    MojaData = Cells(16, 5)
        For Each El In ActiveSheet.PivotTables(1).PivotFields("Data zamówienia").PivotItems
            If El.Value = MojaData Then
                El.Visible = True
                 
            Else
                El.Visible = False
            End If
        Next
End Sub

 

  • Odpowiedział
  • @ | 29.09.2015
  • TRENER ALTKOM AKADEMII