Excel 使用更改源数据更改透视表列筛选器

Excel 使用更改源数据更改透视表列筛选器,excel,vba,pivot-table,Excel,Vba,Pivot Table,我已经构建了一个宏,它连接到SAP,完成它的工作,获取响应并将其写在电子表格上。问题是,在脚本能够完成之前,我需要按集群获取数据 为了便于理解,我有一个客户列表及其代码,并为每个客户建立了一个主密钥,因为在我将其输入SAP之前,我需要按相等的主密钥代码筛选客户,以便SAP接受。但是在源文件中,我会有多个主密钥代码 我制作了一个透视表,并将主键放在列上,这样我就可以按主键查看客户代码 有了它,我就可以通过主密钥进行过滤,并为其提供特定的客户代码,现在我可以将其发送到SAP。并对文件上的所有主密钥重

我已经构建了一个宏,它连接到SAP,完成它的工作,获取响应并将其写在电子表格上。问题是,在脚本能够完成之前,我需要按集群获取数据

为了便于理解,我有一个客户列表及其代码,并为每个客户建立了一个主密钥,因为在我将其输入SAP之前,我需要按相等的主密钥代码筛选客户,以便SAP接受。但是在源文件中,我会有多个主密钥代码

我制作了一个透视表,并将主键放在列上,这样我就可以按主键查看客户代码

有了它,我就可以通过主密钥进行过滤,并为其提供特定的客户代码,现在我可以将其发送到SAP。并对文件上的所有主密钥重复此操作。 销售部门每次都会更改此信息,因此主密钥也会每次更改

我需要做的是从文件中获取所有主密钥(这样做),然后,在我卡住的地方,使用它在循环中一次隐藏和显示一个主密钥。 例如(MK代表主密钥):

所以我过滤MK1,获取客户代码,运行SAP,回到pivot,过滤下一个现有代码,获取客户代码,运行SAP,然后重新开始

If Range("A2") <> "" Then

    Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(-1, 1).Select
    Range(Selection, Selection.End(xlUp)).FillDown

    FILTRO2 = ActiveCell

    Range("A1").Select

            Do While ActiveCell <> ""

                FILTRO = ActiveCell

                Sheets("Dinâmica").Activate

                ActiveWorkbook.RefreshAll

                With ActiveSheet.PivotTables("Tabela dinâmica2").PivotFields("Chave")
                    .PivotItems(Split(FILTRO2.Value, ",")).Visible = False
                    .PivotItems(FILTRO).Visible = True
                End With
如果范围(“A2”)“那么
范围(“A1”)。选择
选择。结束(xlDown)。选择
ActiveCell.Offset(-1,1)。选择
范围(Selection,Selection.End(xlUp)).FillDown
FILTRO2=有源电池
范围(“A1”)。选择
当ActiveCell“”时执行此操作
FILTRO=活性电池
板材(“Din–云母”)。激活
ActiveWorkbook.RefreshAll
使用ActiveSheet.PivotTables(“tabeladin–mica2”).PivotFields(“Chave”)
.PivotItems(拆分(FILTRO2.Value,“”)。可见=假
.PivotItems(FILTRO).Visible=True
以

正如上面代码所示,我已经走到了死胡同。根本不起作用。

您可以切换通过
数据透视项可见的每个“主键”。可见

请注意,必须始终至少有一个数据透视项保持可见

可以从
数据透视字段.DataRange
读取生成的可见“客户”,该数据透视字段表示该数据透视字段的所有可见数据透视项。可以逐个单元格寻址该范围,也可以将其值指定给数组

Private Sub FilterMasterkeys()
    Dim pt As PivotTable
    Dim pfCustomer As PivotField
    Dim pfMasterkey As PivotField
    Dim i As Long
    Dim c As Range ' a cell

    Set pt = ActiveWorkbook.Sheets("Dinâmica").PivotTables("Tabela dinâmica2")
    pt.RefreshTable

    Set pfCustomer = pt.RowFields(1)
    Set pfMasterkey = pt.ColumnFields("Chave")

    ' hide all masterkeys except first
    pfMasterkey.PivotItems(1).Visible = True
    For i = 2 To pfMasterkey.PivotItems.Count
        pfMasterkey.PivotItems(i).Visible = False
    Next i

    ' set each masterkey visible and get corresponig customers
    For i = 1 To pfMasterkey.PivotItems.Count - 1
        pfMasterkey.PivotItems(i).Visible = True
        Debug.Print "Masterkey " & pfMasterkey.PivotItems(i).Caption & " is used by ",
        For Each c In pfCustomer.DataRange.Cells
            Debug.Print c.Value,
        Next c
        Debug.Print

        pfMasterkey.PivotItems(i + 1).Visible = True
        pfMasterkey.PivotItems(i).Visible = False
    Next i

    ' get the last one also
    Debug.Print "Masterkey " & pfMasterkey.PivotItems(i).Caption & "is used by ",
    For Each c In pfCustomer.DataRange.Cells
        Debug.Print c.Value,
    Next c
    Debug.Print

End Sub
如果需要将所有对应的客户作为阵列,请在切换下一个主密钥后使用此命令:

Dim arrCustomers() As Variant
arrCustomers = pfCustomer.DataRange.Value

您可以切换透视项可见的每个“masterkey”。可见的

请注意,必须始终至少有一个数据透视项保持可见

可以从
数据透视字段.DataRange
读取生成的可见“客户”,该数据透视字段表示该数据透视字段的所有可见数据透视项。可以逐个单元格寻址该范围,也可以将其值指定给数组

Private Sub FilterMasterkeys()
    Dim pt As PivotTable
    Dim pfCustomer As PivotField
    Dim pfMasterkey As PivotField
    Dim i As Long
    Dim c As Range ' a cell

    Set pt = ActiveWorkbook.Sheets("Dinâmica").PivotTables("Tabela dinâmica2")
    pt.RefreshTable

    Set pfCustomer = pt.RowFields(1)
    Set pfMasterkey = pt.ColumnFields("Chave")

    ' hide all masterkeys except first
    pfMasterkey.PivotItems(1).Visible = True
    For i = 2 To pfMasterkey.PivotItems.Count
        pfMasterkey.PivotItems(i).Visible = False
    Next i

    ' set each masterkey visible and get corresponig customers
    For i = 1 To pfMasterkey.PivotItems.Count - 1
        pfMasterkey.PivotItems(i).Visible = True
        Debug.Print "Masterkey " & pfMasterkey.PivotItems(i).Caption & " is used by ",
        For Each c In pfCustomer.DataRange.Cells
            Debug.Print c.Value,
        Next c
        Debug.Print

        pfMasterkey.PivotItems(i + 1).Visible = True
        pfMasterkey.PivotItems(i).Visible = False
    Next i

    ' get the last one also
    Debug.Print "Masterkey " & pfMasterkey.PivotItems(i).Caption & "is used by ",
    For Each c In pfCustomer.DataRange.Cells
        Debug.Print c.Value,
    Next c
    Debug.Print

End Sub
如果需要将所有对应的客户作为阵列,请在切换下一个主密钥后使用此命令:

Dim arrCustomers() As Variant
arrCustomers = pfCustomer.DataRange.Value

@Peh将研究这种方法。。。谢谢大家!@Peh将研究这种方法。。。非常感谢。哥们,太完美了!非常感谢你!哥们,太完美了!非常感谢你!