每次更改时使用macros来重新格式化数据透视表

我有一个数据透视表,每次设置一个新的filter时都会重新格式化,或者一个字段被折叠/展开。 我已经build立了一个macros,以我想要的方式重新格式化列,但是我必须将它链接到一个button,在透视表更改后必须单击该button。 我宁愿如果macros在pivottable中的任何更改运行本身,但我的尝试自动化这个或者产生了一个错误或没有任何行动。 我曾尝试使用“ Worksheet_Change(ByVal Target As Sheet) ”以及“ Worksheet_PivotTableUpdate(ByVal Target As PivotTable) ”),但都不起作用。 我是否必须分配一个特定的数据透视表编号或图表编号到那些让他们工作? 我现在input的代码如下:

 Sub FormatPivot() ' ' FormatPivot Macro ' Columns("D:H").Select Selection.ColumnWidth = 17.56 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 Cells.Select With Selection.Font .ColorIndex = xlAutomatic .TintAndShade = 0 End With Range("B3").Select End Sub Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) Call FormatPivot End Sub 

使用数据透视表上单元格的引用,而不是活动表单。

 Sub FormatPivot() ' ' FormatPivot Macro ' ' Dim Pivot as Worksheet Dim MyRange as Range Set Pivot = ThisWorkbook.Worksheets("thenameofthesheetwithpivot") Set MyRange = Pivot.Columns("D:H") MyRange.ColumnWidth = 17.56 With MyRange.Font .ColorIndex = xlAutomatic .TintAndShade = 0 End With End Sub Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) Call FormatPivot End Sub 

如果您所做的只是保持列宽是固定的,则可以右键单击数据透视表并select数据透视表选项…,在底部,在更新时会出现一个自动调整列宽的checkbox。 如果取消选中,你应该可以将宽度设置为17.56,并保持这种状态。