首页 > 解决方案 > 在数据透视字段上创建命名范围

问题描述

出于特定原因,我需要在数据透视表过滤器字段上使用命名范围。我知道过滤器字段有它自己的名称,但我需要使用命名范围来引用它。我的问题是我收到的只是一个作为参数的命名范围列表,我不知道它们是否引用了数据透视表过滤器。它们可能是一个简单的细胞。我的代码需要使用这个命名范围来将值设置为用户指定的值。当过滤器不是日期时,这似乎有效。但是,如果过滤器是日期列表,我尝试通过这样做来设置它

Set wbReport = Workbooks.Open(flpath)
wbReport.Worksheets("Sheet1").Range("myrange").value = "2019/06/01" 

我得到错误2019/06/01 is not an item of this field。我知道我可以使用数据透视表过滤器的 currentPage 设置它,但我没有可用的数据透视表信息,而且我不知道如何/是否可以通过命名范围获取它。

有任何想法吗?

标签: excelvba

解决方案


我想出了这个解决方案。我完全意识到这肯定不是最好的方法。欢迎任何评论/更好的想法:)

RangeAddr = Sheet1.Range("MyRange").Cells.Column & ":" & Sheet1.Range("MyRange").Cells.Row
For Each pt In Sheet1.PivotTables
    For Each f In pt.PageFields
        If (f.DataRange.Cells.Column & ":" & f.DataRange.Cells.Row) = RangeAddr Then
            For Each pi In f.PivotItems
                If Format(pi.Value, "yyyy/mm/dd") = UserValue Then
                    f.CurrentPage = pi.Caption
                    Exit For
                End If
            Next
            Exit For
            Exit For
        End If
    Next
Next

基本上,我在这里所做的是获取命名范围的列和行。然后,我遍历工作表上的所有数据透视表,并在该循环中遍历该数据透视表上的每个 pageField(过滤器)。我将 pageField 的列/行与我的命名范围的列/行交叉引用。

如果它们匹配,我会遍历该过滤器的每个项目(即下拉菜单)并根据用户指定的值检查每个项目的值。如果它们匹配,我将 CurrentPage 设置为该 PivotItem。


推荐阅读