【问题标题】:VBA PivotTable Runtime Error 5: Invalid Procedure Call or ArgumentVBA 数据透视表运行时错误 5:无效的过程调用或参数
【发布时间】:2018-06-07 15:08:28
【问题描述】:

当第一个数据透视表的筛选字段发生更改时,我正在运行一个宏来更新工作簿中所有数据透视表的筛选字段(“设施”)(请参见下面的代码)。宏按预期运行,直到出现 .PivotTables("PivotTable5").PivotFields("Facility").CurrentPage = facility 的行,这会产生运行时错误 5。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim facility As String
'If the PivotTable1 filter value is changed...
If Not Intersect(Target, Me.PivotTables("PivotTable1").PivotFields("Facility").DataRange) Is Nothing Then
    facility = Me.PivotTables("PivotTable1").PivotFields("Facility").CurrentPage
    'Change all the other PivotTable filters to the same as PivotTable1
    With Me
        .PivotTables("PivotTable2").PivotFields("Facility").CurrentPage = facility
        .PivotTables("PivotTable3").PivotFields("Facility").CurrentPage = facility
        .PivotTables("PivotTable4").PivotFields("Facility").CurrentPage = facility
        .PivotTables("PivotTable5").PivotFields("Facility").CurrentPage = facility
        .PivotTables("PivotTable6").PivotFields("Facility").CurrentPage = facility
        .PivotTables("PivotTable7").PivotFields("Facility").CurrentPage = facility
    End With
    With ThisWorkbook
        .Worksheets("4E - Bili Screen (PivotTable)").PivotTables("PivotTable1").PivotFields("Facility").CurrentPage = facility
        .Worksheets("4E - DVT Proph (PivotTable)").PivotTables("PivotTable1").PivotFields("Facility").CurrentPage = facility            
        .Worksheets("4F - High-Risk Del (PivotTable)").PivotTables("PivotTable1").PivotFields("Facility").CurrentPage = facility
    End With
End If
End Sub

【问题讨论】:

  • 我认为这意味着 Me.PivotTables("PivotTable5") 不存在,或者如果存在,它没有一个 PivotField valled "Facility"
  • @Bill Hileman Me.PivotTables("PivotTable5") 确实存在,并且它确实具有 PivotField 值“Facility”。我发布了针对此问题的解决方案,需要在为每个数据透视表设置“.CurrentPage”值之前执行“.ClearAllFilters”操作。

标签: vba excel pivot-table


【解决方案1】:

在手动更新 PivotTable5 上的过滤器时录制宏(工作正常)后,我注意到录制的宏在设置 .CurrentPage 值之前插入了 .ClearAllFilters(如下所示),从而解决了问题。

.PivotTables("PivotTable5").PivotFields("Facility").ClearAllFilters
.PivotTables("PivotTable5").PivotFields("Facility").CurrentPage = facility

但是,我需要在 PivotTable5 之后为每个数据透视表 .ClearAllFilters,否则下一个 .CurrentPage 行会出现错误。我不知道为什么错误只发生在.PivotTables("PivotTable5").PivotFields("Facility").CurrentPage = facility 行上或之后,而不是上面的等效行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多