【问题标题】:Run-time error '1004': Application defined or object-defined error - filter couple of pivot table by date运行时错误“1004”:应用程序定义或对象定义错误 - 按日期过滤数据透视表对
【发布时间】:2021-11-28 20:18:12
【问题描述】:

所以我试图过滤几个数据透视表的相同日期。 它适用于第一个数据透视表,但随后其他 5 个,给出“运行时错误 1004 ...”的错误

它们是 6 个具有相同数据库的数据透视表。 并且代码是工作簿的模块形式。

代码如下:

Sub filter()

Windows("SAFE.xlsm").Activate
Sheets("Dinamic").Activate

Dim Datainicial As String
Dim Datafinal As String

Datainicial = Range("A2").Text
Datafinal = Range("C2").Text

If Range("A2").Text = "" Or Range("C2").Text = "" Then

MsgBox "Veuillez sélectionner la période souhaitée pour l'analyse.", vbCritical, "Date d'insertion"
Exit Sub
End If


Dim Tabela1 As PivotTable
Dim Tabela2 As PivotTable
Dim Tabela3 As PivotTable
Dim Tabela4 As PivotTable
Dim Tabela5 As PivotTable
Dim Tabela6 As PivotTable

Set Tabela1 = ActiveSheet.PivotTables("Dist")
Set Tabela2 = ActiveSheet.PivotTables("Protection")
Set Tabela3 = ActiveSheet.PivotTables("IGtraité")
Set Tabela4 = ActiveSheet.PivotTables("PIMOF")
Set Tabela5 = ActiveSheet.PivotTables("IGencours")
Set Tabela6 = ActiveSheet.PivotTables("IGouvert")

'Tabela1 - Distribuição afetação TOP 5
Tabela1.ClearAllFilters
Tabela1.PivotFields("Code NITG").PivotFilters.Add Type:=xlCaptionDoesNotContain, Value1:="(em branco)"
Tabela1.PivotFields("Dernière source intégrée").PivotFilters.Add Type:=xlCaptionEquals, Value1:="DRG"
 Range("T7").Select
    ActiveSheet.PivotTables("Dist").PivotFields("Libellé NITG").AutoSort _
        xlDescending, "Quantité", ActiveSheet.PivotTables("Dist").PivotColumnAxis. _
        PivotLines(1), 1
        ActiveSheet.PivotTables("Dist").PivotFields("Code NITG").ClearAllFilters
    ActiveSheet.PivotTables("Dist").PivotFields("Code NITG").PivotFilters.Add2 _
        Type:=xlTopCount, DataField:=ActiveSheet.PivotTables("Dist").PivotFields( _
        "Quantité"), Value1:=5
Tabela1.PivotFields("Date d'insertion").PivotFilters.Add Type:=xlDateBetween, Value1:=Datainicial, Value2:=Datafinal


'Tabela4 - PIMOF
Tabela4.PivotFields("Date d'insertion").PivotFilters.Add Type:=xlDateBetween, Value1:=Datainicial, Value2:=Datafinal

'Tabela5 - IG en cours
Tabela5.PivotFields("Date d'insertion").PivotFilters.Add Type:=xlDateBetween, Value1:=Datainicial, Value2:=Datafinal

'Tabela6 - IG ouverts
Tabela6.PivotFields("Date d'insertion").PivotFilters.Add Type:=xlDateBetween, Value1:=Datainicial, Value2:=Datafinal


'Tabela3 - IG traité
Tabela3.PivotFields("Date d'insertion").PivotFilters.Add Type:=xlDateBetween, Value1:=Datainicial, Value2:=Datafinal

MsgBox "Période d'analyse souhaitée définie."

End Sub

【问题讨论】:

  • Table1 您在添加过滤器之前先清除过滤器Tabela1.ClearAllFilters。你不知道的其他表。
  • 谢谢@CDP1802,但我无法将它们全部清除,因为它们已分组......

标签: excel vba runtime-error


【解决方案1】:

在添加新过滤器之前清除现有过滤器。

Option Explicit

Sub filter()

    Windows("SAFE.xlsm").Activate
    Sheets("Dinamic").Activate
    
    Dim Datainicial As String, Datafinal As String
    Datainicial = Range("A2").Text
    Datafinal = Range("C2").Text
    
    If Range("A2").Text = "" Or Range("C2").Text = "" Then
        MsgBox "Veuillez sélectionner la période souhaitée pour l'analyse.", vbCritical, "Date d'insertion"
        Exit Sub
    End If
    
    Dim Tabel As PivotTable, ar, tbl
    ar = Array("Dist", "Protection", "IGtraité", "PIMOF", "IGencours", "IGouvert")
    For Each tbl In ar
       Set Tabel = ActiveSheet.PivotTables(tbl)
       With Tabel
           If tbl = "Dist" Then
               .ClearAllFilters
               .PivotFields("Code NITG").PivotFilters.Add _
                    Type:=xlCaptionDoesNotContain, Value1:="(em branco)"
    
               .PivotFields("Dernière source intégrée").PivotFilters.Add _
                    Type:=xlCaptionEquals, Value1:="DRG"
    
               .PivotFields("Libellé NITG").AutoSort xlDescending, "Quantité", _
                    .PivotColumnAxis.PivotLines(1), 1

               .PivotFields("Code NITG").PivotFilters.add2 _
                    Type:=xlTopCount, DataField:=.PivotFields("Quantité"), Value1:=5
            Else
                .PivotFields("Date d'insertion").ClearAllFilters
            End If
            .PivotFields("Date d'insertion").PivotFilters.Add _
                Type:=xlDateBetween, Value1:=Datainicial, Value2:=Datafinal
       End With
    Next
    
    MsgBox "Période d'analyse souhaitée définie."

End Sub

【讨论】:

  • 谢谢@CDP1802,但我无法将它们全部清除,因为它们已分组......
  • @Tatiana 是的,我的代码只清除了Dist 上的所有过滤器,其他的它只清除了Date d'insertion
  • 成功了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多