我试图自动化从动态数据表创建数据透视表的过程,这些数据表始终以表格上方的日期开头。 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