我试图从不同的工作表中创建一个PIVOT表,并将某个列中的每个PIVOT输出插入到表中。
Sub PivotvpcodeSATURATION()
Dim wsNew As Worksheet
Dim i As Integer
Dim z As Integer
Set ws1 = ActiveWorkbook.Sheets("24.11.")
Set ws2 = ActiveWorkbook.Sheets("25.11.")
Set ws3 = ActiveWorkbook.Sheets("26.11.")
Set ws4 = ActiveWorkbook.Sheets("27.11.")
Set ws5 = ActiveWorkbook.Sheets("28.11.")
Set ws6 = ActiveWorkbook.Sheets("29.11.")
Set ws7 = ActiveWorkbook.Sheets("30.11.")
Set wsNew = Sheets.Add
i = 3
z = 16
Do
ws1.Select
Range("A2").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"24.11.!R1C2:R11754C10", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:=wsNew.Name & "!R3C1", TableName:="PivotTable", DefaultVersion _
:=xlPivotTableVersion14
wsNew.Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable").PivotFields("VP CODE")
.Orientation = xlRowField
.Position = 1
End With
wsNew.Select
ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
"PivotTable").PivotFields("1/0"), "Sum of 1/0", xlSum
wsNew.Select
Range("B4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("VP_Saturation").Select
' Range(Cells(3, z).Address).Select
ActiveSheet.Paste
Application.DisplayAlerts = False
wsNew.Delete
Application.DisplayAlerts = True
z = z + 2
Loop Until z = 28
End Sub
我无法达到的是,
如何将工作表名称定义为变量,这样我就不必每次都选择 w1,w2,w ..,wn ,并且不具备将工作表名称放在 24.11。!R1C2:R11754C10 。
同样,列名称插入复制的Pivot结果我定义为变量 Cells(3,z).Address.Select ,但此字符串返回错误。
也许有人可以帮忙吗?谢谢!
答案 0 :(得分:0)
将所有工作表放在一个数组中,并使用For Each....Next
关于你的第二个问题,改变:
SourceData:="24.11.!R1C2:R11754C10"
到
SourceData:=ws1.name&"!R1C2:R11754C10"
它会将工作表名称输入字符串
Range(Cells(3, z).Address).Select
Cells(3, z).Select
答案 1 :(得分:0)
如果您使用格式不会更改的模板Excel文件。我建议为所有数据源创建动态命名范围。然后,只需转到每个数据透视表,并参考“更改源数据透视表选项”中的命名范围。 你所有的VBA都要做的是ThisWorkbook.RefreshAll。
的变体使用此公式的变体来创建动态命名范围:= Data!$ A $ 5:OFFSET(Data!$ A $ 5,COUNTA(Data!$ A:$ A)-1,52)。基本上选择数据源表,起始单元格以及数据上的列数。行将自动调整。