Excel VBA Макросы. Условное форматирование, ошибка.

Автор Посетитель, 24 декабря 2021, 10:53

Посетитель

С помощью этого макроса создаю условное форматирование (УФ):

Sub Макрос()

    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B$1=1"
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 192
        .TintAndShade = 0
    End With

End Sub

Но почему-то иногда макрос работает, а иногда в этой строке происходит ошибка: Run-time error '5': Invalid procedure call or argument
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B$1=1"

С чем это может быть связано?

Администратор

В этой строке находится формула, в которой стиль ссылок A1 (есть ещё стиль ссылок R1C1):
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B$1=1"

Стиль ссылок задаётся здесь: вкладка Файл - Параметры - Формулы - Работа с формулами - Стиль ссылок R1C1.

Если во время работы этого макроса используется стиль ссылок R1C1, то будет происходить ошибка, т.к. УФ чувствительна к стилю ссылок: в формуле используется стиль ссылок A1, а текущий стиль ссылок R1C1.
Чтобы не происходила ошибка во время работы макроса, нужно на время работы макроса сделать стиль ссылок, используемый в формуле УФ.

Макрос
Sub Макрос()

    Dim ИсхRefStyle As Long
   
   
    ' Запоминаем стиль ссылок, используемый в данный момент в Экселе.
    ИсхRefStyle = Application.ReferenceStyle

    ' Делаем нужный стиль ссылок.
    If ИсхRefStyle <> xlA1 Then Application.ReferenceStyle = xlA1

    ' Создание УФ.
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B$1=1"
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 192
        .TintAndShade = 0
    End With

    ' Возвращаем стиль ссылок, который был до запуска макроса.
    Application.ReferenceStyle = ИсхRefStyle
   
End Sub
[свернуть]