excel - 在数据透视字段上创建命名范围
问题描述
出于特定原因,我需要在数据透视表过滤器字段上使用命名范围。我知道过滤器字段有它自己的名称,但我需要使用命名范围来引用它。我的问题是我收到的只是一个作为参数的命名范围列表,我不知道它们是否引用了数据透视表过滤器。它们可能是一个简单的细胞。我的代码需要使用这个命名范围来将值设置为用户指定的值。当过滤器不是日期时,这似乎有效。但是,如果过滤器是日期列表,我尝试通过这样做来设置它
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 设置它,但我没有可用的数据透视表信息,而且我不知道如何/是否可以通过命名范围获取它。
有任何想法吗?
解决方案
我想出了这个解决方案。我完全意识到这肯定不是最好的方法。欢迎任何评论/更好的想法:)
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。
推荐阅读
- mysql - Docker Swarm Keyrock Mysql 子网连接
- php - 在 MySQL 数据库中搜索服务于输入 lat/long 的值
- android - 如何停止 IntentService Android
- powerbi - 如何过滤今天前 2 天的日期
- laravel - 将参数传递给组件时出错
- javascript - 如何更改 JSXGraph 轴图中网格线的粗细?
- node.js - 如何将事件添加到使用 google 成功登录到我的 MERN Stack 应用程序的用户?
- java - Java8 - 显式类型如何匹配一个变体 - 而不是其他类型?
- c# - 如何动态添加日期从星期一开始的星期名称作为表头?
- haskell - Haskell 映射直到满足第一个条件