Crosstaby (tabele przestawne, cube'y) MS Excel - FAQ i rozwiązania problemów

2.2. Odświeżanie tabeli przestawnej Excel



Metody odświeżania tabeli przestawnych Microsoft Excel

Tabela przestawna Excel może być odświeżona na kilka sposobów:

  • Najłatwiejszym i najszybszym sposobem na odświeżenie tabeli przestawnej jest zaznaczenie obszaru crosstaba, prawy klik i wybór przycisku ‘Odśwież Dane’(‘Refresh Data’ w wersji angielskiej – ikona z czerwonym wykrzyknikiem obok). Jeżeli połączenie z bazą danych jest dostępne i w dalszym ciągu poprawnie skonfigurowane tabela przestawna zostanie odświeżona niezwłocznie.

  • Innym często używanym sposobem odświeżania danych jest użycie skryptu VBA. Dzięki skryptowi VBA uzyskujemy nieograniczone możliwości wyboru zdarzenia które wywołuje akcję odświeżenia. Może to być przykładowo zmiana wartości komórki, zadany przedział czasowy, zmiana tzw. focusu na formatce, naciśnięcie przycisku lub jakiekolwiek inne zdarzenie obsługiwane przez VBA Excel.
    Aby odświeżyć tabelę przestawną należy użyć następującego polecenia VBA: [PivotTable object].Update.
    Poniżej przykładowa procedura Visual Basic, która odświeża wszystkie crosstaby w pliku excelowym i loguje datę i czas ostatniego odświeżenia w komórce A1 w danym arkuszu.
    Sub refresh_all_pivots()
    ‘deklaracja zmiennych lokalnych
    Dim pt As PivotTable
    Dim i As Integer
    
    ‘petla po arkuszach
    For i = 1 To Sheets.Count
            For Each pt In Sheets(i).PivotTables
                pt.Update
                ‘loguj czas i date
                Sheets(i).Range("a1") = "Last updated: " & Date & " " & Time
            Next pt
    Next i
    End Sub
    


  • podobnym, ale nieznacznie bardziej zaawansowanym sposobem odświeżenia crosstaba MS Excel jest użycie Visual Basic Scripting (VBscript - Windows Host Script). VBSkrypt może być wywoływany z linii poleceń systemu operacyjnego i jest on interpretowany przez Microsoft Windows Script Host. Pliki ze skryptami VBSkrypt maja standardowo rozszerzenie .vbs
    Poniżej pokazany został skrypt, który odświeża wszystkie crosstaby w arkuszu excelowym wskazanym w zmiennej workbookName.
    Poniższy skrypt może być w łatwy sposób dostosowany do potrzeb. Przykładowo można rozszerzyć poniższy program o możliwość odświeżenia wszystkich plików xls z danego folderu na dysku. Należałoby stworzyć pętlę która będzie wykonywana dla każdego pliku xls z danego katalogu.
    Dim excelObject as Object
    Dim workbookName as String
    Dim excelFileLocation as String
    Dim nCntSheets as Integer
    
    excelFileLocation = "d:\excel_pivot-tables\"
    workbookName = "etl-tools_info-crosstab.xls"
    
    set shell = createobject("wscript.shell")
    
    ' ******************** proces odswiezenia crosstaba Excel 
    	Set excelObject = CreateObject("Excel.Application")
    
    	'excelObject.Visible = true  ' opcja ukrywajaca okno Excel
    	' otwarcie skoroszytu
    	excelObject.workbooks.open excelFileLocation & workbookName 
    	' wylaczenie ostrzezen.
    	excelObject.Application.DisplayAlerts = False
    	'wylacznie aktualizacji ekranu podczas odswiezania 
    	excelObject.Application.ScreenUpdating = False
    
    	'ilosc arkuszy w skoroszycie
    	nCntSheets = excelObject.Workbooks(workbookName).sheets.count
    	
    	' funkcja odswiezajaca refresh_all_pivots, umieszczona w odswiezanym arkuszu w module refresh_funcs
    	excelObject.Run "refresh_funcs.refresh_all_pivots()" 
    
    	'****** zapisz i zamknij
    	excelObject.Workbooks(workbookName).Save
    	excelObject.Application.Quit
    
    	'************* usun instancje Excel z pamieci
    	SexcelObject = Nothing
    
    ' komunikat ukonczenia
    MsgBox "Wszystkie tabele przestawne zostaly odswiezone"
    
    


  • ?>
    Powrót do listy tematów FAQ tabel przestawnych excel