Notifications
Clear all

Resultado diferente feito na mão e no vba

3 Posts
2 Usuários
0 Reactions
847 Visualizações
(@crazynever)
Posts: 0
New Member
Topic starter
 

Boa noite galera,

Tenho uma planilha que lê dois csv's e copia para dentro dela e coloca algumas formulas - coisa básica e simples - para depois atualizar algumas planilhas dinamicas, entretanto na ultima semana peguei uma situação interessante.

Se eu abro o csv clicando em cima e usando o excel ele já vem separado em coluna certinho e bonitinho - nada anormal aqui.
Se eu abro o csv via vba ele vem separado em linhas somente e ai necessito separar em colunas.

caminhofcr = Application.GetOpenFilename(FileFilter:="CSV,*.csv")
    'Abre o banco FCR
    Workbooks.Open caminhofcr

Gravei algumas macros para ver como o excel converte de texto para coluna e quando eu abro o csv via vba e converto de linhas para colunas na mão o resultado de um campo que contem data continua igual e segue a normalidade, porém se uso esse codigo:

    'Seleciona a planilha do relatório FCR
    Sheets(1).Range("A1").Select
    'Seleciona a região toda
    Selection.CurrentRegion.Select
    'Converte as informações em colunas
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
        True

Para realizar a conversão sozinho ele inverte o resultado dos campos que possuem data colocando no padrão americano e como uso essa formula:

Worksheets(pastafcr).Range("K2:K" & k).FormulaLocal = "=IF(D2="""";"""";CONCATENATE(DAY(D2);""/"";LOWER(TEXT(D2;""MMMM""))))"

Para transformar a data em legenda para um gráfico ta dando errado, pois o padrao incorreto atrapalha as planilhas dinamicas.

Isso começou faz umas 2 semanas e me afetou em diversas planilhas do excel nas mais variadas formas. Alguns campos de datas que vinham no formato BR mudaram sozinho para EN sem explicação e não consigo retornar ao normal.

Alguem sabe o motivo de que quando faço na mão o resultado é um formato BR e quando uso a macro que gravei o resultado é um formato EN?

Os codigos são bem fraquinhos e precisam melhorar muito - mas esse problema está me deixando de cabelo em pé e não consigo contornar ele sem fazer um serviço muito sujo...

Abraços e boa noite!

 
Postado : 12/08/2017 5:24 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

crazynever,

Bom dia!

Assim, sem ver, rodar e depurar seu arquivo fica muito difícil... O Excel, usa os parâmetros de idioma do Windows (geralmente em Português). Já o VBA usa os parâmetros americanos.

Vou apresentar apenas uma sugestão:
Tente criar uma variável do tipo data, armazene nela apenas a data que você está tentando passar na fórmula:

 Worksheets(pastafcr).Range("K2:K" & k).FormulaLocal = "=IF(D2="""";"""";CONCATENATE(DAY(D2);""/"";LOWER(TEXT(D2;""MMMM""))))"  

e teste com uma msgbox para ver o que o VBA lhe devolve como data. Se ele estiver devolvendo a data no padrão americano, use a função CDate para converter.

 
Postado : 13/08/2017 7:47 am
(@crazynever)
Posts: 0
New Member
Topic starter
 

Esperei um tempoa até conseguir estruturar uma resposta e consegui algumas coisas, isto é, essa conversão automática que comentei no final e disse que estava atrapalhando acontece por causa do text to columns que utilizo no vba.

Esse é o código que rodo no VBA

wsSLA.Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, DataType:=xlDMYFormat, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
        ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
        (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
        Array(27, 1), Array(28, 1)), TrailingMinusNumbers:=True

Essas são algumas linhas que estão no meu arquivo csv.

01000000;"Nome";"Nome";"Status";"16/03/2017 20:21";"16/03/2017 20:21";"Telefone";"Texto";"Texto2";"";"";"";"";"";"";"";"";"";"";"";"";"";"Texto";"Texto2";"";"0";"0";"0"
01000000;"Nome";"Nome";"Status;"11/08/2017 12:20";"16/03/2017 20:21";"Telefone";"Texto";"Texto2";"";"";"";"";"";"";"";"";"";"";"";"";"";"Texto";"Texto2";"";"0";"0";"0"

Quando rodo o vba o resultado é diferente, pois na primeira linha ele entende mantém o padrão BR de datas e o valor sai como deveria. Na segunda linha ele converte para o padrão EN de data e altera o valor da variavel numerica e com isso quando jogo funcões como DAY ou MONTH na celula o resultado sai errado.
A segunda linha ele converte as datas para o padrão númeiro fica algo do tipo 43047,51389 já na primeira linha fica exatamente igual 16/03/2017 20:21 e isso está acabando com o restante da planilha.
Colocar no texttocolumns a opção de converter como texto não funciona.

Alguma sugestão?

 
Postado : 23/08/2017 6:05 pm