按名称Excel 2010引用数据透视表

时间:2016-06-14 12:04:02

标签: excel vba excel-vba excel-formula

我的任务是使用几十个数据透视表重新组织一个非常混乱的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")

1 个答案:

答案 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