【问题标题】:Excel create Pivot Table by VBAExcel通过VBA创建数据透视表
【发布时间】:2015-10-22 08:20:50
【问题描述】:

我正在通过 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

如果我手动执行,这就是我得到的结果,这就是我最终想要的。

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

【问题讨论】:

  • 如果您向我们展示您的原始数据选项卡,我们将获得更多信息来帮助您 - 更容易看到您的 VBA 实际从哪里拉动。

标签: excel pivot-table vba


【解决方案1】:

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

例如

第一

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

然后

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

【讨论】:

    【解决方案2】:

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

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

    假设您在 A 列中有您的名字,调用 Module 并且 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
    

    你不需要最后一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2013-02-10
      • 2022-08-18
      相关资源
      最近更新 更多