Odświeżenie wszystkich tabel przestawnych w moim skoroszycie Excela za pomocą makra

Mam skoroszyt z 20 różnymi tabelami przestawnymi. Czy jest jakiś łatwy sposób, aby znaleźć wszystkie tabele przestawne i odświeżyć je w VBA?

Author: Community, 2008-09-16

10 answers

Tak.

ThisWorkbook.RefreshAll

Lub, jeśli Twoja wersja Excela jest wystarczająco stara,

Dim Sheet as WorkSheet, Pivot as PivotTable
For Each Sheet in ThisWorkbook.WorkSheets
    For Each Pivot in Sheet.PivotTables
        Pivot.RefreshTable
        Pivot.Update
    Next
Next
 149
Author: GSerg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 19:12:31

Ten kod VBA odświeży wszystkie tabele przestawne/wykresy w skoroszycie.

Sub RefreshAllPivotTables()

Dim PT As PivotTable
Dim WS As Worksheet

    For Each WS In ThisWorkbook.Worksheets

        For Each PT In WS.PivotTables
          PT.RefreshTable
        Next PT

    Next WS

End Sub

Inna opcja nie programowa to:

  • Kliknij prawym przyciskiem myszy na każdej tabeli przestawnej
  • Wybierz opcje tabeli
  • zaznacz opcję "odśwież przy otwarciu" .
  • Kliknij przycisk OK

Spowoduje to odświeżenie tabeli przestawnej za każdym razem, gdy skoroszyt zostanie otwarty.

 22
Author: Robert Mearns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 10:37:07

ActiveWorkbook.RefreshAll odświeża wszystko, nie tylko tabele przestawne, ale także zapytania ODBC. Mam kilka zapytań VBA, które odnoszą się do połączeń danych i korzystanie z tej opcji ulega awarii, ponieważ polecenie uruchamia połączenia danych bez szczegółów dostarczonych z VBA

Polecam opcję jeśli chcesz tylko odświeżyć pivoty

Sub RefreshPivotTables()     
  Dim pivotTable As PivotTable     
  For Each pivotTable In ActiveSheet.PivotTables         
    pivotTable.RefreshTable     
  Next 
End Sub 
 16
Author: Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-26 07:28:50

W pewnych okolicznościach możesz chcieć odróżnić tabelę przestawną od jej PivotCache. Cache ma własną metodę odświeżania i własne kolekcje. Więc mogliśmy odświeżyć wszystkie PivotCaches zamiast PivotTables.

Różnica? Podczas tworzenia nowej tabeli przestawnej pojawia się pytanie, czy ma być ona oparta na poprzedniej tabeli. Jeśli odmówisz, ta Tabela przestawna otrzyma własną pamięć podręczną i podwoi Rozmiar danych źródłowych. Jeśli powiesz tak, zachowasz mały skoroszyt, ale dodajesz do kolekcji tabel przestawnych, które mają jedną pamięć podręczną. Cała kolekcja zostanie odświeżona po odświeżeniu dowolnej pojedynczej tabeli przestawnej w tej kolekcji. Możesz sobie wyobrazić, jaka może być różnica między odświeżaniem każdej pamięci podręcznej w skoroszycie, w porównaniu do odświeżania każdej tabeli przestawnej w skoroszycie.

 8
Author: Steve WahWah Weeks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-08 13:53:48

Na pasku narzędzi tabeli przestawnej znajduje się opcja odśwież wszystko. Wystarczy. Nie musisz robić nic innego.

Naciśnij ctrl + alt + F5

 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-11 12:49:46

Masz kolekcję PivotTables na obiekcie VB Arkusz roboczy . Tak więc taka szybka pętla będzie działać:

Sub RefreshPivotTables()
    Dim pivotTable As PivotTable
    For Each pivotTable In ActiveSheet.PivotTables
        pivotTable.RefreshTable
    Next
End Sub

