使用VBA设置数据透视表行字段 如何优化重复With语句代码
VBA 透视表字段配置代码优化方案
你可以通过两层优化消除重复代码,同时大幅降低后续新增字段的修改成本,优化后代码运行效果和原代码完全一致。
嵌套With块写法(适合字段量少的场景)
把公共的透视表对象抽到最外层With块,内层只处理单个字段的配置,不用重复书写透视表的完整引用路径:
With ActiveSheet.PivotTables("PivotTable1") ' 配置字段A With .CubeFields("[Field A]") .Orientation = xlRowField .Position = 1 .LayoutForm = xlTabular End With ' 配置字段B With .CubeFields("[Field B]") .Orientation = xlRowField .Position = 2 .LayoutForm = xlTabular End With ' 后续新增行字段直接在此处追加内层With块即可 End With
数组循环批量配置写法(推荐,可维护性最高)
所有添加到行区域的字段,Orientation和LayoutForm属性完全一致,只有字段名、排序位置两个差异化配置。你可以把字段配置统一存在数组中,通过循环批量设置属性,后续新增字段只需要在数组中追加一行配置即可,不需要重复复制粘贴With块:
Dim pt As PivotTable Dim fieldConfigs As Variant Dim i As Long ' 绑定透视表对象,后续如果需要修改透视表所在工作表、透视表名称,仅需修改这一处 Set pt = ActiveSheet.PivotTables("PivotTable1") ' 字段配置规则:每一行对应一个行字段,依次填写【字段的Cube名称、在行区域的排序位置】 ' 后续新增字段直接在数组中追加对应配置即可 fieldConfigs = Array( _ Array("[Field A]", 1), _ Array("[Field B]", 2) _ ) ' 循环统一设置所有字段属性 For i = LBound(fieldConfigs) To UBound(fieldConfigs) With pt.CubeFields(fieldConfigs(i)(0)) .Orientation = xlRowField .Position = fieldConfigs(i)(1) .LayoutForm = xlTabular End With Next i
该写法可以有效避免复制重复代码时出现的漏改属性、写错引用路径的问题,当需要配置的行字段数量较多时,代码精简效果会更明显。
内容的提问来源于stack exchange,提问作者AlBundy
相关产品推荐
相关产品推荐

