【发布时间】:2019-05-25 06:28:38
【问题描述】:
我在 Excel 中创建的报告涉及几个非常相似的数据透视表,需要多次专门筛选(即年初至今表、季度至今表等,都需要准确筛选导出前的方式相同,然后再次过滤,然后导出等)
因此,我将 VBA 视为一种接受一些过滤条件的方式,然后在循环之前以这种方式过滤多个表。
但是,我很难正确定位数据透视表和特定字段,因为看起来集成的值字段是通过代码进行定位和过滤的,这与我附加到顶部的“过滤器”字段不同数据透视表,它们不能接受“开头”、“包含”等字符串。它们只是复选框,可以选择一个或多个。
所以我通过 VBA 告诉它选择 一个 项,并让它选择 除了一个 项之外的所有项是一回事。后者要求代码针对每一个可能的值,但不是我想要排除的值。
因此,我的想法是从这个过滤器字段中的每个可能的现有值创建一个数组,然后通过一个循环,将每个值作为要检查的值添加到我的代码中。
到目前为止我有一些代码:
ActiveSheet.PivotTables("QTD_Pivot_By_Category").PivotFields( _
"[Range].[Address_1].[Address_1]").VisibleItemsList = Array( _
"[Range].[Address_1].&", "[Range].[Address_1].&[0]", "[Range].[Address_1].&[101]" _
, "[Range].[Address_1].&[INC]", "[Range].[Address_1].&[KRT]", _
"[Range].[Address_1].&[LTD]", "[Range].[Address_1].&[RPO]", _
"[Range].[Address_1].&[ INC]", "[Range].[Address_1].&[CORP]", _
"[Range].[Address_1].&[INC.]", "[Range].[Address_1].&[LTD.]", _
"[Range].[Address_1].&[LTEE]", "[Range].[Address_1].&[PAWS]", _
现在,如果我只是从 Excel 中的操作中记录此宏,然后执行“全选”,然后取消选择我不想要的那个,它会出错。它会出错,因为它选择了大约 300 个值,并且在“编写”此代码时,当它在 VBA 代码的一条直线中达到“_”分隔符的限制时会出错。
如果我的字段如上所述被称为“Address_1”,范围的一部分...“Range”(不确定在哪里定义或为什么,但它有效),我可以就最有效的方法获得一些帮助将所说的“.VisibleItemList”定义为来自动态数组的列表中的所有可能项目,而不是需要手动选择?此列表每天都会有所不同,因此不能只是硬编码的平面列表。
理想情况下,也可以绕过 VBA for Excel 中一行代码中“_”换行符的最大限制。
如果它对上下文有用,我的表格看起来像这样。看到那个复选框下拉菜单了吗?我希望将其中的每个更新值的快照放入一个数组中,然后以类似于我的示例代码的方式在添加时进行迭代:
编辑: 由于该过滤器字段的值是从本地数据源中提取的,因此我决定只获取这些值并以这种方式创建一个数组!所以我以这种方式开始我的代码:
Dim OGDataRange As Range, OGDataLastRow As Long
Dim ValueArray As Variant
OGDataLastRow = Worksheets("DATA QTD").Range("U2").End(xlDown).Row
Set OGDataRange = Worksheets("DATA QTD").Range("U2:U" & OGDataLastRow)
ValueArray = OGDataRange.Value
“ValueArray”现在是我的数组。因此,我需要一个接一个地提取该数组的值,并将它们添加到我的 VisibleItemList 中,如上所示。
非常感谢您的帮助。
【问题讨论】: