前言
本节会介绍通过VBA的PivotCaches.Create方法实现Excel创建新的数据透视表、修改原有的数据透视表的数据源以及刷新数据透视表内容。
本节测试内容以下表信息为例
1、创建数据透视表
语法:PivotCaches.Create(SourceType, [SourceData], [Version])
说明:
SourceType:必填参数,可以是以下 XlPivotTableSourceType 常量之一: xlConsolidation、 xlDatabase 或 xlExternal
SourceData:非必填,新数据透视表缓存的数据。
Version:版本,非必填,可以是常量xlPivotTableVersion2000,对应Excel 2000,也可以是xlPivotTableVersion10、xlPivotTableVersion11、xlPivotTableVersion12、xlPivotTableVersion14、xlPivotTableVersion15分别表示Excel 2002、2003、2007、2010、2013
示例:
根据上表内容,在原sheet2上创建一个数据透视表,起始位置为J1,透视表设置行为名称、产品编号,列设置为生产年月,值为销售数量求和,完整的代码如下:
Sub CreatePivot()' 声明工作簿、工作表变量Dim wb As WorkbookDim ws As Worksheet' 声明数据源、透视表目标起始位置、数据透视表变量Dim dataSource As RangeDim datePivot As RangeDim newPivot As PivotTable'设置工作簿为当前文件Set wb = ThisWorkbookSet ws = ThisWorkbook.Worksheets("Sheet2")' 通过A列获取最大行数Dim lastRow As LonglastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row' 定义数据源范围Set dataSource = ws.Range("A1:F" & lastRow)' 定义透视表目的起始位置' 创建一个新的数据透视表Set newPivot = wb.PivotCaches.Create(xlDatabase, dataSource).CreatePivotTable(ws.Range("J1"), "PivotTable123")' 定义透视表的行列值With newPivot.PivotFields("名称").Orientation = xlRowField.PivotFields("商品编号").Orientation = xlRowField.PivotFields("生产年月").Orientation = xlColumnFieldWith .PivotFields("销售数量").Orientation = xlDataField.Function = xlSumEnd WithEnd WithEnd Sub
代码说明:
注意 PivotCaches.Create 是用在workbook后面的方法属性
CreatePivotTable 用来指定创建的透视表的位置以及透视表的名称,若想要在一张新的工作表创建,如想在sheet3中创建,则可以将上述代码中的ws.Range(“J1”)改为ThisWorkbook.Worksheets(“Sheet3”).Range(“A1”),前提是该工作簿中存在Sheet3工作表
2. 修改数据透视表的数据源
如上例类似,修改已有的数据透视表的数据源,修改为A1:F20,完整的代码如下:
Sub UpdatePivotSourceData()' 声明工作簿、工作表变量Dim wb As WorkbookDim ws As Worksheet' 声明数据源、透视表目标起始位置、数据透视表变量Dim dataSource As RangeDim datePivot As RangeDim pt As PivotTable'设置工作簿为当前文件Set wb = ThisWorkbookSet ws = ThisWorkbook.Worksheets("Sheet2")' 设置要修改的数据透视表名称Set pt = ws.PivotTables("PivotTable123")' 修改数据透视表的数据范围pt.sourceData = ws.Range("A1:F20").Address(True, True, xlR1C1, True)' 刷新数据透视表pt.RefreshTableEnd Sub
3. 刷新数据透视表
pt.RefreshTable
pt表示对应的数据透视表,如以下代码:
Sub RefreshPivotDim pt As PivotTableDim ws As WorksheetSet ws = ThisWorkbook.Worksheets("Sheet2")' 设置要修改的数据透视表名称Set pt = ws.PivotTables("PivotTable123")' 刷新数据透视表pt.RefreshTableEnd Sub
对应的数据透视表名称