2014-12-05 20 views
0

我想从不同的工作表中做一个PIVOT表,并将每个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

以及插入复制数据透视结果的列名称我定义为变量单元格(3,z).Address.Select,但此字符串返回错误。

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

回答

0

把所有工作表中的数组,做一个周期的阵列中的每个元素与For Each....Next

关于你的第二个问题,更改:
SourceData:="24.11.!R1C2:R11754C10"

SourceData:=ws1.name&"!R1C2:R11754C10" ,它可以供养工作表名称插入字符串

第三个问题: 替换
Range(Cells(3, z).Address).Select

Cells(3, z).Select

+0

谢谢,它有帮助。唯一不能管理顺序循环的东西?如果我说:'对于每周DayWeek2在第二周做... z = z + 2下一个DayWeek2循环直到z = 29'它给出一个错误 – Ale 2014-12-10 11:18:58

+1

你的'next'和'循环直到'是错误的方式,循环必须是在彼此之内,也就是说'Do'在'for'循环中,直到''next'之前'也必须在里面 – Raugmor 2014-12-10 15:43:07

0

如果你使用模板的Excel文件,其中的格式不会改变。我建议为所有数据源创建一个动态命名范围。然后,转到每个数据透视表并在Change Source Pivot Table Options中引用命名范围。 您所有的VBA必须做的是ThisWorkbook.RefreshAll的变体。

使用此公式的变体创建动态命名范围:= Data!$ A $ 5:OFFSET(Data!$ A $ 5,COUNTA(Data!$ A:$ A)-1,52)。基本上选择数据源表格,起始单元格以及数据上有多少列。行将自动调整。