VBA - filtr tabeli przestawnej z OLAP

VBA - filtr tabeli przestawnej z OLAP

Wątek przeniesiony 2021-01-28 13:33 z Inne języki programowania przez cerrato.

B0
  • Rejestracja:prawie 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:2
0

Cześć,
Opiszę cel jaki chcę osiągnąć z wykorzystaniem VBA oraz problem jakiego nie mogę przejść:

Utworzyłem w Excel 2 zakładki:
1.) Zawiera tabele przestawną z podłączeniem do kostki OLAP
2.) Zawiera 2 kolumny: " Id Klienta", "Id Umowy"

Cel jaki chcę osiągnąć:
Często pobieram z CRM listę Id'ów umów LUB id'ków Klienta (mogą być ich tysiące).
Chciałbym po wklejeniu ich do zakładki drugiej móc poprzez VBA wprowadzić je w filtr tabeli przestawnej z zakładki pierwszej (czyli chcę analizować wyłącznie wybraną grupę rekordów).

Co zostało wykonane:
1.) Tworzę tablicę z określoną ilością rekordów (myArray)
2.) W pętli uzupełniam tablicę o kolejne rekordy z zakładki 2giej
3.) Próbuję wprowadzić filtr z wykorzystaniem tablicy z pkt.1 ale tutaj występuje błąd 1004, którego nie mogę przejść

Kod:

Kopiuj
Sub UruchomFiltr()

'Sprawdzenie ilosci rekordow do wprowadzenia do filrowania
Dim IloscRekordowA As Long
IloscRekordowA = Worksheets("WarunkiFiltrowania").Cells(Worksheets("WarunkiFiltrowania").Rows.Count, "A").End(xlUp).Row

'Warunek jezeli ilosc jakikolwiek rekord wprowadzony
If IloscRekordowA > 1 Then


'---------------------------------------------------------------------------------------------------------------------------
    'Zmienne do wyznaczenia kodu wprowadzajacego filtry do kostki OLAP
    Dim myArray() As String
    ReDim myArray(IloscRekordowA - 1) As String
    Dim ColumnValue As String

    'Petla dla kazdego rekordu, ktory ma byc wprowadzony do filtra
    For i = 2 To IloscRekordowA
     
        ColumnValue = Worksheets("WarunkiFiltrowania").Range("A" + CStr(i))
        myArray(i - 1) = """[Klient].[NK Klient].&[" + CStr(ColumnValue) + "] """


    Next i

'---------------------------------------------------------------------------------------------------------------------------
        
    'Usuwanie z filtra kolumny
        Worksheets("Analiza").PivotTables("Tabela przestawna Analiz").CubeFields( _
            "[Klient].[NK Klient]").Orientation = xlHidden
            
    'Dodawanie do filtra kolumny
         Worksheets("Analiza").PivotTables("Tabela przestawna Analiz").CubeFields( _
            "[Klient].[NK Klient]").Orientation = xlPageField
    
    'Ustawianie na wybieranie wielu elementow
        Worksheets("Analiza").PivotTables("Tabela przestawna Analiz").CubeFields("[Klient].[NK Klient]").EnableMultiplePageItems = True

      'Proba wprowadzenia do filtra wartosci z tabeli        
        Worksheets("Analiza").PivotTables("Tabela przestawna Analiz").PivotFields( _
            "[Klient].[NK Klient].[NK Klient]").VisibleItemsList = Array(myArray)

    End If

End Sub

Próby wykonane:
1.) Próbowałem transformować sam zakres wierszy
2.) Próbowałem zbijać wszystko do jednego długiego Stringa (zgodnie z wygenerowanym kodem z rejestratora makr)
3.) Próbowałem wprowadzić samo myArray (bez Array(myArray))

W czym jest błąd w powyższy kodzie? Co jest błędne?

B0
  • Rejestracja:prawie 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:2
0

Czy ktoś jest w stanie pomóc z powyższym tematem?

DB
  • Rejestracja:około 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

Najprościej to w powerquery:

  1. połączenie do kostki OLAP
  2. połączenie do CRM
  3. łączysz połączenia jako nowa tabela po wspólnej kolumnie/ach (wskazujesz, które chcesz widzieć), filtrujesz tylko te potrzebne aby były widoczne i masz w Excel'u gotowy arkusz do tabeli przestawnej

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.