Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Erro em Formatação de arquivo CSV exportado via VBA

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
saulopef
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Sáb Ago 12, 2017 12:18 am

Erro em Formatação de arquivo CSV exportado via VBA

Mensagem por saulopef »

Olá, sou novato no forum, e ja chego pedindo uma baita ajuda :D
possuo um sistema de análise de dados (Análise da atividade elétrica do coração), tais dados são provenientes de uma leitura feita por um eletrocardiograma que salva os dados (em Milisegundos) em um arquivo CSV, com uma unica coluna, e cada dado em uma linha diferente, utilizei uma planilha do Excel para realizar a limpeza destes dados, pois em muitos casos podem ocorrer o que chamamos de "interpolação" que são dados idênticos em sequência, quando isto ocorre as linhas que contem estes dados precisam ser excluídas. Exemplo:

[A]
[1] 0.800
[2] 0.833 (interpolado)
[3] 0.833 (interpolado)
[4] 0.870

neste caso as linhas [2] e [3] precisam ser excluídas, restando:

[A]
[1] 0.800
[2] 0.870

Para fazer isto, usei uma baita gambiarra no VBA mas que está funcionando muito bem:
Na Coluna "b" é inserida uma função "SE" que verifica se o valor da célula é igual ao da célula acima dela ou abaixo, se for, retorna como "interpolado" se não for, deixa a célula vazia (" ")
no vba criei uma sub que exclui a linha inteira se na coluna "b" constar o valor "interpolado", e no final desta Sub a coluna "b" é excluída.

Este processo esta funcionando para mim, mas sei que isso é gambiarra, se houver outro meio de faze-lo mais facilmente, estou aceitando sugestões.

Agora vamos ao problema de fato

Trabalho com centenas destes arquivos, e o sistema apenas reconhece arquivos CSV, porem ao invés de utilizar Virgulas como separador, ele utiliza ponto e virgula, já li e reli mil vezes que o VBA utiliza os padrões regionais e de idiomas para formatar o CSV, e por isso vai utilizar VIRGULA, Vamos ao Código;

Código: Selecionar todos

Sub ExportCVS()
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    template_file = ActiveWorkbook.FullName
 
    fileSaveName = Range("G1").Value
    Columns("A:H").Delete
 
    If fileSaveName = False Then
        Exit Sub
    End If
 
    'cria uma cópia da pasta de trabalho atual da planilha atual
    Dim newBook As Workbook
    Dim plan As Worksheet
    Set newBook = Workbooks.Add
 
    ThisWorkbook.ActiveSheet.Copy Before:=newBook.Sheets(1)
 
    'exclui as demais planilhas
    For Each plan In newBook.Sheets
        If plan.Name <> ActiveSheet.Name Then
            newBook.Worksheets(plan.Index).Delete
        End If
    Next
 
    newBook.SaveAs Filename:= _
                          fileSaveName, FileFormat:=xlCSV, _
                          CreateBackup:=False, TextCodepage:=True, local:=True
 
    'fecha a pasta de trabalho gerada
    newBook.Close SaveChanges:=True
    Set newBook = Nothing
 
    'MsgBox "O arquivo foi exportado com sucesso! ", vbInformation, "Exportar arquivos"
    Range("A:A") = ""
    Application.ScreenUpdating = True
End Sub
Nesse código, a planilha é copiada para um arquivo do excel em branco que é salvo no lugar original do arquivo CSV, com o mesmo nome, e é ai que o problema acontece, ao abrir o novo arquivo gerado no sistema de análise, este apesenta erro pois o formato está incorreto, ao abrir o arquivo csv no bloco de notas encontro o erro ele está como neste exemplo:

0.800,,,,,
0.870,,,,,
0.890,,,,,
0.880,,,,,


ai está o erro, foram salvas mais 4 colunas, desnecessárias, eu imagino que estas colunas estejam lá pois utilizo imagens como botões na planilha para chamar cada macro, uma possibilidade que imagino resolver seria ao invés de copiar toda a planilha, copiar apenas a coluna A para a nova planilha, mas ja tentei alterar o código para:

ThisWorkbook.ActiveSheet.Range("A:A").Copy Before:=newBook.Sheets(1)
ou
ThisWorkbook.ActiveSheet.Column("A:A").Copy Before:=newBook.Sheets(1)

Mas não funcionou, a solução temporária que utilizo é, abrir arquivo por arquivo, e substituir as 5 virgulas por um espaço vazio, e então assim o sistema consegue ler os arquivos corretamente.
então, o que eu preciso:
copiar apenas a Coluna A para a nova planilha, ou apagar todas estas virgulas sem a necessidade de fazer arquivo por arquivo.
desculpa pela novela escrita aqui, mas como eu disse se alguém souber uma alternativa para a primeira gambiarra, todo o resto pode ser alterado.
Abraços...


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Erro em Formatação de arquivo CSV exportado via VBA

Mensagem por srobles »

saulopef,

Pode não ser a melhor maneira, mas creio que um laço For => Next possa resolver o problema das vírgulas adicionais, utilizando a função Replace para cada linha remanescente na planilha antes de salvá-la.

Poderia disponibilizar sua planilha com as rotinas e um arquivo de modelo?

Assim podemos analisar melhor o conteúdo e melhor ajudar na solução.

Abs


Responder