VBA生成含Mandat、Montant RI字段的Pivot Table运行报错求助
VBA创建数据透视表报错问题排查与修复
现有代码错误点
- 创建透视表时
TableDestination参数错误:要求传入单元格范围对象,原代码传入了工作表对象,应使用提前定义好的目标起始单元格rangeTarget - 字段方向设置错误:
- Mandat作为行标签,对应方向应为
xlRowField,原代码错误使用了列字段参数xlColumnField - montant RI作为值字段,对应方向应为
xlDataField,原代码错误使用了列字段参数xlColumnField
- Mandat作为行标签,对应方向应为
- 代码健壮性不足:已经通过
Set tcd1拿到了透视表对象,不需要再通过ActiveSheet.PivotTables("TCD 1")的方式调用,避免工作表未激活导致的调用错误
额外注意事项
- 字段名需要和源数据表的表头完全一致,注意大小写、空格是否匹配,比如源表头如果是小写开头的
montant RI,代码里写Montant RI也会报错 - 重复运行代码前请先删除目标工作表中已存在的
TCD 1透视表,避免同名创建报错
修正后完整代码
Sub TCD_MANDAT() ' ' ' Etiquette de ligne : Mandat -> 1ere colonne ' En valeur : montants RI -> 2ème colonne ' 'Source and Target Dim TableSource As Worksheet Set TableSource = Application.Workbooks("OP TEFAL AUTOMATIQUE.xlsm").Worksheets(2) Dim TableTarget As Worksheet Set TableTarget = Application.Workbooks("OP TEFAL AUTOMATIQUE.xlsm").Worksheets(4) Dim rangeSource As Range Set rangeSource = TableSource.Range("A1").CurrentRegion Dim rangeTarget As Range Set rangeTarget = TableTarget.Range("A1") 'Decla variable Dim tcd1 As PivotTable, tcdCache As PivotCache Set tcdCache = ActiveWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=rangeSource) 'Creation pivot table from cache Set tcd1 = tcdCache.CreatePivotTable( _ TableDestination:=rangeTarget, _ TableName:="TCD 1") 'Création des étiquettes et valeurs With tcd1.PivotFields("Mandat") .Orientation = xlRowField .Position = 1 End With With tcd1.PivotFields("Montant RI") ' 注意此处字段名需和源数据表头完全一致 .Orientation = xlDataField .Position = 1 End With End Sub
内容的提问来源于stack exchange,提问作者Larow
相关产品推荐
相关产品推荐

