VBA根据数据透视表中的背景色更改字体颜色

时间:2018-10-17 20:48:39

标签: excel vba pivot pivot-table

我正在尝试编写VBA代码以根据该单元格的背景色来更改该单元格的字体颜色。通常,要“隐藏”两列(“ ID”和“ Name”)中的记录名称。单元格使用条件格式进行着色。

enter image description here

我设法找到一种仅使用一种颜色来更改字体的方法,但不知道如何动态获取单元格的背景色并将其用作字体颜色。
简单的.Font.Color = .Interior.ColorIndex不起作用...

Sub Color_text_black()  
   Dim c As Range
    With ActiveSheet.PivotTables("PivotTable2")

    With Intersect(.PivotFields("Name").DataRange.Cells, .TableRange1)
        .Font.Bold = False
        .Font.Color = 1 '.Font.Color = .Interior.ColorIndex doesn't work

    End With
    End With
End Sub

也许还应该有另一种获取背景颜色的方法,我尝试使用For循环,但是它总是向我发送错误。

Sub Color_text()
    Dim c As Range

    With ActiveSheet.PivotTables("PivotTable1")

        For Each c In .PivotFields("Name").DataRange.Cells
          .Font.Bold = False
          .Font.Color = .Interior.ColorIndex
        Next

    End With

End Sub

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

请注意,还有另一种隐藏文本的方法-通过设置自定义数字格式

https://support.office.com/en-us/article/number-format-codes-5026bbd6-04bc-48cd-bf33-80f18b4eae68

隐藏文字:

Sub HideInfo()
    With ActiveSheet.PivotTables("PivotTable1")

        HideText .PivotFields("Name").DataRange
        HideText .PivotFields("ID").DataRange

    End With
End Sub

取消隐藏文本:

Sub ShowInfo
    With ActiveSheet.PivotTables("PivotTable1")

        HideText .PivotFields("Name").DataRange, False   '<<edited
        HideText .PivotFields("ID").DataRange, False     '<<edited

    End With
End Sub

实用程序子,用于切换单元格格式以隐藏/取消隐藏内容:

Sub HideText(rng as Range, Optional bHide As Boolean = True)
    rng.NumberFormat = IIf(bHide, ";;;""""", "General")
End Sub

请注意,如果只需要隐藏某些值,则可以将格式用作CF规则格式的一部分。这样做的好处是它是动态的,因此会随数据而变化...

enter image description here