Excel使用VBA创build数据透视表

我正在创build一个简单的数据透视表由VBA。 我不知道我的代码有什么问题。 我的代码运行没有错误,但结果是不同的。 你能告诉我在我的代码中的问题是什么。

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 

如果我手动做,这是我得到的结果,这是我最后想要的。

在这里输入图像说明

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

在这里输入图像说明

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

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

假设你在列A中有你的名字,称为模块,列B是以数字(你的模块的千瓦时数)

 '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 

你不需要最后一行。

添加计算的字段后,请尝试添加xlRowField和xlColumnField。

例如

第一

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

然后

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