通过vba将计算字段添加到数据透视表

问题描述 投票:0回答:0

我在编写 vba 代码时遇到问题。非常感谢您的帮助(我在一些论坛上问过这个问题,但我得不到答案)。

示例 xlsm 文件位于 https://drive.google.com/file/d/1Awgu6kXkDGf8b2hHL6cASqKILt0EqHxX/view?usp=share_link

我的 excel 有 ByYear 和 ByStore 表,每个表中都有数据透视表,需要使用切片器更改它们的值字段。 ByYear 表中数据透视表的值字段是常规字段,但 ByStore 表中是计算字段。

以下代码适用于 ByYear 表,但不适用于 ByStore 表

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    
    Dim ptMain As PivotTable
    Dim pfMeasure As PivotField
    Dim i As Long
   
    On Error GoTo Errorhandler
    
    Set ptMain = Sheets("ByYear").PivotTables("PivotTable1")
    
    For Each pfMeasure In ptMain.DataFields
        pfMeasure.Orientation = xlHidden
    Next
    
    i = 0
    Do While Range("Metadata!$B$11").Offset(i, 0).Value <> ""
        ptMain.AddDataField ptMain.PivotFields(Range("Metadata!$B$11").Offset(i, 0).Value)
        i = i + 1
    Loop
    
    Exit Sub
    
Errorhandler:
Debug.Print Now(), Err.Description
    
End Sub

我需要修改下面的代码或上面的代码以适用于两张纸。

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    
    Dim ptMain As PivotTable
    Dim pfMeasure As PivotField
    Dim i As Long
    Dim rangeName As String
    
    On Error GoTo Errorhandler
    
    If ActiveSheet.Name = "ByYear" Then
        rangeName = "Metadata!$B$11"
        Set ptMain = Sheets("ByYear").PivotTables("PivotTable1")
    ElseIf ActiveSheet.Name = "ByStore" Then
        rangeName = "Metadata!$D$11"
        Set ptMain = Sheets("ByStore").PivotTables("PivotTable1")
    Else
        Exit Sub
    End If
       
    For Each pfMeasure In ptMain.DataFields
        pfMeasure.Orientation = xlHidden
    Next
    
    i = 0
    Do While Range(rangeName).Offset(i, 0).Value <> ""
        ptMain.AddDataField ptMain.PivotFields(Range(rangeName).Offset(i, 0).Value)
        i = i + 1
    Loop
       
    Exit Sub
    
Errorhandler:
    Debug.Print Now(), Err.Description
    
End Sub

在此先感谢您的帮助

excel vba calculated-field slicers
© www.soinside.com 2019 - 2024. All rights reserved.