1
resposta

VBA criando arquivo de texto posicional de um CSV

E ae clã,

Gostaria de saber se é possível o VBA (Excel) converter um arquivo CSV para um arquivo de texto com posição (cursor) e comprimento (tamanho do campo) definidos, preenchendo a falta de caracteres com espaços vazios.

Seria mais ou menos assim:

CSV:

FELIPE MUNIZ,SAO PAULO,SP,10091987

ADEMIR SANTOS,RIO DE JANEIRO,RJ,03051992

TXT:

FELIPE MUNIZ SAO PAULO SP 10091987

ADEMIR SANTOS RIO DE JANEIRO RJ 03051992

Nome: posição 1 - length 20

Cidade: posição 21 - length 15

Estado: posição 36 - length 7

Nascimento: posição 43 - length 8

Valeu clã!

1 resposta

Oi Felipe tudo bem?

Tem jeito sim. Fiz até o código para você.

Dá uma olhada

Public Sub Converter()
    Dim Arquivo As Integer
    Dim CaminhoArquivo As String
    Dim TextoArquivo As String
    Dim TextoProximaLinha As String
    Dim ContadorLinha As Long
    Dim fDialog As FileDialog
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

'Show the dialog. -1 means success!
    If fDialog.Show = -1 Then
        CaminhoArquivo = fDialog.SelectedItems(1) 'The full path to the file selected by the user
    End If

'Configura a leitura do arquivo
    Arquivo = FreeFile

    Dim fd As FileDialog


'Abre o arquivo para leitura
    Open CaminhoArquivo For Input As Arquivo
    ContadorLinha = 1
'Lê o conteúdo do arquivo linha a linha
    Do While Not EOF(Arquivo)
        Line Input #Arquivo, TextoProximaLinha
        linhasplit = Split(TextoProximaLinha, ",")


        While Len(linhasplit(0)) <= 20

            linhasplit(0) = linhasplit(0) & " "


        Wend

        While Len(linhasplit(1)) <= 15

            linhasplit(1) = linhasplit(1) & " "


        Wend

        While Len(linhasplit(2)) <= 7

            linhasplit(2) = linhasplit(2) & " "


        Wend

        While Len(linhasplit(3)) <= 8

            linhasplit(3) = linhasplit(3) & " "


        Wend



        textocomespacos = linhasplit(0) & linhasplit(1) & linhasplit(2) & linhasplit(3) & vbCrLf
        TextoArquivo = TextoArquivo & textocomespacos
    Loop

'Coloca na janela de verificação imediata
    Debug.Print TextoArquivo

'Fecha o arquivo
    Close Arquivo


'make the file dialog visible to the user
    intChoice = Application.FileDialog(msoFileDialogSaveAs).Show
'determine what choice the user made
    If intChoice <> 0 Then
'get the file path selected by the user
        strPath = _
        Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
'displays the result in a message box

    End If

    Dim iArq As Long

    iArq = FreeFile

    Open strPath For Output As iArq

    Print #iArq, TextoArquivo
    Close #iArq

End Sub




Espero ter ajudado!!!