Страницы: 1
RSS
Условное форматирование средствами VBA. Язык формул для разных языковых локализаций.
 
Здравствуйте. Пытаюсь настроить условное форматирование во время работы макроса. Проблема в том, что документ используется как в русскоязычных установках Excel, так и в английских версиях. Я всегда думал, что язык формул = языку интерфейса. Определяю язык интерфейса как советует MSDN, однако в этом случае на обоих версиях офиса получаю значение
Код
msoLanguageIDInstall
равное 1049. И, соответственно, если файл запущен в русскоязычной версии Excel, в условное форматирование прилетает английский вариант формул.
Полный код:
Код
    Set objLangSet = Application.LanguageSettings
        With Sheets("Sheet1")
          .Range("A1").FormatConditions.Delete        
        If objLangSet.LanguageID(msoLanguageIDInstall) = 1049 Then
            .Range("A1").FormatConditions.Add Type:=xlExpression, Formula1:="=A1=1=TRUE"
            .Range("A1").FormatConditions(1).Interior.Color = vbYellow
        Else
            .Range("A1").FormatConditions.Add Type:=xlExpression, Formula1:="=A1=1=ИСТИНА"
            .Range("A1").FormatConditions(1).Interior.Color = vbYellow
        End If

Заранее спасибо.
 
Конкретно в приведенном примере достаточно вместо:
Код
"=A1=1=TRUE"
записать
Код
"=A1=1"
Ну и плюс ко всему пробуйте не язык установки проверять, а язык интерфейса:
Код
Application.LanguageSettings.LanguageID(msoLanguageIDUI)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А если у пользователя будет не русская и не английская версии? Лучше работать с "английскими" формулами. Рекомендации по преобразованию здесь.
Владимир
 
А ещё лучше заливку делать макросом без УФ )
 
Юрий М, Ну что это за переманивание на темную сторону силы? :-)

VSerg, соглашусь с sokol92,  Если приведеный пример можно избавить от локализации, например заменив TRUE на (1=1) , про  вариант от  Дмитрий Щербаков, я  молчу, то при появлении функций будет проблема.  
По вопросам из тем форума, личку не читаю.
 
Большое всем спасибо за мнения.
БМВ, Формулы УФ содержат функции, пример сделан сильно упрощенным и содан только для демонстрации. Пока сделал по совету Дмитрий Щербаков, с проверкой языка интерфейса. К сожалению, нет доступа к русской версии офиса. Может найдется у кого-нибудь несколько минут, проверить, вставляется ли корректно УФ в приложенном файле ? В английской отрабатывает.
sokol92, спасибо за ссылку. Что-то не смог найти примеров, где Evaluate прикручивают к УФ, все сводится к вычислениям в ячейках. Надо будет поглубже покопаться. Хоть и вероятность появления пользователя с версией не русской и не английской практически нулевая.
Юрий М, в большинстве случаев возможно, так было бы проще. В моем случае после отработки макроса возможно внесение некоторых изменений руками, и тут уже выставленное УФ мне кажется удобнее. Нет необходимости отслеживать и перекрашивать измененные ячейки.
 
Цитата
VSerg написал:
К сожалению, нет доступа к русской версии офиса
А к к возможности установить Language Pack есть?

Цитата
VSerg написал:
Что-то не смог найти примеров, где Evaluate прикручивают к УФ
Или я неправильно пример указанный по ссылке понял или .... Вашу формулу, которую вы пишите на ENG вписываете временно в ячейку .formula  , а в formula1 УФ вставляете значение с локализованными функциями взяв из той же ячейки .FormulaLocal. Вроде и проверять язык не нужно.
Изменено: БМВ - 18.03.2018 21:43:00
По вопросам из тем форума, личку не читаю.
 
В принципе, возможность установки русского есть. Просто привык уже к английской версии, для опытов только если установить и удалить потом...
Цитата
БМВ написал:
Или я неправильно пример указанный по ссылке понял
Более вероятно, что это я неправильно понял пример. Спасибо, поэкспериментирую т.к. это более "общее" решение.
 
Цитата
VSerg написал:
установить и удалить потом...
Зачем? Он не мешает, просто по надобности можно переключится. Я тоже в ENG сижу. Единственный недостаток, это приходится при переключении выйти и войти в офисную программу.
 
По вопросам из тем форума, личку не читаю.
 
Поддерживаю план действий БМВ из #7. Пробуем (в любой локализации):
Код
Option Explicit
Sub Test()
  Dim v
  With Sheets("Sheet1").Range("A1")
    v = .Formula  ' save
    .Formula = "=Sum(B1:B2)>=2"
    .FormatConditions.Add Type:=xlExpression, Formula1:=.FormulaLocal
    .FormatConditions(1).Interior.Color = vbYellow
    .Formula = v  ' restore
  End With
End Sub
Владимир
 
Цитата
Юрий М написал:
лучше заливку делать макросом без УФ
полностью согласен - особенно для больших областей. Функции УФ довольно ощутимо грузят файл и сильно замедляют пересчёт. К тому же не нужно думать, что у другого человека, когда он там намудрит что-то и руками перекрасит, всё не полетит к чертям)))
к слову, макросное преобразования из УФ в реальную заливку также происходит неоправданно долго (для общего случая с неизвестными и/или разными цветами УФ-заливки)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Offtop
Jack Famous,  "Поглотит тебя тёмная сторона силы…" :-)

Надо не забывать, что при таком варианте, надо отслеживать изменения или форматировать при пересчете, или .... Короче, все то, от чего тормозит УФ надо воспроизвести в своем коде - тоже вариант. :-).
По вопросам из тем форума, личку не читаю.
 
OFF: УЖЕ поглотила, мастер джедай  :D и сильно облегчила кучу процессов)))
Цитата
БМВ написал:
все то, от чего тормозит УФ надо воспроизвести в своем коде
лично я стараюсь полностью избавляться от "раскрасок" в пользу признака в поле — всё-таки так для xl намного понятнее и он меньше артачится)) ещё один вариант - дать простенький макрос для закраски пользователю (или обновлять надстройку, как делаю я)  ;)
Изменено: Jack Famous - 18.03.2018 23:53:59
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Off
"Растлению темной стороны юный Скайуокер поддался. Мальчика, что учил ты, уже нет. Поглотил его Дарт Вейдер."

Jack Famous, Всегда найдется работа для VBA , также как и его использование может быть не оправданным.  Очень ушли от темы, по этому предлагаю на сим закончит.
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо, не знал. Застрял в далеком прошлом. Оказывается, он у меня даже установлен.
sokol92, Ваш код прекрасно работает в обеих версиях. Огромное спасибо.
Так же спасибо за идеи закрашивания макросом, но простите мое упрямство - хочу через УФ.
Страницы: 1
Наверх