问题描述
我有一个循环,在其中循环浏览文件夹中的工作簿,并在数据透视表中提取特定值。工作簿都有多个工作表和数据透视表。我遇到一个问题,其中数据透视表的名称发生了更改,但是我无法解决此问题。
这是当前的代码示例,直到“数据透视表6” 更改为“数据透视表1”
为止Set pT = Sheets("sheet_name").Pivottables("Pivottable6")
wb_main.Worksheets("sheet_name").Cells(inc,13).Value = pT.GetPivotData("field,item references etc").Value
有没有一种动态更新方式,而无需进行硬编码“数据透视表1” 。我将为工作簿中的其他表回收此信息,因此我试图找到一种动态的解决方案来提取名称工作簿中的数据透视表,然后根据我要寻找的值Set pT = relevant table
。
解决方法
数据透视表名称充当数据透视表对象的标识符。如果不知道其名称,将很难找到所需的数据透视表。您需要使用用户难以更改的其他属性(例如.Tag
属性)来存储只有代码才能知道的自己的标识符。
您可以使用迭代for each
循环遍历工作簿中的所有数据透视表。这样,您可以系统地“访问”每个工作簿的每个工作表中的每个数据透视表。
Dim pt As PivotTable
Dim wb As Workbook
Dim ws As Worksheet
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
'// your code ...
ws.Cells(inc,13).Value = pt.GetPivotData("field,item references etc").Value
'// some more of your code ...
Next pt
Next ws
Next wb
如果您要尝试执行特定于特定枢轴表的特定操作,甚至可以访问诸如If pt.Name = "PivotTable1" Then ...
或If pt.Tag = "CodeName" Then ...
之类的条件,从而在访问它们时检查枢纽表的条件。