Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同步数据透视表-VBA代码不工作_Vba_Excel_Pivot Table - Fatal编程技术网

同步数据透视表-VBA代码不工作

同步数据透视表-VBA代码不工作,vba,excel,pivot-table,Vba,Excel,Pivot Table,我目前正在开发一个动态仪表板。我的计算表上有几个数据透视表,它们来自不同的来源,但具有相同的筛选选项(日期、代理名称等)。我的概览表从这些透视表中获取数据。其思想是,基于连接到1个pivot的几个切片器,我可以更新其他pivot表,并在概览表上使用结果进行操作 我使用了下面的代码来同步过滤选项。当我在有透视表的工作表中进行更改时,这段代码工作得很好。但是,如果我将切片器转换为概览表,并尝试使用数据进行操作,那么我的计算表上只更新了1个透视表,因此概览表上只显示了一半的信息 代码复制在概览和计算表

我目前正在开发一个动态仪表板。我的计算表上有几个数据透视表,它们来自不同的来源,但具有相同的筛选选项(日期、代理名称等)。我的概览表从这些透视表中获取数据。其思想是,基于连接到1个pivot的几个切片器,我可以更新其他pivot表,并在概览表上使用结果进行操作

我使用了下面的代码来同步过滤选项。当我在有透视表的工作表中进行更改时,这段代码工作得很好。但是,如果我将切片器转换为概览表,并尝试使用数据进行操作,那么我的计算表上只更新了1个透视表,因此概览表上只显示了一半的信息

代码复制在概览和计算表上。请帮忙

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

Dim wsMain As Worksheet
Dim ws As Worksheet
Dim ptMain As PivotTable
Dim pt As PivotTable
Dim pfMain As PivotField
Dim pf As PivotField
Dim pi As PivotItem
Dim bMI As Boolean

On Error Resume Next
Set wsMain = ActiveSheet
Set ptMain = Target

Application.EnableEvents = False
Application.ScreenUpdating = False

For Each pfMain In ptMain.PageFields
    bMI = pfMain.EnableMultiplePageItems
    For Each ws In ThisWorkbook.Sheets("CalculationSheet")
        For Each pt In ws.PivotTables
            If ws.Name & "_" & pt <> wsMain.Name & "_" & ptMain Then
                pt.ManualUpdate = True
                Set pf = pt.PivotFields(pfMain.Name)
                        bMI = pfMain.EnableMultiplePageItems
                        With pf
                            .ClearAllFilters
                            Select Case bMI
                                Case False
                                    .CurrentPage = pfMain.CurrentPage.Value
                                Case True
                                    .CurrentPage = "(All)"
                                    For Each pi In pfMain.PivotItems
                                        .PivotItems(pi.Name).Visible = pi.Visible
                                    Next pi
                                    .EnableMultiplePageItems = bMI
                            End Select
                        End With
                        bMI = False

                Set pf = Nothing
                pt.ManualUpdate = False
            End If
        Next pt
    Next ws
Next pfMain

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private子工作表\u数据透视表更新(ByVal目标作为数据透视表)
将wsMain设置为工作表
将ws设置为工作表
将ptMain设置为数据透视表
数据透视表
Dim pfMain作为数据透视字段
Dim pf作为数据透视字段
Dim pi作为数据透视项
将bMI设置为布尔值
出错时继续下一步
设置wsMain=ActiveSheet
设置ptMain=Target
Application.EnableEvents=False
Application.ScreenUpdating=False
对于ptMain.PageFields中的每个pfMain
bMI=pfMain.EnableMultiplePageItems
对于此工作簿中的每个ws.Sheets(“计算表”)
对于ws.PivotTables中的每个pt
如果ws.Name&“”&pt wsMain.Name&“”&ptMain,则
pt.ManualUpdate=True
设置pf=pt.PivotFields(pfMain.Name)
bMI=pfMain.EnableMultiplePageItems
与pf
.ClearAllFilters
选择病例bMI
案例错误
.CurrentPage=pfMain.CurrentPage.Value
情况属实
.CurrentPage=“(全部)”
对于pfMain.PivotItems中的每个pi
.PivotItems(pi.Name).Visible=pi.Visible
下一个pi
.EnableMultiplePageItems=bMI
结束选择
以
体重指数=假
设置pf=无
pt.ManualUpdate=False
如果结束
下一个pt
下一个ws
下一个pfMain
Application.EnableEvents=True
Application.ScreenUpdating=True
端接头

我认为问题在于这一行:

For Each ws In ThisWorkbook.Sheets("CalculationSheet")
该行将代码限制为仅考虑名为“CalculationSheet”的工作表上的数据透视表。如果要在工作簿中的所有工作表上使用,请将其更改为:

For Each ws In ThisWorkbook.WorkSheets

…根据

Hi的原始代码列表,您是否已经尝试修改切片器连接?Hi,如上所述,pivot表具有不同的数据源,因此无法连接切片器连接。我可以用代码来实现这一点,但结果是速度非常慢。更快的方法是直接将其应用于透视表。如果一个数据透视表发生更改,另一个数据透视表将受到影响,反之亦然。因此,将切片器添加到其中一个枢轴以控制另一个枢轴的想法应该是可行的。它做得很好,但是,如果切片器转到另一个页面,它只控制一个轴。嗨,杰弗里韦尔,谢谢你的回复。我已经将此更改为专门引用图纸,否则过滤器会变得疯狂,并且没有应用任何数据。代码在“.ClearAllFilters”上停止。