▷ Formatação Condicional EN e BR no Excel VBA

Bem vindo ao meu novo artigo! Neste texto pretendo demonstrar um problema que acontece na Formatação Condicional quando se está utilizando o "gravador de macros" do Excel. O problema ocorrerá quando o seu código for utilizado em máquinas que são por padrão Estados Unidos-English dentro do Painel de Controle - Configurações Regionais.

Quando analisamos os padrões Inglês - English e também nas Opções de Configurações Regionais, English (United Stated), o elemento de separação das fórmulas é a virgula - ","

Para o padrão Brasileiro (Português Brasil) utilizamos como separador dos argumentos das funções é ; (ponto e vírgula).

O VBA possui algumas inconsistências de geração de código quando utilizamos o "gravador de macro", para as fórmulas não ocorre esse problema, mas notei que este erro ocorre na Formatação Condicional,

Quando gerar a "macro" o resultado será algo próximo ao código abaixo:

Sheet6.Range("I7:AR" & U_L1).FormatConditions.Add Type:=xlExpression, Formula1:="=AND(I7>1;I7<>"""")"

Analisando com mais detalhes, perceba o ; (ponto e vírgula), que é o separador característico do padrão Português Brasil.

Formula1:="=AND(I7>1;I7<>"""")"

Este código só irá funcionar para as máquinas em "Português Brasil" ou para países que utilizam a separação das fórmulas com o ponto e vírgula.

Visto essa inconsistência é necessário ter um código que consiga se adaptar a qualquer idioma (no meu caso a máquina em Inglês-English)

Para isso é necessário a utilização deste código abaixo

Application.International(XlApplicationInternational.xlListSeparator)

Este código irá mostrar qual será o elemento utilizado entre as condicionais das fórmulas e consequentemente também aplicado a formatação condicional. Este código deverá ser adicionado concatenado para que a fórmula funcione.

Formula1:="=AND(I7>1" & Application.International(XlApplicationInternational.xlListSeparator) & "I7<>"""")"

Abaixo finalizo o código exibindo-o de forma completa.

Sheet6.Range("I7:AR" & U_L1).FormatConditions.Add Type:=xlExpression, Formula1:="=AND(I7>1" & Application.International(XlApplicationInternational.xlListSeparator) & "I7<>"""")"

Para saber qual é o elemento utilizado no caracter de decimal dentro do Excel, seja EN ou BR segue o código.

Application.International(XlApplicationInternational.xlDecimalSeparator)

Espero que tenham gostado desta mini artigo,

Gostou do artigo? Se sim curta e compartilhe com seus contatos!

E você já conhece o meu novo curso online de Excel?

Abraços a todos

Fabio BALDINI

Frase do dia: Provérbio Chinês - "O bom estrategista traz um exército dentro da cabeça."

Agradecimentos a parte ao meu grande amigo e Mestre Alessandro Trovato, pelas revisões, dicas, que eu agradeço muito.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *