我的任务是使用几十个数据透视表重新组织一个非常混乱的excel文件。重组的一部分将涉及在相同的工作表和新工作表上移动数据透视表,以便为它们随时间增长创造空间。但是,使用getpivotdata()函数的数据透视表引用被硬编码到数据透视表的位置。
我一直试图通过使用自定义函数接受数据透视表的名称并返回其位置来解决这个问题,以便在getpivotdata()函数中使用,以允许我移动数据透视表而不引用桌子破了。我尝试返回一个字符串版本的位置和一个范围对象指定位置,但这两个都给我参考错误。到目前为止,我最成功的函数返回了一个pivottable对象,虽然它没有给我一个引用错误,但它只返回0作为数据,无论我尝试什么
这是当前的代码:
Public Function pivotNameToLoc(PTName As String) As PivotTable
Dim WS As Worksheet, PT As PivotTable
For Each WS In ActiveWorkbook.Worksheets
For Each PT In WS.PivotTables
If PT.Name = PTName Then
pivotNameToLoc = PivotTable
Exit Function
End If
Next PT
Next WS
End Function
以下是在单元格公式中调用函数的方法
=GETPIVOTDATA("Data field",pivotNameToLoc("Name of table"),"other","fields")
答案 0 :(得分:1)
您需要返回一个范围:
Public Function pivotNameToLoc(PTName As String) As Range
Dim WS As Worksheet, PT As PivotTable
For Each WS In ActiveWorkbook.Worksheets
For Each PT In WS.PivotTables
If PT.Name = PTName Then
Set pivotNameToLoc = PT.TableRange1.Cells(1)
Exit Function
End If
Next PT
Next WS
End Function