【问题标题】:VBA Pivot Table; Error '1004' Refrence is not validVBA 数据透视表;错误“1004”参考无效
【发布时间】:2018-06-20 12:14:59
【问题描述】:

我正在创建一个工作表,它从另一个工作簿中获取数据并根据数据创建一个数据透视表。我遇到的错误是当我尝试创建数据透视表时出现错误“1004”破坏了代码,这是行中断的代码。如果我尝试修复该错误,则会遇到类型不匹配错误

Set rcPT = ActiveSheet.PivotTables.Add(PivotCache:=rcPTCache, TableDestination:=Range("A1"))

我相当肯定它与数据范围有关,因为当我使用不同的范围时它可以工作,但我不确定,这可能是一个简单的修复,我只需要另一个视角。这是完整的代码。

 Dim wbReviewPivots As Workbook
Set wbReviewPivots = ActiveWorkbook



Dim wsPivots As Worksheet
Dim wbData As Workbook
Dim wsData As Worksheet
Dim endCell As Integer
Dim rcPT As PivotTable
Dim rcPTCache As PivotCache
Dim rcPlace As Range



' set variable equal to data sheet and pivot sheet
Set wbData = Workbooks.Open("//Workbook\\")
Set wsPivots = wbReviewPivots.Sheets("RootCausesCleaned")
Set wsData = Sheets("RawData") 'gets the last row within the rawdata sheet
endCell = wsData.Cells(Rows.Count, "A").End(xlUp).Row
'set the data range

wsData.Activate
Dim MyRange1 As Range, MyRange2 As Range, dataRange As Range
Set MyRange1 = Range("A1:E" & endCell)
Set MyRange2 = Range("G1:AA" & endCell)
Set dataRange = Application.Union(MyRange1, MyRange2)



'create root cause pivot chart
wbReviewPivots.Sheets("RootCausesCleaned").Activate
Set rcPTCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=dataRange)
Set rcPT = ActiveSheet.PivotTables.Add(PivotCache:=rcPTCache, TableDestination:=Range("A1"))

    With rcPT
        .PivotFields("Cause").Orientation = xlRowField
        .PivotFields("Cause (Sub Category)").Orientation = xlRowField
        .PivotFields("Task ID").Orientation = xlDataField
    End With

dataRange 不包括 G 列,因为如果它包含另一个错误,则它不是必需的列,因此是否排除列无关紧要,但我确实认为它使创建数据透视表变得困难。

也可以使用excel表格对象,但这仍然会遇到同样的错误。

【问题讨论】:

    标签: vba excel pivot-table


    【解决方案1】:
    1. 您无法像尝试通过排除 G 列那样从非连续范围创建数据透视表。
    2. 您的类型不匹配错误是由于尝试使用Range 对象为SourceData 声明PivotCacheThis questionthis question 向您展示如何使用 String 参考。
    3. endCell 应该是 Long,而不是 Integer。 (只是一个想法,可能使用 endRow 或其他名称,endCell 听起来像 Range 变量,可能会产生误导。)
    4. 由于dataRange 位于不同的工作簿中,您可以将其AddressExternal:=True 一起使用以获取其完整的String 引用,包括工作簿名称。我会使用 xlR1C1 参考样式,因为听起来 A1 样式会导致较大数据集的错误。

    因此,要修复您的错误,请进行这些调整...

    Dim dataAddress as String
    Set dataRange = wsData.Range("A1:AA" & endCell) ' or maybe endRow
    dataAddress = dataRange.Address(ReferenceStyle:=xlR1C1, External:=True)
    

    那么在Set rcPTCache = ...SourceData:=dataAddress内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      相关资源
      最近更新 更多