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

时间:2015-07-07 21:12:23

标签: excel vba excel-vba

我有一个数据透视表,每次设置新过滤器或折叠/展开字段时都会重新格式化。我已经构建了一个宏,它以我想要的方式重新格式化列,但我必须将它链接到一个按钮,必须在数据透视表更改后单击该按钮。我希望如果宏在pivottable中的任何更改上运行自己,但我尝试自动执行此操作要么生成错误,要么无法执行任何操作。我尝试过使用" Worksheet_Change(ByVal Target As Sheet)"以及" Worksheet_PivotTableUpdate(ByVal Target As PivotTable)"但都不起作用。我是否必须将特定的数据透视表编号或工作表编号分配给它们以使其工作?我输入的当前代码如下:

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果你所做的只是保持列宽固定,你可以右键单击数据透视表并选择数据透视表选项...在底部,有一个更新时自动调整列宽的复选框。如果你取消选中它,你应该能够将宽度设置为17.56并保持这种状态。