Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Vba 数据透视缓存创建运行时错误不匹配_Vba_Excel_Pivot Table - Fatal编程技术网

Vba 数据透视缓存创建运行时错误不匹配

Vba 数据透视缓存创建运行时错误不匹配,vba,excel,pivot-table,Vba,Excel,Pivot Table,我一直在尝试使用VBA创建一个pivottablee,但它在pivottache部分不断给我发送Pan错误消息 我在一个工作簿上有三个工作表,我打算使用工作表1中的表格在工作表3上创建数据透视表和图表。但我一直收到一条错误信息 以下是我的vba代码: Dim ws As Worksheet Dim pc As PivotCaches Dim pt As PivotTable Dim Rng As Range Dim wb As Workbook

我一直在尝试使用VBA创建一个
pivottable
e,但它在
pivottache
部分不断给我发送Pan错误消息

我在一个工作簿上有三个工作表,我打算使用工作表1中的表格在工作表3上创建数据透视表和图表。但我一直收到一条错误信息

以下是我的vba代码:

    Dim ws As Worksheet
    Dim pc As PivotCaches
    Dim pt As PivotTable
    Dim Rng As Range
    Dim wb As Workbook   

    Set ws = Worksheets("Sheet3")
    Set Rng = Worksheets("Sheet3").Range("A58")

    Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Table1", Version:=xlPivotTableVersion14)

    Set pt = pc.CreatePivotTable(TableDestination _
        :=Range("A58"), TableName:="PivotTable5", DefaultVersion:= _
        xlPivotTableVersion14)

    ActiveWorkbook.ShowPivotTableFieldList = True

End Sub
透视表数据屏幕截图


尝试下面的代码,在代码注释中进行解释:

Option Explicit

Sub PivotTablefromTable()

Dim wb          As Workbook
Dim ws          As Worksheet
Dim PTbl        As PivotTable
Dim PCache      As PivotCache
Dim WorkTbl     As ListObject
Dim PTblRng     As Range
Dim Rng         As Range

Set ws = Worksheets("Sheet3")
Set Rng = ws.Range("A58")

Set WorkTbl = Worksheets("work").ListObjects("Table1") ' <-- set a variable to the "Table1" in sheet "work"
Set PTblRng = WorkTbl.Range '<-- get the range from "Table1"

' set the Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PTblRng)

' Set the Pivot Table (already created in previous macro run)
On Error Resume Next
Set PTbl = ws.PivotTables("PivotTable5")

On Error GoTo 0
If PTbl Is Nothing Then ' <-- pivot table still doesn't exist >> need to create it
    ' create a new Pivot Table in ws sheet, start from Cell A58
    Set PTbl = ws.PivotTables.Add(PivotCache:=PCache, TableDestination:=Rng, TableName:="PivotTable5")

    ' rest of your code here

Else ' just refresh the Pivot table, with updated Pivot Cache
    PTbl.ChangePivotCache PCache
    PTbl.RefreshTable
End If

ActiveWorkbook.ShowPivotTableFieldList = True

End Sub
选项显式
子数据透视表fromtable()
将wb设置为工作簿
将ws设置为工作表
作为数据透视表的Dim PTbl
Dim PCache作为数据透视缓存
作为ListObject的Dim WorkTbl
变暗PTblRng As范围
变暗Rng As范围
设置ws=工作表(“表3”)
设置Rng=ws.范围(“A58”)

Set WorkTbl=Worksheets(“work”)。ListObjects(“Table1”)”尝试下面的代码,在代码注释中进行解释:

Option Explicit

Sub PivotTablefromTable()

Dim wb          As Workbook
Dim ws          As Worksheet
Dim PTbl        As PivotTable
Dim PCache      As PivotCache
Dim WorkTbl     As ListObject
Dim PTblRng     As Range
Dim Rng         As Range

Set ws = Worksheets("Sheet3")
Set Rng = ws.Range("A58")

Set WorkTbl = Worksheets("work").ListObjects("Table1") ' <-- set a variable to the "Table1" in sheet "work"
Set PTblRng = WorkTbl.Range '<-- get the range from "Table1"

' set the Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PTblRng)

' Set the Pivot Table (already created in previous macro run)
On Error Resume Next
Set PTbl = ws.PivotTables("PivotTable5")

On Error GoTo 0
If PTbl Is Nothing Then ' <-- pivot table still doesn't exist >> need to create it
    ' create a new Pivot Table in ws sheet, start from Cell A58
    Set PTbl = ws.PivotTables.Add(PivotCache:=PCache, TableDestination:=Rng, TableName:="PivotTable5")

    ' rest of your code here

Else ' just refresh the Pivot table, with updated Pivot Cache
    PTbl.ChangePivotCache PCache
    PTbl.RefreshTable
End If

ActiveWorkbook.ShowPivotTableFieldList = True

End Sub
选项显式
子数据透视表fromtable()
将wb设置为工作簿
将ws设置为工作表
作为数据透视表的Dim PTbl
Dim PCache作为数据透视缓存
作为ListObject的Dim WorkTbl
变暗PTblRng As范围
变暗Rng As范围
设置ws=工作表(“表3”)
设置Rng=ws.范围(“A58”)

Set WorkTbl=工作表(“工作”)。ListObjects(“Table1”)是“Sheet1”中的“table”格式为
table
,在VBA
中的意思是ListObject
?或者你是说一个常规的
范围
?@Shai Rado,表1在表1中。我没有改名字。这只是表1。我还没有格式化。所以,我相信它处于默认状态。您还没有回答我关于什么是表1的问题,是表的名称吗?范围你能编辑你的帖子并添加你的数据截图吗?一个样本?@Shai Rado,我刚刚添加了一个数据截图。是的,我的桌子在第一页。这是一张桌子。谢谢您的“Sheet1”中的“table”格式为
table
,这在VBA
列表对象中是什么意思?或者你是说一个常规的
范围
?@Shai Rado,表1在表1中。我没有改名字。这只是表1。我还没有格式化。所以,我相信它处于默认状态。您还没有回答我关于什么是表1的问题,是表的名称吗?范围你能编辑你的帖子并添加你的数据截图吗?一个样本?@Shai Rado,我刚刚添加了一个数据截图。是的,我的桌子在第一页。这是一张桌子。谢谢