Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何动态检索数据的范围地址,然后更改透视表数据源范围地址?_Excel_Vba - Fatal编程技术网

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

Excel 如何动态检索数据的范围地址,然后更改透视表数据源范围地址?,excel,vba,Excel,Vba,我试图动态检索数据的范围地址,然后更改透视表数据源范围地址 涉及三张纸 1) ThisWorkbook.Worksheets(“sheet1”)-主仪表板,具有从sheet2移动的轴图和切片器 2) 此工作簿。工作表(“表2”)-数据透视表 3) ThisWorkbook.Worksheets(“sheet3”)—在运行以下代码之前从不同工作簿复制的源数据 我的代码给出 运行时错误5:过程调用或参数无效 错误指向Set pt=Pivot\u sht.PivotTables(PivotName).

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

涉及三张纸

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

我的代码给出

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

错误指向
Set pt=Pivot\u sht.PivotTables(PivotName).changeprovotcache(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种不同的方法。

“set pt=”is worn,您不想设置新的数据透视表。 改用

Pivot_sht.PivotTables(PivotName).ChangePivotCache ActiveWorkbook. _
    PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    newRangePH, Version:=xlPivotTableVersion15)

当您设置
datarange
时,您没有像
Data\sht那样在
单元格
前面加上一个表前缀。
这是故意的吗?我能看到那张纸,是的。有意“使用数据和.Activate”来激活数据表。您会选择不同的方法吗?with应该与datasht和
单元格类似(
类似于
lastRow
I ahev按照建议进行修改(设置DataRange=.Range(.cells(lastRow,1).Address,.cells(1,LastCol).Address)),但行中的问题相同(设置pt=Pivot\u sht.PivotTables(PivotName).ChangePivotCache(pc))ChangePivotCache所需的参数是字符串数据类型。。从您的代码段中不清楚您输入的数据类型,但从语法来看,它似乎是一个对象。嗨,Max,谢谢您的回答。我已经尝试过这个问题,现在已经仔细检查了。问题仍然指向(Pivot\u sht.PivotTables(PivotName).ChangePivotCache ThisWorkbook.\uPivotCaches.Create(SourceType:=xlDatabase,SourceData:=\uNewRangeph,Version:=xlPivotTableVersion15))我现在在我的电脑上测试了这一点,它运行正常,没有错误。也许您有不同版本的ESCL,请删除该部分,“Version:=xlPivotTableVersion15”