Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA透视表;错误';1004';引用无效_Vba_Excel_Pivot Table - Fatal编程技术网

VBA透视表;错误';1004';引用无效

VBA透视表;错误';1004';引用无效,vba,excel,pivot-table,Vba,Excel,Pivot Table,我正在创建一个工作表,该工作表从另一个工作簿中获取数据,并根据数据创建透视表。我遇到的错误是当我尝试创建透视表时,错误“1004”中断了代码,下面是中断的代码行。如果我试图修复该错误,它将转而遇到类型不匹配错误 Set rcPT = ActiveSheet.PivotTables.Add(PivotCache:=rcPTCache, TableDestination:=Range("A1")) 我相当肯定它与数据范围有关,因为它在我使用不同的范围时工作,但我不确定,它可能很容易修复,我只需要另

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

  • 不能像排除列G那样从非连续范围创建透视表
  • 您的类型不匹配错误是因为尝试使用
    范围
    对象为
    源数据
    声明
    数据透视缓存
    ,或者,演示如何使用
    字符串
    引用
  • endCell
    应该是
    Long
    ,而不是
    整数
    。(只是一个想法,可能使用
    endRow
    或其他名称,
    endCell
    听起来像一个
    Range
    变量,可能会产生误导。)
  • 由于
    dataRange
    位于不同的工作簿中,因此您可以将其
    地址
    External:=True
    一起使用,以获取其完整的
    字符串
    引用,包括工作簿名称。我会使用
    xlR1C1
    reference样式,因为听上去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

    中,感谢我实施了您的调整,代码正确地创建了一个透视表。看看其他问题,我可以看到,当数据到达大型excel时,不喜欢超出范围。谢谢你的帮助!