出于特定原因,我需要在数据透视表过滤器字段上使用命名范围。我知道过滤器字段具有其自己的名称,但是我需要使用命名范围来引用它。我的问题是,我收到的只是一个用作参数的命名范围列表,我不知道它们是否引用数据透视表过滤器。它们可能是一个简单的单元格。我的代码需要使用此命名范围将值设置为用户指定的值。当过滤器不是日期时,这似乎起作用。但是,如果过滤器是日期列表,而我尝试通过
进行设置Versions
我收到错误Set wbReport = Workbooks.Open(flpath)
wbReport.Worksheets("Sheet1").Range("myrange").value = "2019/06/01"
。
我知道我可以使用数据透视表过滤器的currentPage进行设置,但是我没有可用的数据透视表信息,而且我不知道如何/是否可以通过命名范围来获取数据。
有什么想法吗?
答案 0 :(得分:1)
我想出了这个解决方案。我完全意识到,这当然不是解决问题的最佳方法。欢迎任何评论/更好的主意:)
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(过滤器)。我将页面字段的列/行与命名范围的列/行交叉引用。
如果它们匹配,我将遍历该过滤器的每个项目(即下拉菜单),并根据用户指定的值检查每个过滤器的值。如果它们匹配,则将CurrentPage设置为该PivotItem。