none
Consolidando informações - Importando dados de um Txt para o Excel - Ajuda ! RRS feed

  • Pergunta

  • Pessoal 

    Preciso fazer a unificação de informações que estão separadas por blocos em um arquivo txt. Já tentei de tudo mais da erro. A ideia é que eu tenha uma única planilha com todas as informações dos estoques de diversas lojas espalhadas pelo estado, cada uma tem um número único e no meu relatório tipo txt ela vem separada em blocos, primeiro vem as informações da loja e numero do relatório e outras coisas depois logo abaixo vem as informações por modelo. 
    Como faço o cruzamento com outra planilha ta muito complicado atualizar estas informações da maneira que estou trabalhando hoje, abaixo segue o código que consegui melhorar com a ajuda. Veja que ele separa os blocos:

    Private Sub CommandButton1_Click()
    Dim FSO As FileSystemObject
    Dim FSOFile As File
    Dim FSOStream As TextStream
    Dim linha As String, i As Integer
    
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    Dim arquivo As String
    
    With fd
    If .Show = -1 Then
    arquivo = .SelectedItems(1)
    Else
    Exit Sub
    End If
    End With
    Set fd = Nothing
    
    Set FSO = New FileSystemObject
    Set FSOFile = FSO.GetFile(arquivo)
    Set FSOStream = FSOFile.OpenAsTextStream(ForReading, TristateUseDefault)
    
    i = 0
    
    ' Montagem do primeiro cabeçalho - informações da lojas
    Do While Not FSOStream.AtEndOfStream
    linha = FSOStream.ReadLine
    i = i + 1
    If Left$(linha, 2) = "01" Then
    Sheets("Estoque").Range("A" & CStr(i)).Value = "COD-REG"
    Sheets("Estoque").Range("B" & CStr(i)).Value = "NUM RELATORIO"
    Sheets("Estoque").Range("C" & CStr(i)).Value = "DATA/HORA EMISSAO"
    Sheets("Estoque").Range("D" & CStr(i)).Value = "COD.EAN COMPRADOR"
    Sheets("Estoque").Range("E" & CStr(i)).Value = "COD.EAN FORNECEDOR"
    Sheets("Estoque").Range("F" & CStr(i)).Value = "CGC FORNECEDOR"
    Sheets("Estoque").Range("G" & CStr(i)).Value = "COD.EAN ESTOQUE"
    Sheets("Estoque").Range("H" & CStr(i)).Value = "DATA/HORA INVENTA"
    Sheets("Estoque").Range("I" & CStr(i)).Value = "COD.INT FORNECEDOR"
    Sheets("Estoque").Range("J" & CStr(i)).Value = "FILLER"
    
    ' Lista os dados referente ao primeiro cabeçalho - Dados das lojas
    Do While Left$(linha, 2) = "01"
    i = i + 1
    Sheets("Estoque").Range("A" & CStr(i)).Value = Left$(linha, 2)
    Sheets("Estoque").Range("B" & CStr(i)).Value = Mid$(linha, 3, 16)
    Sheets("Estoque").Range("C" & CStr(i)).Value = Mid$(linha, 19, 12)
    Sheets("Estoque").Range("D" & CStr(i)).Value = Mid$(linha, 31, 13)
    Sheets("Estoque").Range("E" & CStr(i)).Value = Mid$(linha, 44, 13)
    Sheets("Estoque").Range("F" & CStr(i)).Value = Mid$(linha, 57, 15)
    Sheets("Estoque").Range("G" & CStr(i)).Value = Mid$(linha, 72, 13)
    Sheets("Estoque").Range("H" & CStr(i)).Value = Mid$(linha, 85, 12)
    Sheets("Estoque").Range("I" & CStr(i)).Value = Mid$(linha, 97, 5)
    Sheets("Estoque").Range("J" & CStr(i)).Value = Mid$(linha, 102, 149)
    
    linha = FSOStream.ReadLine
    If FSOStream.AtEndOfStream Then Exit Do
    Loop
    
    ' Montagem do segundo cabeçalho - informações dos produtos no estoque
    Else
    'MEU OBJETIVO É ACRECENTAR AS INFORMAÇÕES DO PRIMEIRO CABEÇALO AO SEGUNDO E EXCLUIR A IMPORTAÇÃO DO PRIMEIRO
    
    'Meu objetivo:
    Sheets("Estoque").Range("A" & CStr(i)).Value = "NUM RELATORIO"
    Sheets("Estoque").Range("B" & CStr(i)).Value = "DATA/HORA EMISSAO"
    Sheets("Estoque").Range("C" & CStr(i)).Value = "COD.EAN COMPRADOR"
    Sheets("Estoque").Range("D" & CStr(i)).Value = "COD.EAN FORNECEDOR"
    Sheets("Estoque").Range("E" & CStr(i)).Value = "CGC FORNECEDOR"
    Sheets("Estoque").Range("F" & CStr(i)).Value = "COD.EAN ESTOQUE"
    Sheets("Estoque").Range("G" & CStr(i)).Value = "DATA/HORA INVENTA"
    
    'Informações do segundo cabeçalho
    Sheets("Estoque").Range("H" & CStr(i)).Value = "COD-REG"
    Sheets("Estoque").Range("I" & CStr(i)).Value = "NUM. SEQUENCIAL"
    Sheets("Estoque").Range("J" & CStr(i)).Value = "COD.PRODUTO"
    Sheets("Estoque").Range("K" & CStr(i)).Value = "QTD. ATUAL"
    Sheets("Estoque").Range("L" & CStr(i)).Value = "ESTOQUE MIN"
    Sheets("Estoque").Range("M" & CStr(i)).Value = "ESTOQUE MAX"
    Sheets("Estoque").Range("N" & CStr(i)).Value = "PONTO DE REPOSICAO"
    Sheets("Estoque").Range("O" & CStr(i)).Value = "QTD VENDIDA"
    Sheets("Estoque").Range("P" & CStr(i)).Value = "DATA/HORA INICIO APURA QTD VENDAS"
    Sheets("Estoque").Range("Q" & CStr(i)).Value = "DATA/HORA FIM APURA QTD VENDAS"
    Sheets("Estoque").Range("R" & CStr(i)).Value = "ESPAÇO NAO UZADO"
    Sheets("Estoque").Range("S" & CStr(i)).Value = "UNIDADE DE MEDIDA"
    Sheets("Estoque").Range("T" & CStr(i)).Value = "VALOR CUSTO FORNECEDOR"
    Sheets("Estoque").Range("U" & CStr(i)).Value = "VALOR CUSTO REPOSICAO"
    Sheets("Estoque").Range("V" & CStr(i)).Value = "QTDE-ENTRADA"
    Sheets("Estoque").Range("X" & CStr(i)).Value = "FILLER"
    
    ' Lista dados referente ao segundo cabeçalho - Com dados dos produtos no estoque
    Do While Left$(linha, 2) = "02"
    i = i + 1
    
    'MEU OBJETIVO É REPETIR EM CADA BLOCO AS INFORMAÇÕES DO PRIMEIRO CABEÇALHO DE CADA BLOCO (REG 01)
    
    
    ' Dados referente ao segundo cabeçalho
    Sheets("Estoque").Range("H" & CStr(i)).Value = Left$(linha, 2)
    Sheets("Estoque").Range("I" & CStr(i)).Value = Mid$(linha, 3, 6)
    Sheets("Estoque").Range("J" & CStr(i)).Value = Mid$(linha, 9, 14)
    Sheets("Estoque").Range("K" & CStr(i)).Value = Mid$(linha, 23, 15)
    Sheets("Estoque").Range("L" & CStr(i)).Value = Mid$(linha, 38, 15)
    Sheets("Estoque").Range("M" & CStr(i)).Value = Mid$(linha, 53, 15)
    Sheets("Estoque").Range("N" & CStr(i)).Value = Mid$(linha, 68, 15)
    Sheets("Estoque").Range("O" & CStr(i)).Value = Mid$(linha, 83, 15)
    Sheets("Estoque").Range("P" & CStr(i)).Value = Mid$(linha, 98, 12)
    Sheets("Estoque").Range("Q" & CStr(i)).Value = Mid$(linha, 110, 12)
    Sheets("Estoque").Range("R" & CStr(i)).Value = Mid$(linha, 122, 1)
    Sheets("Estoque").Range("S" & CStr(i)).Value = Mid$(linha, 123, 3)
    Sheets("Estoque").Range("T" & CStr(i)).Value = Mid$(linha, 126, 17)
    Sheets("Estoque").Range("U" & CStr(i)).Value = Mid$(linha, 143, 17)
    Sheets("Estoque").Range("V" & CStr(i)).Value = Mid$(linha, 160, 15)
    Sheets("Estoque").Range("X" & CStr(i)).Value = Mid$(linha, 175, 76)
    
    linha = FSOStream.ReadLine
    If FSOStream.AtEndOfStream Then Exit Do
    Loop
    End If
    Loop
    
    FSOStream.Close
    
    MsgBox "Tabela de Estoque Atualizada!"
    
    End Sub

    Valeu Galera
    Luciano Soares
    • Editado Webluciano segunda-feira, 2 de dezembro de 2013 15:08
    sexta-feira, 29 de novembro de 2013 17:13

Todas as Respostas