Excel VBA 旋转 Table 填充 Header

Excel VBA Pivot Table Fill Header

在 excel vba 中,我正在创建一个枢轴 table 并希望用 header(前两行)和底线(1 行)填充蓝色白色字体。

下面的代码填充了第一个数据集行的内部而不是header。

With ActiveSheet.PivotTables(1).TableRange1
 .Cells.Borders.LineStyle = xlContinuous
 .Range("A3:I4").Interior.ColorIndex = 49
 .Range("A13:I13").Interior.ColorIndex = 49
End With

有没有办法动态引用 header 和枢轴 table 的最后一行?最好参考 "pivot table header" 而不是特定范围,以防报告值发生变化。

有一种动态方法可以解决 header 行和最后一行:

Dim pvtFirstRow, pvtLastRow     As Integer

pvtFirstRow = ActiveSheet.PivotTables(1).TableRange1.row + x ' modify x to the first row where your Pivot data starts
pvtLastRow = ActiveSheet.PivotTables(1).TableRange1.Cells(ActiveSheet.PivotTables(1).TableRange1.Cells.count).row

你可以简单地使用这个:

With ActiveSheet.PivotTables("PivotTable1")
  Debug.Print "full headers at: " & Intersect(.Parent.Range(.TableRange1.Row & ":" & .DataBodyRange.Row - 1), .TableRange1).Address
  Debug.Print "last row-range at: " & .TableRange1.Rows(1).Offset(.TableRange1.Rows.Count - 1).Address
End With

但是看看你的潜艇,最简单的方法是改变:

.Range("A3:I4").Interior.ColorIndex = 49
.Range("A13:I13").Interior.ColorIndex = 49

至:

Union(.Rows("1:2"), .Rows(.Rows.Count)).Interior.ColorIndex = 49

到目前为止线程中显示的代码确实有效,但将来必须重新运行:任何时候枢轴中的行数或列数发生变化,您都可以坐在彩色行或没有主元的列,或主元错误部分的彩色单元格。

我建议您查看 Excel 的内置数据透视样式,选择最接近您需要的样式,然后使用这样的代码修改 header 行和总计行。无需操作单元格区域,因为下次您可能想要关闭总行(为了论证),但该区域仍将是彩色的。

我录制了一个宏并删除了所有多余的代码行,以帮助您查看有什么变化。我还删除了一个有用的行 (.TintAndShade = ) 并将其替换为 "ColorIndex = " 语句,以强制使用您似乎更喜欢的蓝色阴影。

在 运行 完成此操作后,您应该可以为同一工作簿中的所有其他(现有的和新的)枢轴提供相同的样式。您甚至可以将其设置为默认值。当您的数据透视表 [刷新] 涵盖不同范围的单元格时,无需 运行 再次编码以格式化。

您可以从您自己的调色板中选择另一种样式,并使用您自己的自定义名称来复制,只要您在下面的示例代码中找到并替换所有相关字符串或记录您自己的操作即可:

Sub ColourPivotStyleForThisBook()

    'duplicate blue/medium pivot style from template
    ActiveWorkbook.TableStyles("PivotStyleMedium2").Duplicate ("PivotStyleMedium2v2" _
        )
    With ActiveWorkbook.TableStyles("PivotStyleMedium2v2")
        .ShowAsAvailablePivotTableStyle = True
        .ShowAsAvailableTableStyle = False
        .ShowAsAvailableSlicerStyle = False
        .ShowAsAvailableTimelineStyle = False
    End With

    'now modify header's style (fill) (font colour is white/automatic already)
    With ActiveWorkbook.TableStyles("PivotStyleMedium2v2").TableStyleElements( _
        xlHeaderRow).Interior
        'only one/two lines are changing the colours
'        .TintAndShade = -0.249977111117893
        .ColorIndex = 49
    End With

    'now modify grand total row's style (fill) (font colour is white/automatic already)
    With ActiveWorkbook.TableStyles("PivotStyleMedium2v2").TableStyleElements( _
        xlTotalRow).Interior
        'only one/two lines are changing the colours
'        .TintAndShade = -0.249946592608417
        .ColorIndex = 49
    End With

End Sub

如果您得到的结果不是您想要的,只需 select 工作簿中数据透视表的一部分,点击数据透视表工具功能区的“设计”选项卡,right-click您的代码已创建(它应该位于顶部的自定义部分),然后单击删除。希望这有帮助。

(您甚至可以使用上述代码在其他还没有数据透视表的工作簿中自定义数据透视表样式。)