Excel通过VBA创建数据透视表

时间:2015-07-30 19:55:20

标签: excel excel-vba pivot-table vba

我正在通过VBA创建一个简单的Pivot表。我不知道我的代码有什么问题。我的代码运行没有错误,但结果是不同的。你能否告诉我我的代码中的问题在哪里?

Sub CreatePivotTable()

Dim sht As Worksheet
Dim pvtCache As PivotCache
Dim pvt As PivotTable
Dim StartPvt As String
Dim SrcData As String

'Determine the data range you want to pivot
  SrcData = ActiveSheet.Name & "!" & Range("A1:B53821").Address(ReferenceStyle:=xlR1C1)

'Create a new worksheet
  Set sht = Sheets.Add

'Where do you want Pivot Table to start?
  StartPvt = sht.Name & "!" & sht.Range("A1").Address(ReferenceStyle:=xlR1C1)

'Create Pivot Cache from Source Data
  Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)

'Create Pivot table from Pivot Cache
  Set pvt = pvtCache.CreatePivotTable(TableDestination:=StartPvt, TableName:="PivotTable1")


pvt.PivotFields("Module").Orientation = xlRowField
pvt.PivotFields("KW").Orientation = xlColumnField

pvt.AddDataField pvt.PivotFields("Module"), "Anzahl von Module", xlCount

pvt.PivotFields("Module").PivotFilters.Add Type:=xlTopCount, DataField:=pvt.PivotFields("Anzahl von Module"), Value1:=12

End Sub

如果我手动完成,这就是我得到的结果,这就是我想要的结果。

enter image description here

我的代码给了我这个结果。这是错的。

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为您的问题是在您的小范围内,只有两列(A,B)和最后一行代码

'Determine the data range you want to pivot
  SrcData = ActiveSheet.Name & "!" & Range("A1:B53821").Address(ReferenceStyle:=xlR1C1)

假设您在A栏中有您的名字,请致电模块,B栏是KW,并带有一个数字(模块的KW / h)

'Create Pivot table from Pivot Cache
Set pvt = pvtCache.CreatePivotTable(TableDestination:=StartPvt, TableName:="PivotTableTest")

pvt.AddDataField pvt.PivotFields("Module"), "Num Module", xlCount
pvt.PivotFields("Module").Orientation = xlColumnField ' not xlRowField
pvt.PivotFields("KW").Orientation = xlRowField ' not xlColumnField

你不需要最后一行。

答案 1 :(得分:0)

尝试在添加计算字段后添加xlRowField和xlColumnField

e.g。

第一

pvt.AddDataField pvt.PivotFields("Module"), "Anzahl von Module", xlCount

然后

pvt.PivotFields("Module").Orientation = xlRowField
pvt.PivotFields("KW").Orientation = xlColumnField