Notatki z okopów:

  1. pamiętaj, aby przed aktualizacją tabeli przestawnej odłączyć chronione arkusze.
  2. Zapisz często.
  3. wymyślę więcej i zaktualizuję w odpowiednim czasie... :)
Powodzenia!
 1
Author: LohanJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 10:22:35

Kod

Private Sub Worksheet_Activate()
    Dim PvtTbl As PivotTable
        Cells.EntireColumn.AutoFit
        For Each PvtTbl In Worksheets("Sales Details").PivotTables
        PvtTbl.RefreshTable
        Next
End Sub 
Działa dobrze.

Kod jest używany w module Aktywuj arkusz, dlatego wyświetla migotanie / usterkę, gdy arkusz jest aktywowany.

 0
Author: user3564681,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-06 15:44:48

Nawet możemy odświeżyć dane połączenie , a to z kolei odświeży wszystkie pivoty z nim związane.

Dla tego kodu stworzyłem slicer z tabeli obecnej w Excelu :

Sub UpdateConnection()
        Dim ServerName As String
        Dim ServerNameRaw As String
        Dim CubeName As String
        Dim CubeNameRaw As String
        Dim ConnectionString As String

        ServerNameRaw = ActiveWorkbook.SlicerCaches("Slicer_ServerName").VisibleSlicerItemsList(1)
        ServerName = Replace(Split(ServerNameRaw, "[")(3), "]", "")

        CubeNameRaw = ActiveWorkbook.SlicerCaches("Slicer_CubeName").VisibleSlicerItemsList(1)
        CubeName = Replace(Split(CubeNameRaw, "[")(3), "]", "")

        If CubeName = "All" Or ServerName = "All" Then
            MsgBox "Please Select One Cube and Server Name", vbOKOnly, "Slicer Info"
        Else
            ConnectionString = GetConnectionString(ServerName, CubeName)
            UpdateAllQueryTableConnections ConnectionString, CubeName
        End If
    End Sub

    Function GetConnectionString(ServerName As String, CubeName As String)
        Dim result As String
        result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
        '"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False"
        GetConnectionString = result
    End Function

    Function GetConnectionString(ServerName As String, CubeName As String)
    Dim result As String
    result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
    GetConnectionString = result
End Function

Sub UpdateAllQueryTableConnections(ConnectionString As String, CubeName As String)
    Dim cn As WorkbookConnection
    Dim oledbCn As OLEDBConnection
    Dim Count As Integer, i As Integer
    Dim DBName As String
    DBName = "Initial Catalog=" + CubeName

    Count = 0
    For Each cn In ThisWorkbook.Connections
        If cn.Name = "ThisWorkbookDataModel" Then
            Exit For
        End If

        oTmp = Split(cn.OLEDBConnection.Connection, ";")
        For i = 0 To UBound(oTmp) - 1
            If InStr(1, oTmp(i), DBName, vbTextCompare) = 1 Then
                Set oledbCn = cn.OLEDBConnection
                oledbCn.SavePassword = True
                oledbCn.Connection = ConnectionString
                oledbCn.Refresh
                Count = Count + 1
            End If
        Next
    Next

    If Count = 0 Then
         MsgBox "Nothing to update", vbOKOnly, "Update Connection"
    ElseIf Count > 0 Then
        MsgBox "Update & Refresh Connection Successfully", vbOKOnly, "Update Connection"
    End If
End Sub
 0
Author: Rajiv Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-31 10:00:26

Używałem polecenia wymienionego poniżej w niedawnej przeszłości i wydaje się, że działa dobrze.

ActiveWorkbook.RefreshAll
Mam nadzieję, że to pomoże.
 -1
Author: RBhandal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 14:13:03

Jeśli używasz MS Excel 2003 to przejdź do view->Tool bar - > Pivot Table z tego paska narzędzi możemy odświeżyć klikając ! Ten symbol.

 -2
Author: Karuna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-03 15:35:17