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.