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

Vba 按名称Excel 2010引用数据透视表,vba,excel,excel-formula,Vba,Excel,Excel Formula,我的任务是重新组织一个极其混乱的excel文件,其中包含几十个数据透视表。重组的一部分将涉及移动数据透视表,包括在同一张表上和在新的表上,以便为它们创造随时间增长的空间。但是,使用getpivotdata()函数的数据透视表引用被硬编码到数据透视表的位置 我一直在尝试通过使用一个自定义函数来接受数据透视表的名称并返回其位置,以便在getpivotdata()函数中使用,从而允许我在不引用数据透视表的情况下移动数据透视表。我尝试返回位置的字符串版本和指定位置的range对象,但这两个对象都会导致引

我的任务是重新组织一个极其混乱的excel文件,其中包含几十个数据透视表。重组的一部分将涉及移动数据透视表,包括在同一张表上和在新的表上,以便为它们创造随时间增长的空间。但是,使用getpivotdata()函数的数据透视表引用被硬编码到数据透视表的位置

我一直在尝试通过使用一个自定义函数来接受数据透视表的名称并返回其位置,以便在getpivotdata()函数中使用,从而允许我在不引用数据透视表的情况下移动数据透视表。我尝试返回位置的字符串版本和指定位置的range对象,但这两个对象都会导致引用错误。到目前为止,我最成功的函数返回了一个数据透视表对象,虽然它没有给我一个引用错误,但无论我做什么尝试,它都只返回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")

您需要返回一个范围:

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

谢谢我以前使用范围对象的尝试使用了错误的TableRange属性。