【问题标题】:Run time error 1004 "Cannot open PivotTable source file"运行时错误 1004“无法打开数据透视表源文件”
【发布时间】:2018-06-19 14:27:17
【问题描述】:

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

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

是这个差异导致我找不到源数据的错误吗?

数据截图。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我不太确定您在哪里定义 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")
    

    【讨论】:

    • 'Parts & Machines2'''!R1C1:R1328C14 'Parts & Machines2'!R1C1:R1328C14
    • wsPartsMachines 是工作表名称,也就是说,我在 VBA 编辑器中将名称更改为 wsPartsMachines 而不是“Sheet3”。 Debug.Print pvtCache.SourceData 在没有对原始代码进行任何编辑的情况下生成此内容:'Parts & Machines2'''!R1C1:R1328C14 Debug.Print pvtCache.SourceData 在从原始代码中删除“'”时生成此内容:'Parts & Machines2'!R1C1 :R1328C14 运行此代码时(“'”已删除)我在“Set pvt =”行中收到此错误消息:“运行时错误 1004。数据透视字段名称无效。要创建数据透视表,您必须使用以下数据以列表的形式组织..."
    • @Energizer1 这意味着您的数据没有按照构建数据透视表所需的方式进行组织。您可以在上面的帖子中添加数据的屏幕截图吗?
    • 你看到我更新的问题了吗?我认为问题可能出在“SourceData”上。由于宏记录的 SourceData 中的地址与我自己动态设置的 SourceData 不同。我还将发布包含数据透视表数据的工作表屏幕截图。
    • 感谢您的帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 2013-06-30
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多