Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 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 Мар 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 Мар 2018 23:53:59
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Off
"Растлению темной стороны юный Скайуокер поддался. Мальчика, что учил ты, уже нет. Поглотил его Дарт Вейдер."

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