使用VBA对数据透视表按Ventas(销售额)排序失败求助
解决VBA创建透视表后无法按销售额排序的问题
你的排序代码失效的核心原因是:你尝试对原始字段Ventas执行排序,但这个字段已经被设置为数据字段并重命名为Total Ventas。正确的做法应该是针对行字段(SKU),按照数据字段Total Ventas的值进行排序。
修正后的排序代码
替换你原来的无效排序代码:
' 排序代码(已修复) With ptTable .PivotFields("SKU").AutoSort xlDescending, "Total Ventas" End With
完整修正后的宏代码
Sub CrearTablaDinamicaaaa() Dim ws_Source As Worksheet Dim ws_Dest As Worksheet Dim ptCache As PivotCache Dim ptTable As PivotTable Dim rangoDatos As Range Dim lastRow As Long Dim ptTableName As String Set ws_Source = ThisWorkbook.Sheets("Base Ventas Asistidos") Set ws_Dest = ThisWorkbook.Sheets("Deporte") ptTableName = "TablaDinamicaVentas" ' 定义数据源范围 lastRow = ws_Source.Cells(ws_Source.Rows.Count, "A").End(xlUp).Row Set rangoDatos = ws_Source.Range("A1:L" & lastRow) ' 创建透视缓存 Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rangoDatos) ' 创建透视表 Set ptTable = ptCache.CreatePivotTable(TableDestination:=ws_Dest.Range("H40"), TableName:=ptTableName) ' 配置透视表字段 With ptTable ' 页字段:División .PivotFields("División").Orientation = xlPageField .PivotFields("División").Position = 1 ' 页字段:Semana .PivotFields("Semana").Orientation = xlPageField .PivotFields("Semana").Position = 2 ' 行字段:SKU .PivotFields("SKU").Orientation = xlRowField .PivotFields("SKU").Position = 1 ' 数据字段:Ventas(求和,重命名为Total Ventas) With .PivotFields("Ventas") .Orientation = xlDataField .Function = xlSum .Position = 1 .Name = "Total Ventas" End With End With ' 执行排序(修正后) With ptTable .PivotFields("SKU").AutoSort xlDescending, "Total Ventas" End With ' 刷新透视表(一次即可) ptTable.RefreshTable End Sub
关键说明
- 排序对象错误:原代码操作的是
Ventas字段,但该字段已经作为数据字段存在,排序应该作用于需要排序的行字段(SKU),指定用哪个数据字段的值来排序。 - 重复刷新冗余:原代码中两次调用
RefreshTable是不必要的,在配置完字段和排序后执行一次即可。
内容的提问来源于stack exchange,提问作者Francisco Augusto Varela Aguir
相关产品推荐
相关产品推荐

