代码之家  ›  专栏  ›  技术社区  ›  Lipis

使用宏刷新excel工作簿中的所有数据透视表

  •  93
  • Lipis  · 技术社区  · 17 年前

    我有一本工作簿,里面有20个不同的数据透视表。有什么简单的方法可以在VBA中找到所有数据透视表并刷新它们吗?

    10 回复  |  直到 6 年前
        1
  •  155
  •   airstrike SilentGhost    12 年前

    对。

    ThisWorkbook.RefreshAll
    

    或者,如果您的Excel版本足够旧,

    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
    
        2
  •  23
  •   Robert Mearns    17 年前

    此VBA代码将刷新工作簿中的所有数据透视表/图表。

    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
    

    另一个非编程选项是:

    • 在每个数据透视表上单击鼠标右键
    • 选择表格选项
    • 勾选 '打开时刷新' 选项。
    • 点击“确定”按钮

    这将在每次打开工作簿时刷新数据透视表。

        3
  •  18
  •   jonsca    13 年前

    ActiveWorkbook.RefreshAll 刷新所有内容,不仅是数据透视表,还有ODBC查询。我有几个VBA查询涉及数据连接,当命令在没有VBA提供详细信息的情况下运行数据连接时,使用此选项会崩溃

    如果你只想刷新枢轴,我建议你选择这个选项

    Sub RefreshPivotTables()     
      Dim pivotTable As PivotTable     
      For Each pivotTable In ActiveSheet.PivotTables         
        pivotTable.RefreshTable     
      Next 
    End Sub 
    
        4
  •  8
  •   Steve WahWah Weeks    14 年前

    在某些情况下,您可能希望区分数据透视表及其数据透视缓存。Cache有自己的刷新方法和自己的集合。因此,我们本可以刷新所有数据透视缓存,而不是数据透视表。

    区别?当您创建新的数据透视表时,系统会询问您是否希望它基于以前的表。如果你说不,这个数据透视表会得到自己的缓存,并使源数据的大小加倍。如果你说是,你的工作簿会保持较小,但你会添加到共享单个缓存的数据透视表集合中。当您刷新该集合中的任何单个数据透视表时,整个集合都会刷新。因此,您可以想象刷新工作簿中的每个缓存与刷新工作簿中每个数据透视表之间的区别。

        5
  •  5
  •   Prasenjit    17 年前

    数据透视表工具栏中有一个刷新全部选项。够了。不必做任何其他事情。

    按ctrl+alt+F5

        6
  •  1
  •   LohanJ    17 年前

    你有一个 数据透视表 VB上的集合 工作表 对象。所以,像这样的快速循环会奏效:

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

    战壕笔记:

    1. 在更新数据透视表之前,请记住取消对任何受保护工作表的保护。
    2. 经常保存 .
    3. 我会考虑更多,并在适当的时候更新。.. :)

    祝你好运

        7
  •  0
  •   HaveNoDisplayName    11 年前

    密码

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

    工作得很好。

    该代码用于激活工作表模块,因此当工作表被激活时,它会显示闪烁/故障。

        8
  •  0
  •   Rajiv Singh    10 年前

    甚至 我们可以刷新特定连接 反过来,它将刷新与其链接的所有枢轴。

    对于这段代码,我根据Excel中的表格创建了切片器 :

    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
    
        9
  •  -1
  •   RBhandal    13 年前

    我最近使用了下面列出的命令,它似乎工作得很好。

    ActiveWorkbook.RefreshAll
    

    希望这能有所帮助。

        10
  •  -2
  •   Karuna    14 年前

    如果您使用的是MS Excel 2003,请转到查看->工具栏->数据透视表从这个工具栏中,我们可以通过单击进行刷新!这个符号。