Страницы: 1
RSS
Перенос правил УФ в VBA, Повысить производительность файла
 
Добрый день!

Подскажите, пожалуйста, не встречалась ли Вам надстройка или инструмент/готовый код позволяющий перенести правила условного форматирования в код VBA.
Для применения УФ на отдельную кнопку - дабы повысить производительность файла? Или это гиблое дело?

Возможно есть вариант проще? Чтобы на уровне книги, пользователю, можно было регулировать обновление правил УФ.
Например, положение элемента, которое отвечало за - обновлять правила по умолчанию / не обновлять
Изменено: Vladimir K - 16.05.2024 13:48:21
 
УФ и производительность это практически взаимоисключающие вещи.
Если что то действительно нужно раскрашивать, то делайте это по каким-нибудь событиям книги/листа, макросом
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Спасибо за совет, учту! А как переопределить событие с стандартного на пользовательское, не подскажите?
Изменено: Vladimir K - 15.05.2024 17:24:35
 
'Пользовательское событие' это, например, какое?
Согласие есть продукт при полном непротивлении сторон
 
На всякий случай, такая мысль, буквально сейчас пришла.. Может как-то ускорит, может нет. Не использовать формулы и выражения внутри правил, а выносить их на лист в дополнитльные столбцы, и уже УФ делать опорой на эти столбцы, чтобы формулы не вычислялись внутри волатильного движка УФ, а УФ проверяло лишь результат этих формул, вычисленных на листе. В приложеном примере я сделал такую модификацию для столбцов A и M(L).
Допустим у вас для столца L установлены такие правила
Код
<=F$3/2
>=F$3*2
>F$3*1,2
<F$3/1,2

Делаем дополнительные столбец (М) в котром протягиваем формулу
Код
=ЕСЛИМН(L3<=F$3/2;1;L3>=F$3*2;2;L3>F$3*1,2;3;L3<F$3/1,2;4)

А правила УФ меняем на
Код
=$M3=1
=$M3=2
=$M3=3
=$M3=4
Изменено: testuser - 15.05.2024 18:29:51
 
Sanja, к примеру кнопка, нажал на неё - условное форматирование применилось
Цитата
написал:
делайте это по каким-нибудь событиям книги/листа,
или так
 
Код
а выносить их на лист в дополнитльные столбцы
Еще дополню, дополнительные столбцы сбивают правила, поэтому нужно не доп. столбцы, а делать дополнительный лист с формулами для УФ
Ну или макросы, поскольку с этим УФ такая каша, я тут не спорю..
Изменено: testuser - 15.05.2024 19:34:27
 
Попытка реализовать описанный мной принцип. Увы получилось не все. Затык произошел на самом, какзалось бы простом - редактировании правила УФ программно. Простая процедура, которая должна прописывать в правиле простую формулу с относительной ссылкой типа "=Лист1FC!F3=6" (6 = приоритет правила). Но из vba это не работает, правило не применяется на весь диапазон. Начинает работать только если сначала прописать абсолютную ссылку "=Лист1FC!$F$3=6", а потом уже в настройках переделать ручками на относительную, то беж метод .Modify работает не совсем правилно. Второй момент, это видимо ограниченность размера коллекции Range.Areas, либо связано с ограничением строки адреса..3й момент, не проработан механизм для правил с 2мя аргументами (формулами) и возможно еще много чего.
Код
Sub CorrectFCRules(Optional Sh As Worksheet)
    Dim fcs As FormatConditions ', Sh As Worksheet
    Dim i&, shName$, frml$, cll1Addr$, srvShNm$, fcAddr$, rng As Range
    Set fcs = Sh.UsedRange.FormatConditions
    shName = Sh.Name
    srvShNm = shName & "FC"
    For i = 1 To fcs.Count
        Select Case fcs(1).Type
        Case xlCellValue, xlExpression, xlBlanksCondition
            cll1Addr = srvShNm & "!" & fcs(1).AppliesTo.Cells(1).Address '(0, 0)
            frml = "=" & cll1Addr & "=" & i
            fcs(1).Modify xlExpression, Formula1:=frml
            fcs(10).StopIfTrue = False
        End Select
    Next
End Sub
Изменено: testuser - 18.05.2024 13:54:03
 
Цитата
написал:
Для применения УФ на отдельную кнопку - дабы повысить производительность файла
как вариант - https://www.youtube.com/watch?v=ElNtHL7rjCc
 
Цитата
irabel написал:
как вариант
Интересно, теперь понятно, что значит "остановить если истина" это означает, если услвие выполняется, значит остановить работу других правил ниже по приоритету, хотя я могу ошибаться, конечно
Страницы: 1
Наверх