Условное форматирование, хотя применяется, формат не подходит - PullRequest
0 голосов
/ 04 июля 2018

Во-первых, это один из лучших форумов, на которых я был. Я только недавно создал аккаунт, но я уже многому научился на этом форуме.

Мой вопрос к заголовку относится к условному форматированию. Как видно из приведенного ниже кода, в качестве форматирования я применил цвет фона. Но после запуска этого макроса, хотя условия применяются к выбранным ячейкам, форматирование с ним не выполняется. Когда я нажимаю на кнопку «Управлять существующими правилами», условия выполняются, но появляется «Нет формата» Как можно увидеть здесь: Screenshot

Sub tableSetup()

    Dim tbl As ListObject

    Set tbl = ActiveSheet.ListObjects.Add(SourceType:=xlSrcRange, Source:=Selection, xllistobjecthasheaders:=xlYes, tablestylename:="Custom")

    cellStr = tbl.DataBodyRange.Cells(1).Address
    cellStr = Replace(cellStr, "$", "")
    formulaStr = "=IsFormula(" & cellStr & ")"

    With tbl.DataBodyRange
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, Formula1:=formulaStr
        .FormatConditions.Interior.Color = RGB(191, 191, 191)
    End With

End Sub

1 Ответ

0 голосов
/ 04 июля 2018

Вы не указываете, к каким форматным условиям применить форматирование.

With tbl.DataBodyRange
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:=formulaStr
    .FormatConditions(.FormatConditions.Count).Interior.Color = RGB(191, 191, 191)
End With

Вы удалили все остальные .FormatConditions так законно, это можно назвать .FormatConditions (1), но когда вы добавляете .FormatConditions, он всегда последний в очереди, пока вы не сделаете что-то вроде .FormatConditions ( .FormatConditions.Count) .SetFirstPriority, который перемещает его в начало очереди.

Вы также можете использовать объект, созданный с помощью .FormatConditions.Add, для формирования вложенного блока With ... End With для правильной ссылки на несколько операций.

With tbl.DataBodyRange
    .FormatConditions.Delete
    with .FormatConditions.Add(Type:=xlExpression, Formula1:=formulaStr)
        .Interior.Color = RGB(191, 191, 191)
        .SetFirstPriority
    end with
End With
...