Codificação (UTF/IS...
 
Notifications
Clear all

Codificação (UTF/ISO/ASCII)

4 Posts
2 Usuários
0 Reactions
997 Visualizações
(@diegozl)
Posts: 6
Active Member
Topic starter
 

Olá, pessoal.

Fiz todo o VBA de meu projeto em um computador rodando Windows (Excel 2010). Quando abri o arquivo em um Macbook, ele encontrou supostas falhas e pediu para corrigir.

Ao aceitar, ele modificou toda a acentuação do VBA, quando acessamos via Windows, ou seja, provavelmente adaptou pra linguagem dele.

Ex: "Crédito" virou "CrŽdito". Débito, virou "DŽbito".

Infelizmente, há campos em que não dá pra eu colocar sem acentuação, pois trata-se de um arquivo importado para a planilha. Diante disso, como definir um padrão, independente de onde a pessoa esteja acessando a planilha?

Obrigado.

 
Postado : 05/08/2022 2:36 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Não compreendi direito, @diegozl

É um arquivo txt que vc importa pra planilha ou é o próprio conteúdo das células que ficaram com caracteres estranhos?

Se é um arquivo txt, faça um teste importando o texto usando manualmente o Assistente de Importação de texto e na etapa 1 de 3 escolha "Macintosh" como "Origem do Arquivo".

 
Postado : 06/08/2022 1:35 am
(@diegozl)
Posts: 6
Active Member
Topic starter
 
Postado por: @edsonbr

É um arquivo txt que vc importa pra planilha ou é o próprio conteúdo das células que ficaram com caracteres estranhos?

Olá, @EdsonBR.

O arquivo que eu importo, possui acentuação, mas o problema está no próprio código VBA. Eu utilizo o vba para importar e formatar o arquivo .txt (apagando algumas colunas).

Quando abro a Planilha em um Macbook, ele detecta que há alguns caracteres com acentuação ou cedilha, e as adapta para a "linguagem" do Macbook, ou seja, o "Crédito" escrito no VBA, por exemplo, ao ser aberto novamente em um computador com Windows, vira "CrŽdito", logo, quando o comando VBA é utilzado para localizar "Crédito", ele não acha, já que o nome foi modificado.

O que eu precisaria (não sei se existe) seria uma forma de definir o tipo de código fonte, similar ao que ocorre no Eclipse, ou seja, se é UTF, ISO etc, ou de se adaptar ao depender do sistema operacional, de modo que a acentuação não fique confusa (ex: ao entrar no Windows, adaptar pra uma forma, ao entrar no Mac, outra).

Eu utilizo, no Excel, um comando (abaixo) que identifica qual computador está acessando a planilha, não sei é como formatar a fonte de acordo com a máquina:

       
         If Environ$("ComputerName") = "Macbook" Then
              MsgBox "Seja bem vindo, usuário do Macbook.", 64, "Welcome"
 
Postado : 06/08/2022 7:05 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Pôxa, @diegozl, não sabia que no Mac o código-fonte fica distorcido quando tem caracteres não-AscII. E não tem quase nada de informação sobre isso na Web. O mais próximo que encontrei foi uma pergunta semelhante no StackOverflow, mas sem respostas úteis:

Difference in VBA code between mac and windows when opening them

Infelizmente o VBA não tem opção de exportar/importar código-fonte diretamente em UTF, embora vc poderia fazer um teste simples colando seu código no Bloco de Notas ir em "Salvar Como" e em "Codificação" escolher "UTF-8" e então salvar o arquivo com a extensão *.bas. Então no VBE ir em  Arquivo > Importar Arquivo pra ver se tem algum efeito (acredito que não, mas...).

E o problema é que não tenho como testar num Mac.

Algumas outras tentativas que posso sugerir:

  • O conteúdo de texto acentuado quando em células fica normal ou também fica alterado? Se ficasse normal, vc poderia manter numa planilha oculta (ou num Nome oculto) o código fonte e injetá-lo no VBA on the fly ao abrir o arquivo (no evento Workbook_Open()), mas pra isso teria que referenciar a biblioteca "Microsoft Visual Basic for Applications Extensibility 5.3", que imagino ser possível também no VBA pelo Mac. Por exemplo:
Private Sub Workbook_Open()
  Dim codFonte As String
  codFonte = Join(Application.Transpose(Me.Worksheets("PlanOculta").[A1:A10]), vbCrLf)
  Me.VBProject.VBComponents("Modulo1").CodeModule.AddFromString codFonte
  'Cuidar também de não usar o nome do módulo e de variáveis com acento
End Sub

Particularmente nunca gostei de adicionar código com o código rodando. As chances de dar problema são grandes. Além disso, teria que testar antes se no módulo já não existe uma Sub com aquele nome, como após o arquivo ter sido salvo com as alterações.

Uma variação desse código seria carregar o módulo diretamente de um arquivo texto usando .AddFromFile ao invés de .AddFromString.

  • Ou, na hipótese de que o conteúdo das células preserve acentuação correta, na planilha oculta ao invés de ter o código-fonte vc teria uma lista das palavras chave acentuadas que seriam usadas no código e usá-las como variáveis. Exemplo: supondo que em A1 da PlanOculta vc mantenha o conteúdo "Crédito", no seu VBA vc poderia por exemplo usar:
  MsgBox Worksheets("PlanOculta").[A1] & " Total: XXX,XX"

Que logicamente retornaria "Crédito Total: XXX,XX".

  • Ainda uma terceira alternativa seria conviver com o código "sujo" e o correto no mesmo módulo escolhendo um ou outro conforme o sistema operacional em uso através de diretivas de compilação condicional, que inclusive também dispõe de constantes pré-definidas que possibilitam reconhecer o SO (Mac, por exemplo). Exemplo:
#If Mac Then
  Sub Teste()
      MsgBox "CrŽdito Total: XXX,XX"
  End Sub
#Else
  Sub Teste()
      MsgBox "Crédito Total: XXX,XX"
  End Sub
#End If

 

 
Postado : 07/08/2022 2:09 am