Подскажите, пожалуйста, не встречалась ли Вам надстройка или инструмент/готовый код позволяющий перенести правила условного форматирования в код VBA. Для применения УФ на отдельную кнопку - дабы повысить производительность файла? Или это гиблое дело?
Возможно есть вариант проще? Чтобы на уровне книги, пользователю, можно было регулировать обновление правил УФ. Например, положение элемента, которое отвечало за - обновлять правила по умолчанию / не обновлять
УФ и производительность это практически взаимоисключающие вещи. Если что то действительно нужно раскрашивать, то делайте это по каким-нибудь событиям книги/листа, макросом
Согласие есть продукт при полном непротивлении сторон
На всякий случай, такая мысль, буквально сейчас пришла.. Может как-то ускорит, может нет. Не использовать формулы и выражения внутри правил, а выносить их на лист в дополнитльные столбцы, и уже УФ делать опорой на эти столбцы, чтобы формулы не вычислялись внутри волатильного движка УФ, а УФ проверяло лишь результат этих формул, вычисленных на листе. В приложеном примере я сделал такую модификацию для столбцов A и M(L). Допустим у вас для столца L установлены такие правила
Код
<=F$3/2
>=F$3*2
>F$3*1,2
<F$3/1,2
Делаем дополнительные столбец (М) в котром протягиваем формулу
Еще дополню, дополнительные столбцы сбивают правила, поэтому нужно не доп. столбцы, а делать дополнительный лист с формулами для УФ Ну или макросы, поскольку с этим УФ такая каша, я тут не спорю..
Попытка реализовать описанный мной принцип. Увы получилось не все. Затык произошел на самом, какзалось бы простом - редактировании правила УФ программно. Простая процедура, которая должна прописывать в правиле простую формулу с относительной ссылкой типа "=Лист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
Интересно, теперь понятно, что значит "остановить если истина" это означает, если услвие выполняется, значит остановить работу других правил ниже по приоритету, хотя я могу ошибаться, конечно