【问题标题】:Refresh all pivot tables in file刷新文件中的所有数据透视表
【发布时间】:2017-04-08 23:25:08
【问题描述】:

当我在 Excel 2010 中运行此代码时,我收到错误消息:

1004 数据透视表类的刷新表方法失败

Sub AllWorkbookPivots()
    Dim pt As PivotTable
    Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables
            pt.RefreshTable
        Next pt
    Next ws

End Sub

【问题讨论】:

标签: vba excel


【解决方案1】:

试试这个代码:

Sub AllWorkbookPivots()
    ActiveWorkbook.RefreshAll()
End Sub

【讨论】:

    【解决方案2】:

    当我尝试这个时,我不得不删除括号。

    ActiveWorkbook.RefreshAll
    

    【讨论】:

      【解决方案3】:

      如果在刷新使用该数据透视缓存的任何数据透视表后与另一个数据透视表对象或其他有界对象重叠,则数据透视刷新将失败。 Excel 会尝试创建额外的行和列来为调整大小的表格腾出空间,但这并不总是那么简单。

      在这种情况下,RefreshAll 也将无法更新表。检查所有包含数据透视表的工作表,并尽量确保每个数据透视表都有空间在需要时展开。

      如果不确定哪个表使用哪个缓存,可以使用以下脚本:

      Sub PivotInfo()
          Dim i As Integer, wSheet As Worksheet, pTable As PivotTable    
          Worksheets.Add
          Range("A1") = "Pivot table name"
          Range("B1") = "Location"
          Range("C1") = "Source information"
      
          i = 1
      
          For Each wSheet In Worksheets
              For Each pTable In wSheet.PivotTables
                  i = i + 1
                  Cells(i, 1).Value = pTable.Name
                  Cells(i, 2).Value = wSheet.Name + "!" + pTable.TableRange1.Address
                  Cells(i, 3).Value = pTable.SourceData
              Next pTable
          Next wSheet
      End Sub
      

      【讨论】:

        【解决方案4】:

        我在刷新数据透视表时出错,直到我停止在后台运行刷新:

        间歇性失败:

        Dim t, ws, pc
        
        For Each ws In ThisWorkbook.Worksheets
            For Each t In ws.PivotTables
                Debug.Print "Refreshing " & t.Name
                Set pc = t.PivotCache
                pc.Refresh
            Next
        Next
        

        似乎工作正常:

        Dim t, ws, pc
        
        For Each ws In ThisWorkbook.Worksheets
            For Each t In ws.PivotTables
                Debug.Print "Refreshing " & t.Name
                Set pc = t.PivotCache
                pc.BackgroundQuery = False    '<==== Make queries execute in the foreground
                pc.Refresh
            Next
        Next
        

        我注意到没有设置pc.BackgroundQuery,这个值是True。我的理论是,在第一次刷新完成之前,第二次开始,因为它们是两个引用同一个缓存的表,所以第二次失败。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-30
          • 2012-08-16
          • 2015-06-08
          相关资源
          最近更新 更多