从多个动态合并范围创建Excel VBA自动透视表

时间:2016-07-28 18:10:10

标签: excel vba excel-vba pivot-table

我试图自动化从动态数据表创建数据透视表的过程,这些数据表始终以表格上方的日期开头。 CountExpos计算数据范围中的日期数,以便代码知道需要将多少数据表输入到具有多个合并范围的数据透视表中。然后,代码根据第一个日期的开始位置生成一串数据范围,并根据有多少个世博会计数将相应的数据范围添加到字符串中。然后构建一个字符串(statString),可以直接放入从SourceData开始的pivot表的创建,以版本结尾,然后代码应该输出数据透视表,而是返回运行时错误' 1004& #39;:应用程序定义或对象定义的错误。

即使我将statString的输出直接复制并粘贴到数据透视表代码中,也会创建数据透视表,但是当我输入statString时,代码无法运行。我很感激任何帮助,谢谢!

Sub CountExpos()

Dim lastRow As Long

Set sht = ThisWorkbook.Worksheets("Orc Text")

For i = 1 To 1000
    If IsEmpty(sht.Cells(i, 1)) = False Then
    lastRow = i
    End If
Next i

Dim expoCount
expoCount = 0

For J = 1 To lastRow
If IsDate(sht.Cells(J, 1)) = True Then
    expoCount = expoCount + 1
    End If
Next J


MsgBox (expoCount)

Dim count
count = 0


ReDim expos(0 To expoCount) As String
ReDim rgs(0 To expoCount) As String

For Y = 1 To lastRow
If IsDate(sht.Cells(Y, 1)) = True Then
    expos(count) = sht.Cells(Y, 1)
    rgs(count) = "Array(" & Chr(34) & "'Orc Text'!R" & (Y + 3) & "C1:" & "R" & (Y + 12) & "C10"
    count = count + 1
End If
Next Y

Dim statString As String
statString = " Array("

For X = 0 To expoCount - 1
 If X = expoCount - 1 Then
    statString = statString & rgs(X) & Chr(34) & ", " & Chr(34) & expos(X) & Chr(34) & ")"
 Else
    statString = statString & rgs(X) & Chr(34) & ", " & Chr(34) & expos(X) & Chr(34) & "), "
    End If

Next X

statString = statString & ")"
On Error GoTo 0

MsgBox (statString)






ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
    statString, Version:=xlPivotTableVersion15).CreatePivotTable _
    TableDestination:="", TableName:= _
    "PivotTable1", DefaultVersion:=xlPivotTableVersion15
ActiveSheet.PivotTables("PivotTable1").DataPivotField.PivotItems( _
    "Sum of Value").Position = 1

End Sub

现在,以下代码适用于从多个表构建数据透视表,但每次数据范围更改时都需要调整它。我无法理解为什么statString在代码中输入相同的东西时不起作用。

Sub GrandPivot()

 ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
    Array(Array("'Orc Text'!R7C1:R16C10", "Item1"), Array("'Orc Text'!R22C1:R31C10", _
    "Item2"), Array("'Orc Text'!R37C1:R46C10", "Item3"), Array( _
    "'Orc Text'!R52C1:R61C10", "Item4"), Array("'Orc Text'!R67C1:R76C10", "Item5"), _
    Array("'Orc Text'!R82C1:R91C10", "Item6"), Array("'Orc Text'!R97C1:R106C10", _
    "Item7"), Array("'Orc Text'!R112C1:R121C10", "Item8"), Array( _
    "'Orc Text'!R127C1:R136C10", "Item9"), Array("'Orc Text'!R142C1:R151C10", "Item10" _
    ), Array("'Orc Text'!R157C1:R166C10", "Item11"), Array("'Orc Text'!R172C1:R181C10" _
    , "Item12"), Array("'Orc Text'!R187C1:R196C10", "Item13"), Array( _
    "'Orc Text'!R202C1:R211C10", "Item14")), Version:=xlPivotTableVersion15).CreatePivotTable _
    TableDestination:="", TableName:= _
    "PivotTable2", DefaultVersion:=xlPivotTableVersion15
ActiveSheet.PivotTables("PivotTable2").DataPivotField.PivotItems( _
    "Sum of Value").Position = 1

End Sub

0 个答案:

没有答案