如何创建数据透视表并使用VBA命名?

时间:2016-08-04 20:31:27

标签: excel vba excel-vba

我正在玩这一小段代码。

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Personnel&Facilities Detail!R3C1:R105279C21", Version:=xlPivotTableVersion14 _
    ).CreatePivotTable TableDestination:="Corporate Communications!R1C1", _
    TableName:="PivotTable9", DefaultVersion:=xlPivotTableVersion14

我正在尝试遍历一系列单元格,并根据我拥有的一些数据集创建一组枢轴。我的循环工作正常,我录制了一个应该做我想要的宏。我无法弄清楚的是数据透视表的命名约定。每次打开宏记录器并单击事件序列时,它似乎增加1。我很确定问题在这里:

表名:= “PivotTable9”

我试图清除数据透视表的缓存以重置表名,但这不起作用。

知道这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您正在寻找的过程是分别建立PivotTable的每个部分。它可以更容易地跟踪问题和错误。下面的代码示例演示了如何设置公共PivotCache,然后从该单个公共缓存中创建一些PivotTables

此示例中缺少许多内容,例如检查具有相同名称的工作表,可以创建的枢轴数的上限和下限,以及向每个表添加字段。

Option Explicit

Sub test()
    Dim dataArea As Range
    'Set dataArea = ThisWorkbook.Sheets("Personnel&Facilities Detail").Range("A3:U105279")
    Set dataArea = ThisWorkbook.Sheets("RawData").Range("A1:L250")
    CreateAllPivots dataArea, 5
End Sub

Sub CreateAllPivots(ByRef dataArea As Range, ByVal numPivots As Integer)
    '--- given an input range and the number of Pivot Tables to create,
    '    this sub creates a single, common Pivot Cache and then new
    '    Pivot Tables (each on its own worksheet)

    '--- perform any parameter checks, such as numPivots > 0

    '--- create the common pivot cache for all tables
    Dim ptWB As Workbook
    Dim ptCache As PivotCache
    Set ptWB = ThisWorkbook
    Set ptCache = ptWB.PivotCaches.Create(SourceType:=xlDatabase, _
                                          SourceData:=dataArea, _
                                          Version:=xlPivotTableVersion14)

    '--- define the base name of the PT worksheets
    Dim ptName As String
    Dim ptSheetName As String
    ptName = "CorpCommPT"
    ptSheetName = "Corp Communications - "

    '--- set up all the pivot tables
    Dim i As Integer
    Dim ptSheet As Worksheet
    Dim newPTName As String
    Dim thisPivot As PivotTable
    For i = 1 To numPivots
        Set ptSheet = ptWB.Sheets.Add
        ptSheet.Name = ptSheetName & i
        newPTName = ptName & i
        Set thisPivot = ptCache.CreatePivotTable(TableDestination:=ptSheet.Range("A1"), _
                                                 TableName:=newPTName, _
                                                 DefaultVersion:=xlPivotTableVersion14)
        '--- potentially set up the pivot fields for the new table here
    Next i

End Sub