VBA数据透视表;错误“ 1004”刷新无效

时间:2018-06-20 00:49:45

标签: excel vba excel-vba pivot-table

我正在创建一个工作表,该工作表从另一个工作簿中获取数据并基于该数据创建数据透视表。我遇到的错误是当我尝试创建数据透视表错误'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表对象,但这仍然会遇到相同的错误。

1 个答案:

答案 0 :(得分:0)

  1. 您不能像排除掉G列那样尝试从非连续范围创建数据透视表。
  2. 您的类型不匹配错误是由于尝试使用PivotCache的{​​{1}}对象声明Range而引起的。 This questionthis question向您展示如何使用SourceData引用。
  3. String应该是endCell,而不是Long。 (只是想一想,也许使用Integer或其他名称,endRow听起来像一个endCell变量,可能会产生误导。)
  4. 由于Range在不同的工作簿中,因此您可以将其dataRangeAddress一起使用,以获取其完整的External:=True引用,包括工作簿名称。我会使用String引用样式,因为它听起来像A1样式会导致较大的数据集出错。

因此,要解决您的错误,请进行以下调整...

xlR1C1

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