VBA Изменить цвет шрифта в зависимости от цвета фона в сводной таблице - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь написать код VBA, чтобы изменить цвет шрифта ячейки на основе цвета фона этой ячейки.Как правило, «скрывать» имена записей в двух столбцах («ID» и «Name»).Ячейки окрашены с использованием условного форматирования.

enter image description here

Мне удалось найти способ изменить шрифт, используя только 1 цвет, но не знаю, как динамически получитьцвет фона ячейки и использование его в качестве цвета шрифта.
Простой .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 голосов
/ 18 октября 2018

Обратите внимание, что существует альтернативный подход к сокрытию текста - установка пользовательского формата чисел

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

...