如何动态检索数据的范围地址,然后更改数据透视表数据源的范围地址?

问题描述 投票:0回答:1

我正在尝试动态检索数据的范围地址,然后更改数据透视表数据源的范围地址。

涉及三张纸。

1)ThisWorkbook.Worksheets(“ sheet1”)-主仪表板,具有从sheet2移出的数据透视图和切片器2)ThisWorkbook.Worksheets(“ sheet2”)-数据透视表3)ThisWorkbook.Worksheets(“ sheet3”)-在以下代码运行之前从其他工作簿复制的源数据。

我的代码给了

运行时错误5:无效的过程调用或参数

错误指向Set pt = Pivot_sht.PivotTables(PivotName).ChangePivotCache(pc)

我的主表上还有另外两个数据透视图。使用相同的代码,它们可以毫无问题地刷新。

完整代码:

Option Explicit

Sub test()
    Dim daMa As Worksheet
    Dim daPerf As Worksheet
    Dim LastRow As Long
    Dim LastCol As Long
    Dim Data_sht As Worksheet
    Dim Pivot_sht As Worksheet
    Dim DataRange As Range
    Dim PivotName As String
    Dim NewRangePH As String
    Dim pt As PivotTable
    Dim pc As PivotCache

    'REFRESHING PERFORMANCE HISTORY

    'Set Variables Equal to Data Sheet and Pivot Sheet
    Set Data_sht = ThisWorkbook.Worksheets("sheet3")
    Set Pivot_sht = ThisWorkbook.Worksheets("sheet2")

    'Enter in Pivot Table Name
    PivotName = "PHPivot"

    With Data_sht
        .Activate

        'Dynamically Retrieve Range Address of Data
        LastRow = .Cells(.Rows.Count, "G").End(xlUp).Row
        LastCol = 12

        Set DataRange = Data_sht.Range(Cells(LastRow, 1).Address, Cells(1, LastCol).Address)

    End With

    NewRangePH = Data_sht.Name & "!" & _
    DataRange.Address(ReferenceStyle:=xlR1C1)

    'Make sure every column in data set has a heading and is not blank (error prevention)
    If WorksheetFunction.CountBlank(DataRange.Rows(1)) > 0 Then
        MsgBox "One of your data columns has a blank heading." & vbNewLine _
          & "Please fix and re-run!.", vbCritical, "Column Heading Missing!"
        Exit Sub
    End If

    'Change Pivot Table Data Source Range Address
    Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRangePH)
    Set pt = Pivot_sht.PivotTables(PivotName).ChangePivotCache(pc)

End Sub

我在发布此问题之前搜索了许多Google结果和Stack Overflow的结果,并尝试了至少10种不同的方法。

excel vba
1个回答
0
投票

“ set pt =”已磨损,您不想设置新的数据透视表。改为使用

Pivot_sht.PivotTables(PivotName).ChangePivotCache ActiveWorkbook. _
    PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    newRangePH, Version:=xlPivotTableVersion15)
© www.soinside.com 2019 - 2024. All rights reserved.