Erro em Formatação ...
 
Notifications
Clear all

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

2 Posts
2 Usuários
0 Reactions
1,070 Visualizações
(@saulopef)
Posts: 1
New Member
Topic starter
 

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;

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.
vou deixar a planilha e um arquivo CSV em anexo como exemplo. Abraços...

 
Postado : 11/08/2017 9:11 pm
(@wrsouza)
Posts: 8
Active Member
 

Boa tarde Saulo, tudo bem?
Vi sua planilha e consegui salvar o arquivo de modo que não necessite copiar a mesma planilha e salvar... Aqui, eu criei uma matriz que armazenará os valores e a lançará em um novo arquivo e nisso, ele irá descarregar os valores e em seguida salvará. Peço que dê uma olhada.

 
Postado : 27/08/2017 9:00 am