Excel VBA数据透视表填充标题

时间:2016-06-20 12:33:29

标签: excel vba excel-vba pivot pivot-table

在excel vba中,我正在创建一个数据透视表,并希望用白色字体填充标题(前两行)和底行(1行)蓝色。

以下代码填充第一个数据集行的内部而不是标题。

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

有没有办法动态引用数据透视表的标题和最后一行?引用“数据透视表标题”比报告更改值的特定范围更好。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

你可以简单地使用它:

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

答案 2 :(得分:0)

到目前为止,线程中显示的代码确实有效,但将来必须重新运行:只要数据透视表中的行数或列数发生变化,您就可以坐在没有枢轴的彩色行或列中,或者在枢轴的错误部分有色细胞。

我建议您查看Excel的内置透视样式,选择最接近您需要的样式,并使用这样的代码来修改标题行和总行。没有必要操纵单元格的范围,因为下次你可能想要关闭总行(为了参数的缘故)但是范围仍然是彩色的。

我录制了一个宏并删除了所有冗余的代码行,以帮助您查看更改内容。我还删除了一个有用的行(.TintAndShade =)并将其替换为" ColorIndex ="声明,以强制你似乎更喜欢蓝色的阴影。

运行此选项后,您应该具有相同工作簿中所有其他(现有和新)枢轴的相同样式。你甚至可以将其设为默认值。当您的pivot [刷新]覆盖不同范围的单元格时,无需再次运行代码进行格式化。

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

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

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

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