Ошибка «невозможно установить свойство размера класса шрифта» в Excel VBA для условного форматирования, лист НЕ защищен - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть длинный макрос VBA, подобный этому:

Private Sub ApplyCondFormRun(CellFormat As Range, ValidFormula As String, TargetRange As Range, StopIfTrue As Boolean, Strict As Boolean)
'For this to work, cell addresses in validation formula must point to the first row
'of target cell

Dim ArrFormat(1 To 9) As Variant
Dim i As Long

'Application.ScreenUpdating = False

'attributes to be copied to destination cells
With CellFormat
    ArrFormat(1) = .Font.Color                             'Number
    ArrFormat(2) = .Font.Size                              'Number
    ArrFormat(3) = .Font.Bold                              'Boolean
    ArrFormat(4) = .Font.Italic                            'Boolean
    ArrFormat(5) = .Font.Underline                         'No: -4142, Single: 2, Double: -4119, Single Accounting: 4, Double Accounting: 5
    If .Interior.ColorIndex = -4142 Then         'If cell is No fill then do nothing
        ArrFormat(6) = .Interior.ColorIndex      'Number
    Else
        ArrFormat(6) = .Interior.Color
    End If
    ArrFormat(7) = .Borders(xlLeft).Color        'Number
    ArrFormat(8) = .Borders(xlLeft).LineStyle    'Use only the left border style of the source cell & apply to whole destination cell
End With

    ArrFormat(9) = StopIfTrue                    'Boolean

TargetRange.FormatConditions.Add Type:=xlExpression, Formula1:=ValidFormula 'Add new cond formating
TargetRange.FormatConditions(TargetRange.FormatConditions.Count).SetFirstPriority
With TargetRange.FormatConditions(1)
    .Font.Color = ArrFormat(1)
    .Font.Size = ArrFormat(2)
....

Код останавливается на строке .Font.Size = ArrFormat(2) с ошибкой "невозможно установить свойство размера класса шрифта". Я исследовал много мест, в том числе здесь , но мой лист вообще не защищен. enter image description here К вашему сведению, диапазон CellFormat - это первый столбец в выбранном диапазоне на фотографии выше. Я буду применять форматы этих ячеек к условным форматам ячеек назначения (3-й столбец).

Кроме того, строка над ней, .Font.Color = ArrFormat(1), работает без проблем.

Здесь скриншот ошибки. Как видите, размер шрифта 11. enter image description here Может кто-нибудь помочь?

1 Ответ

2 голосов
/ 30 апреля 2020

Простой ответ: Вы не можете установить имя или размер шрифта для условного форматирования. Это не относится к VBA, но к Excel: если вы устанавливаете условный формат для ячейки с помощью обычного диалогового окна Excel, нажмите кнопку «формат» и выберите Font -Tab, вы увидите, что Font и Size свойства отключены, вы ничего не можете выбрать там:

Font setting dialog for conditional formatting

Нашли хорошее объяснение здесь :

Условное форматирование не может делать то, что вы хотите, потому что оно предназначено только для изменения формата внешнего вида, а не для изменения свойств ячеек. Разные шрифты имеют разные стили и интервалы. Предполагается, что шрифт большего размера приведет к изменению ширины столбца или высоты строки, что будет изменением среды объекта рабочего листа, чего не может сделать условное форматирование. Если вы хотите изменить стиль шрифта, вам нужно сделать это самостоятельно или использовать VBA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...