我在编写 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
在此先感谢您的帮助