繁体   English   中英

运行时错误1004“无法打开数据透视表源文件”

[英]Run time error 1004 “Cannot open PivotTable source file”

我想基于同一工作簿中的数据集(包含在工作表中)创建数据透视表。

当我运行宏时,工作簿是打开的。 数据集来自在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”不同。

正是这种差异产生了我找不到源数据的错误?

数据的屏幕截图。

工作表数据

我不确定在哪里将wsPartsMachines as Worksheet定义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您有一个'太多。 (我已将“ Sheet3”用作我的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")

此代码有效。 仍然不确定为什么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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM