VBA设置数据透视表千分位格式时遇运行时错误'438'求助
解决数据透视表VBA代码的Run-time Error '438'问题
错误原因
报错行.Function = xlSum触发438错误,是因为Function属性属于数据透视字段(PivotField),而非PivotTable对象本身。原代码直接在PivotTable的With块中调用该属性,对象类型不匹配,导致报错。
修正方案
以下两种写法均可解决问题,并实现为数据透视表设置千分位格式的需求:
方案一:单独声明数据字段变量
Dim pt As PivotTable Dim dataField As PivotField Worksheets("Report").Activate Set pt = ActiveSheet.PivotTableWizard(SourceType:=xlDatabase, SourceData:=ThisWorkbook.Worksheets("Data").Range("A1:CG890000")) ' 配置透视表行、列字段 With pt .PivotFields("Outstanding Days").Orientation = xlColumnField .PivotFields("Broker").Orientation = xlRowField .PivotFields("Local Currency").Orientation = xlRowField ' 配置数据字段(求和+千分位格式) Set dataField = .PivotFields("USD Value") dataField.Orientation = xlDataField dataField.Function = xlSum dataField.NumberFormat = "#,###" dataField.Name = "USD Value" End With
方案二:使用AddDataField方法(更简洁)
Dim pt As PivotTable Worksheets("Report").Activate Set pt = ActiveSheet.PivotTableWizard(SourceType:=xlDatabase, SourceData:=ThisWorkbook.Worksheets("Data").Range("A1:CG890000")) ' 配置透视表结构并设置数据字段格式 With pt .PivotFields("Outstanding Days").Orientation = xlColumnField .PivotFields("Broker").Orientation = xlRowField .PivotFields("Local Currency").Orientation = xlRowField ' 直接添加求和字段并设置千分位格式 With .AddDataField(.PivotFields("USD Value"), "USD Value", xlSum) .NumberFormat = "#,###" End With End With
关键修正点
- 确保
Function、NumberFormat等属性作用于**数据透视字段(PivotField)**对象,而非PivotTable对象 - 方案二通过
AddDataField方法直接创建指定汇总方式的数据字段,无需单独声明变量,代码更紧凑
内容的提问来源于stack exchange,提问作者Cici W
相关产品推荐
相关产品推荐

