【问题标题】:Run-time error 1004 for Refresh Pivot Table刷新数据透视表的运行时错误 1004
【发布时间】:2016-04-03 05:38:24
【问题描述】:

我创建了可以刷新工作表中所有数据透视表的宏。相同的代码在一张纸上有效,但在另一张纸上无效。我尝试在调试模式下运行它,它在前几个表中运行良好,在中间有一个表出现错误:

运行时错误“1004”:数据透视表类的 RefreshTable 方法 失败了。

此工作表中有 20 个数据透视表,但有效的数据透视表是 26 个。非常感谢您的帮助。

Sub Refresh_Pivots2()

Dim PL As PivotTable

Worksheets("Incidents Pivots").Activate

    For Each PL In ActiveSheet.PivotTables

    PL.RefreshTable

    Next PL

End Sub

我刚刚尝试了另一个代码

Sub Refresh_Incidents()

Worksheets("Incidents Pivots").Activate

Dim A

A = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20")

For i = 0 To 19

ActiveSheet.PivotTables(A(i)).RefreshTable

Next i

End Sub

如果我从 i=0 开始,它会给出一个错误,但是当它切换到 i=1 时它可以工作。任何想法这张表有什么问题。我可以手动刷新它。

【问题讨论】:

  • 你能手动刷新它们吗?
  • 嗨,Rory,是的,我可以手动刷新每个表。
  • 那么如果使用 Refresh All 不会报错?
  • 一旦我一个一个去刷新然后它就可以工作了。那是你的意思吗?
  • 这很奇怪,因为 SourceData 应该以 R1C1 表示法返回引用,而不是 A1。你能运行:ActiveSheet.PivotTables(1).SourceData = 'Data Dump'!C1:C14,然后刷新数据透视表而不会出错吗?

标签: vba excel refresh pivot-table


【解决方案1】:

正如 Rory 所说,一个表的源数据有问题,它使用 A1 而不是 R1C1 表示法。我在 Excel Option->Formulas->R1C1 参考样式中更改了它,现在宏可以工作了。

【讨论】:

    【解决方案2】:

    您是否检查过数据透视表数据源。有时也会由于数据透视缓存而发生此类问题。在刷新枢轴之前调用以下代码。

    Sub PivotCacheClear()
        Dim pc As PivotCache
        Dim ws As Worksheet
        With ActiveWorkbook
            For Each pc In .PivotCaches
                pc.MissingItemsLimit = xlMissingItemsNone
            Next pc
        End With
    End Sub 
    

    【讨论】:

    • 您好 Raja Thevar,感谢您的回复,我使用了您的代码,然后我运行了我的宏并得到了同样的错误。此表上每个表格的来源都是相同的,因此可以肯定。正如我上面提到的,我可以手动刷新此表。我得到这个错误的那一刻是在这部分代码 PL.RefreshTable
    • 是的,我可以手动刷新它。另外,如果我要在宏中询问这个特定的表并刷新它,它就会起作用。
    • 之前和现在都尝试过,但它返回相同的错误。看起来它不想刷新数据透视表(“1”),因为当我编码 Sub Refresh_Incidents() Worksheets("Incidents Pivots").Activate Dim A A = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20") For i = 0 To 19 ActiveSheet.PivotTables(A(i)).RefreshTable Next i End Sub 时,它会给出相同的错误。但是当我更改For i=1 ... 时,它会起作用。任何想法这张表可能有什么问题?
    • 不使用数组,你可以直接使用 for 循环 i =1 到 20
    • 我可以,但表格不是按索引顺序排列的,所以按名称跟踪它们更容易。
    【解决方案3】:

    我有一个代码可以自动调整数据透视表中的数据,然后刷新数据透视表,它可能会阻止你:

    Sub AdjustPivotDataRange(ByVal SheetName As String)
    
    Dim Data_sht As Worksheet
    Dim Pivot_sht As Worksheet
    Dim StartPoint As Range
    Dim DataRange As Range
    Dim PivotName As String
    Dim NewRange As String
    
      Sheets("All 2014 to Current Date").Visible = True
    'Set Variables Equal to Data Sheet and Pivot Sheet
      Set Data_sht = Worksheets("All 2014 to Current Date")
      Set Pivot_sht = Worksheets(SheetName)
    
    'Enter in Pivot Table Name
      PivotName = "PivotTable1"
    
    'Dynamically Retrieve Range Address of Data
      Set StartPoint = Data_sht.Range("A6")
      LastRow = Data_sht.Cells(Rows.Count, 1).End(xlUp).Row
      LastColumn = Data_sht.Cells(LastRow, Columns.Count).End(xlToLeft).Column
      Data_sht.Activate
      Set DataRange = Data_sht.Range(StartPoint, Cells(LastRow, LastColumn))
    
      NewRange = Data_sht.Name & "!" & _
        DataRange.Address(ReferenceStyle:=xlR1C1)
    
    'Make sure every column in data set has a heading and is not blank (error prevention)
      If WorksheetFunction.CountBlank(DataRange.Rows(1)) > 0 Then
        MsgBox "One of your data columns has a blank heading." & vbNewLine _
          & "Please fix and re-run!.", vbCritical, "Column Heading Missing!"
        Exit Sub
      End If
    
    'Change Pivot Table Data Source Range Address
      Pivot_sht.PivotTables(PivotName).ChangePivotCache _
        ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=NewRange)
    
    'Ensure Pivot Table is Refreshed
      Pivot_sht.PivotTables(PivotName).RefreshTable
      Sheets("Rolling 12-mo.").Select
      Sheets("All 2014 to Current Date").Visible = False
    'Complete Message
      'MsgBox PivotName & "'s data source range has been successfully updated!"
    
    End Sub
    

    【讨论】:

      【解决方案4】:

      connection property=>usage=>enable background refresh,请确保它没有被选中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多