首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用更改源数据更改数据透视表列筛选器

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

Stack Overflow用户
提问于 2019-06-26 19:27:17
回答 1查看 81关注 0票数 1

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

为了理解,我有一个客户列表和他们的代码,我已经为他们每个人构建了一个主键,因为在我输入到SAP之前,我需要用相等的主密钥代码过滤客户,这样SAP就会接受它。但是在源文件上,我会有多个主密钥代码。

我制作了一个枢轴表,并将主键放在列上,这样我就可以通过主键看到客户的代码。

有了它,我通过主密钥过滤,我有它的具体客户代码,现在我可以把它发送到SAP。并对文件上的所有主键重复。这个信息每次都会从销售部更改,所以主键每次也会改变。

我需要做的是从文件中获取所有的主键(这样做),并且,在我被困的地方,使用它来隐藏并在循环中显示一个主键。例如(MK代表主键):

代码语言:javascript
复制
Customer MK1 MK2 MK3 MK4
   X      1
   Y          1
   Z          1
   A      1

所以我过滤MK1,为它获取客户代码,运行SAP程序,回到支点,过滤下一个现有代码,获取客户代码,运行SAP,然后再做一次。

代码语言:javascript
复制
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

正如上面的代码所示,我处于死胡同。根本不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 14:45:30

您可以切换每个单一的“主键”可见的Pivotitem.Visible

请注意,始终至少有一个枢轴必须保持可见。

由此产生的可见"customers“可以从PivotField.DataRange中读取,它表示该枢轴字段的所有可见的枢轴标题。您可以按单元格对该范围单元格进行寻址,也可以将其值分配给数组。

代码语言:javascript
复制
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

如果您需要所有对应的客户作为数组,在切换下一个可见的masterkey之后使用它:

代码语言:javascript
复制
Dim arrCustomers() As Variant
arrCustomers = pfCustomer.DataRange.Value
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56779805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档