Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
使用combobox更改所有透视表';在一个选择中同时过滤(Excel VBA代码)_Vba_Excel_Combobox_Pivot Table - Fatal编程技术网

使用combobox更改所有透视表';在一个选择中同时过滤(Excel VBA代码)

使用combobox更改所有透视表';在一个选择中同时过滤(Excel VBA代码),vba,excel,combobox,pivot-table,Vba,Excel,Combobox,Pivot Table,我正在使用Excel,目前我在一张工作表(Sheet2)中有多个数据透视表,我正试图用组合框作为Sheet1中的过滤器来控制这些数据透视表。 因此,基本上我希望从Sheet1中的组合框中进行选择,以过滤Sheet2中的所有透视表(大约10个左右) 现在,我似乎能够使用VBA在一个只有一个透视表的新文件中实现这一点,但在将其应用到实际工作表时,它不断向我发出错误消息 以下是我用来成功管理的代码: Sub Macro2() Dim QtrChosen As String QtrC

我正在使用Excel,目前我在一张工作表(Sheet2)中有多个数据透视表,我正试图用组合框作为Sheet1中的过滤器来控制这些数据透视表。
因此,基本上我希望从Sheet1中的组合框中进行选择,以过滤Sheet2中的所有透视表(大约10个左右)

现在,我似乎能够使用VBA在一个只有一个透视表的新文件中实现这一点,但在将其应用到实际工作表时,它不断向我发出错误消息

以下是我用来成功管理的代码:

Sub Macro2()

    Dim QtrChosen As String

    QtrChosen = Worksheets("Database").Range("C3").Value

    MsgBox QtrChosen

    Dim PivotTable10 As PivotTable

    Worksheets("PivotTable").PivotTables("PivotTable10").PivotFields("Qtr").ClearAllFilters 

    Worksheets("PivotTable").PivotTables("PivotTable10").PivotFields("Qtr"). _CurrentPage = QtrChosen 

End Sub
上面的代码对我来说很有魅力,但下面的代码没有:

Sub MacroModuleName()

    Dim ModulNameVariable As String

    ModulNameVariable = Worksheets("MenuSheet").Range("G3").Value

    Dim PivotTable1, PivotTable2, PivotTable3, PivotTable4, PivotTable5 As PivotTable

    Worksheets("Pivot1Sheet").PivotTables("PivotTable1").PivotFields( _

    "[ModulesDatabase].[Module Name].[Module Name]").ClearAllFilters

    Worksheets("Pivot1Sheet").PivotTables("PivotTable1").PivotFields( _

    "[ModulesDatabase].[Module Name].[Module Name]").CurrentPage = _

    ModulNameVariable


  End Sub

有人知道如何处理这个问题吗?非常感谢您的任何见解或帮助

在不了解更多错误消息类型的情况下,您可能可以循环工作表中的所有数据透视表,并按如下方式应用设置(假设您将应用于工作表中的所有数据透视表,但您可以通过在循环过程中测试数据透视的名称进行排除。)。我假设如下
[ModulesDatabase].[modulename].[modulename]
正确

注:

您将大多数数据透视表变量声明为变量,而不是注释中提到的数据透视表

我看不到代码中显示的组合框,所以我不知道您是否有一个链接单元格,该单元格将索引到列表中,并将值返回到范围(“G3”)?我也不清楚你是如何触发的。你把它系在钮扣上了吗

我建议查看我在评论中给出的有关同步数据透视表和PivotTableUpdate()事件的链接,因为这可能比循环每个数据透视表并应用设置更有效

Sub MacroModuleName()

    Dim ModulNameVariable As String

    ModulNameVariable = ThisWorkbook.Worksheets("MenuSheet").Range("G3").Value

    Dim pvt As PivotTable

    For Each pvt In ThisWorkbook.Worksheets("Pivot1Sheet")

          pvt.PivotFields("[ModulesDatabase].[Module Name].[Module Name]").ClearAllFilters
          pvt.PivotFields("[ModulesDatabase].[Module Name].[Module Name]").CurrentPage = _
          ModulNameVariable

    Next pvt

End Sub

你犯了什么错误?此外,数据透视表1、数据透视表2、数据透视表3、数据透视表4、数据透视表5因为数据透视表只声明最后一个数据透视表,其他数据透视表都是变量。您需要显式地声明每个数据透视表的类型,即Dim PivotTable 1为PivotTable等……数据透视表是否来自相同的源数据?您可能还希望查看数据透视表更新事件。您可以应用设置在第二张工作表中循环所有数据透视表,或者,如果可以链接数据透视表,则只需更新其中一个数据透视表,然后让其他数据透视表更新。其他链接包括…嗨,Qharr,非常感谢你的帮助,非常感谢。我尝试了您的代码,它给了我一条错误消息:“运行时错误‘438’:对象不支持此方法属性。”我以前的错误是:“无法设置数据透视字段类的CurrentPage属性。”当我再次查看代码时,我突然意识到问题可能是因为我的数据透视表是通过PowerPivot创建的。关于如何使用PowerPivot完成上述任务,有什么想法吗?再次非常感谢!数据透视是否基于同一数据源构建?如果是这样,考虑使用切片机吗?这有帮助吗?嗨,Qharr,谢谢你的关心和抱歉的迟到的答复!我没有使用切片器,因为这些数据透视表链接到仪表板主页中的组合框。无论如何,经过大量的尝试和错误,我认为问题在于错误链接的数据库或类似的数据库,我尝试将您的代码合并到我的代码中,效果很好!再次感谢你的帮助,真的很感激!