如何动态定义PIVOT表源?

时间:2014-12-05 15:08:06

标签: excel vba excel-vba

我试图从不同的工作表中创建一个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 ,但此字符串返回错误。

也许有人可以帮忙吗?谢谢!

2 个答案:

答案 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)。基本上选择数据源表,起始单元格以及数据上的列数。行将自动调整。