2017-03-27 241 views
2

我想根据同一工作簿中的数据集(包含在工作表中)创建数据透视表。运行时错误1004“无法打开数据透视表源文件”

当我运行宏时,工作簿打开。数据集来自在Access中运行查询,然后将其导出到Excel。我也尝试在运行宏之前保存工作簿。我使用Excel 2016

这是我的代码:

Sub BusinessInteligenceCreatePivotTable() 
    Dim PivotSheet As Worksheet 
    Dim pvtCache As PivotCache 
    Dim pvt As PivotTable 

    'Determine the data range you want to pivot 
    Set pvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsPartsMachines.Name & "'!" & wsPartsMachines.Range("A1").CurrentRegion.Address, Version:=xlPivotTableVersion15) 

    'Create a new worksheet 
    With ThisWorkbook 
     Set PivotSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
     PivotSheet.Name = "Production Schedule" 
    End With 

    PivotSheet.Activate 
    Range("A1").Select 

    'Create Pivot table from Pivot Cache 
    'Set pvt = pvtCache.CreatePivotTable(TableDestination:=ActiveCell, TableName:="ProductionSchedule") 
    Set pvt = PivotSheet.PivotTables.Add(PivotCache:=pvtCache, TableDestination:=ActiveCell, TableName:="ProdSched") 
End Sub 

最后两行产生相同的错误消息。 “运行时错误1004.不能打开数据透视表源文件'C:\ Users ...'”。

有谁知道如何解决这个问题? 谢谢。

编辑 当我录制一个宏时,VBA给了我这个代码(它有效)。

Sub BusinessInteligenceCreatePivotTable() 
    Dim PivotSheet As Worksheet 
    With ThisWorkbook 
     Set PivotSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
     PivotSheet.Name = "Production Schedule" 
    End With 

    PivotSheet.Activate 
    Range("A1").Select 

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     "Parts & Machines2!R1C1:R1328C14", Version:=6).CreatePivotTable _ 
     TableDestination:=ActiveCell, TableName:="PivotTable1", DefaultVersion:=6 

End Sub 

我想我的SourceData的范围是动态设置的。我的努力生成(使用debug.print):'Parts & Machines2'!R1C1:R1328C14 它似乎不同于宏记录:“Parts & Machines2!R1C1:R1328C14”。

这种差异是否会产生我无法找到源数据的错误?

数据的屏幕截图。 enter image description here工作表数据

回答

0

我不太确定您在哪里定义wsPartsMachines as Worksheet以及您在哪里设置它。

但是,错误是在该行:

Set pvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsPartsMachines.Name & "'!" & wsPartsMachines.Range("A1").CurrentRegion.Address, Version:=xlPivotTableVersion15) 

如果之后添加一行:

Debug.Print pvtCache.SourceData 

您将在即时窗口得到'Sheet3'''!R1C1:R6C3 - 你有一个'太多。 (我曾用 “表Sheet 3” 作为我SourceData) 尝试修改该行:

Set pvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsPartsMachines.Name & "!" & wsPartsMachines.Range("A1").CurrentRegion.Address) 

编辑1:尝试不同的方法,把数据源照片直接作为Range

Dim pvtDataRng As Range 

Set wsPartsMachines = Sheets("Parts & Machines2") 
' set the Pivot Table Data Source Range 
Set pvtDataRng = wsPartsMachines.Range("A1").CurrentRegion 

Set pvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=pvtDataRng) 

'Create Pivot table from Pivot Cache 
Set pvt = PivotSheet.PivotTables.Add(PivotCache:=pvtCache, TableDestination:=ActiveCell, TableName:="ProdSched") 
+0

'零件和Machines2' '' R1C1:!R1328C14 '零件和Machines2' R1C1:R1328C14 – Energizer1

+0

wsPartsMachines是工作表的名称,即而不是 “工作表Sheet” 我在VBA编辑器更名为wsPartsMachines。 Debug.Print pvtCache.SourceData在不进行任何原始代码编辑的情况下生成此代码: 'Parts&Machines2'''!R1C1:零件和Machines2:R1328C14 Debug.Print pvtCache.SourceData“ 从原来的代码中删除时‘‘‘生成这个’R1C1:R1328C14 运行此代码(’’”去掉),我收到此错误信息“Set pvt =”line insted: “运行时错误1004。数据透视表字段名称无效。要创建数据透视表,您必须使用组织为列表的数据...” – Energizer1

+0

@ Energizer1这意味着您的数据不是按照构建数据透视表的方式进行组织。你可以在上面的文章中添加你的数据的屏幕截图吗? –

0

此代码有效。仍然不确定为什么SourceData不起作用。 Shai Rado建议它的代码稍作修改。以下是代码。

Sub BusinessInteligenceCreatePivotTable() 

    Dim PivotSheet As Worksheet 
    Dim pvtCache As PivotCache 
    Dim pvtTable As PivotTable 
    Dim ws1PartMachines As Worksheet 
    Dim pvtDataRng As Range 

    'Determine the data range you want to pivot 
    Set ws1PartsMachines = Worksheets("Parts & Machines2") 
    ' set the Pivot Table Data Source Range 
    Set pvtDataRng = ws1PartsMachines.Range("A1").CurrentRegion 

    Set pvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=pvtDataRng) 
    Debug.Print pvtCache.SourceData 

    'Create a new worksheet 
    With ThisWorkbook 
     Set PivotSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
     PivotSheet.Name = "Production Schedule2" 
    End With 

    PivotSheet.Activate 
    Range("A1").Select 

    'Create Pivot table from Pivot Cache 
    Set pvtTable = PivotSheet.PivotTables.Add(PivotCache:=pvtCache, TableDestination:=ActiveCell, TableName:="ProdSched") 

End Sub 
+0

我应该在哪里放这个代码? –

相关问题