Notifications
Clear all

Formatar arquivo texto da DIRF em excel

4 Posts
2 Usuários
0 Reactions
1,918 Visualizações
(@jlvfranca)
Posts: 20
Eminent Member
Topic starter
 

Pessoal, bom dia.

Mas uma vez venho recorrer aos conhecimento dos mestres em VBA.

Tenho um arquivo texto (DIRF_2016_Teste) e que preciso trabalhar com ele no excel.
Fui no gravador de macro, mas como sou limitado, as coisas que necessito não estão da forma que eu quero.

Acho que isso só conseguirei através de um código em VBA mais elaborado.
Preciso abrir este arquivo texto, no excel, deslocando tudo que for diferente “BPFDEC”, para coluna “D”, repetir os dados para os espaços que ficaram vazios do código “BPFDEC” e transformar os valores em número (0,00).

Alguém poderia ajudar-me, pois o arquivo que tenho tem muitas linhas e com macro não vou conseguir.

Seguem arquivos para uma melhor compreensão.

Agradeço antecipadamente, a todos que puderem me ajudar nesta questão.

JLVFrança

 
Postado : 18/01/2017 6:46 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia jlvdranca,

Vê se ajuda:

Option Explicit

Sub Macro1()
Dim wsAtiva     As Worksheet
Dim sArquivo    As String
Dim UltL        As Long
Dim i           As Long

    Application.ScreenUpdating = False
    sArquivo = CStr(Application.GetOpenFilename("Arquivo de Texto (*.TXT*),*.TXT*", , "Selecione um arquivo *.TXT*:", , False))
    
    If sArquivo = "Falso" Then
        MsgBox "Arquivo não selecionado"
        Exit Sub
    End If
    
    ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    Set wsAtiva = ThisWorkbook.ActiveSheet
    
    With wsAtiva.QueryTables.Add(Connection:= _
        "TEXT;" & sArquivo, Destination:=Range("$A$1"))
        .TextFileParseType = xlDelimited
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
        .Refresh
    End With
    
    UltL = wsAtiva.Cells(Rows.Count, 1).End(xlUp).Row
    ActiveWorkbook.Connections(1).Delete
    ActiveWorkbook.Names(1).Delete
    
    For i = 5 To UltL
        If Not wsAtiva.Cells(i, 1).Value = "BPFDEC" Then
            wsAtiva.Range("A" & i & ":C" & i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
            wsAtiva.Range("A" & i - 1 & ":C" & i - 1).AutoFill Destination:=wsAtiva.Range("A" & i - 1 & ":C" & i), Type:=xlFillCopy
        End If
    Next i

    Application.ScreenUpdating = True
    MsgBox "Processo finalizado com sucesso"
    
End Sub

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/01/2017 8:02 am
(@jlvfranca)
Posts: 20
Eminent Member
Topic starter
 

Bernardo, bom dia. :D

Quero agradecer por ajudar-me.
Perfeito. Era exatamente o que estava precisando.

Abraços,

JLVFrança

 
Postado : 18/01/2017 9:24 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

;)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/01/2017 9:27 am