Jump to content
Fórum Script Brasil
  • 0

Importar algumas colunas do TXT para VBA


Question

Boa tarde!

Sou bem iniciante e estou com dúvidas de como prosseguir. Eu tenho um TXT e consegui importar ele pra VBA e até conseguir tirar a primeira linha que não precisava.

Porém, preciso refazer e apenas importar 5 colunas que me interessam, já que a planilha vai de A até a coluna GI.

E ainda por cima preciso ter a primeira linha com o nome que darei para as 5 colunas importadas. Isso é possível e como eu faria isso?

O código que usei:

Sub importar_arquivo()
    Application.ScreenUpdating = False
    importaArquivo
End Sub

Private Function importaArquivo()
    Dim arquivo As String
    arquivo = abrirArquivo
    If arquivo <> Empty Then
        Debug.Print "ok"
        ActiveWorkbook.Worksheets.Add 'nova planilha
        With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & arquivo & "", Destination:=Range("A1"))
            .Name = "teste"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 850
            .TextFileStartRow = 2
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileOtherDelimiter = "|"
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    End If
    arquivo = ""
End Function

Function abrirArquivo() As String
    Dim arquivo As String
    On Error GoTo sair:
    arquivo = ""
    With Application.FileDialog(msoFileDialogFilePicker)
          'Selecção de apenas um aquivo
          .AllowMultiSelect = False
          'Filtro de extenção
          .Filters.Add "All files", "*.txt; *.csv"
          'Mostra a caixa de dialogo
          .Show
          'Armazena o caminho do arquivo
          arquivo = .SelectedItems.Item(1)
    End With
    abrirArquivo = arquivo
sair:
    arquivo = ""
End Function

 

E o código que preciso fazer:

E o código que preciso fazer é pegar apenas o que deixei em negrito na primeira linha.

    [H2]1|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||51|20201030000000||20201030000000|||||||||||||2||||||988788|9770|9770|||||||0|0|0||||False|UNITS|12||||20250220000000|||||||12|12|0|6|988788||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]2|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||1||||||EMB99999990020000000673|126|126|||||||0|0|0||||False|UNITS|12||||20220621000000||||||TRANSPORTADORA|4.49|17995.8|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]3|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||1||||||EMB99999990020000000674|126|126|||||||0|0|0||||False|UNITS|12||||20220621000000||||||TRANSPORTADORA|4.49|17995.8|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]4|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||1||||||EMB99999990020000000675|126|126|||||||0|0|0||||False|UNITS|12||||20220621000000||||||TRANSPORTADORA|4.49|17995.8|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]5|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||1||||||EMB99999990020000000676|126|126|||||||0|0|0||||False|UNITS|12||||20220621000000||||||TRANSPORTADORA|4.49|17995.8|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]6|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||2||||||EMB99999990020000000669|160|160|||||||0|0|0||||False|UNITS|12||||20220202000000||||||TRANSPORTADORA|4.49|6621.6|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]7|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||2||||||EMB99999990020000000670|160|160|||||||0|0|0||||False|UNITS|12||||20220202000000||||||TRANSPORTADORA|4.49|6621.6|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]8|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||2||||||EMB99999990020000000671|160|160|||||||0|0|0||||False|UNITS|12||||20220202000000||||||TRANSPORTADORA|4.49|6621.6|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]9|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||12|20201016000000||20201016000000||||||||1|||||2||||||EMB99999990020000000672|160|160|||||||0|0|0||||False|UNITS|12||||20220202000000||||||TRANSPORTADORA|4.49|6621.6|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||
[H2]10|2|||10|49.92|1818481.6|0|S0011||||||||||||S0011|||||||||||||51|20201030000000||20201030000000|||||||||||||1||||||EMB99999990020000000742|127|127|||||||0|0|0||||False|UNITS|12||||20220520000000||||||TRANSPORTADORA|2|1720000|0|7|||||||||||0|0|0|0|0|0|0|0|0|0|||||||||||||||||||||0|0|0|0|0||||||||||||||||||||||||


Abraços,

Arthur Esteves
 

 

 

Edited by esteves.arthur
Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 1

Boa noite,

Eu fiz o teste aqui com os dados e apenas alterei a informação que é colhida do arquivo:

            .TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
                                            9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, _
                                            9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 9, 9, 9, _
                                            9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
                                            9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, _
                                            9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9)

Essa parte é responsável por dizer qual é o dado de cada coluna, vendo isso eu coloquei "9" para dizer que não deve ser trazida a coluna. Se você precisa de alguma coluna a mais basta ir ativando com o numero "1" as colunas que você precisa.

Obs.: No final eu sair colocando vários "9" para evitar que traga alguma coluna a mais.

Link to post
Share on other sites
  • 0

Entendi, estouro. Muito obrigado! Vou testar aqui e tentar entender.

Mais uma pergunta se puder me ajudar, como sou iniciante, eu queria fazer a primeira linha com os nomes que terão esses dados que puxarei, sabes se consigo fazer isso por ListBox? Eu li sobre isso e entendei que seria a melhor maneira. Sabes se existe outra ou se é isso mesmo?

 

Abraços

 

Link to post
Share on other sites
  • 0

Consegui fazer algo assim, além de não saber se esta certo eu não saberia onde encaixar no código. Estou lendo sobre o assunto e nada flui.

 

Dim ListBox1


        ListBox1.ColumnCount = 5
        ListBox1.TextColumn = 5
        With ListBox1
                        
          .AddItem
             .List(0, 0) = "Seq_requisicao"
             .List(0, 1) = "seq_item_requisicao"
             .List(0, 2) = "qtd_retorno"
             .List(0, 3) = "ind_unidade"
             .List(0, 4) = "cod_item"
                        
        End With

Link to post
Share on other sites
  • 0

Estava pensando também em fazer fixo como variavel, só que não consegui por pra funcionar:

 

Sub cabecalho()
    Dim Seq_requisicao, seq_item_requisicao, qtd_retorno, qtd_retorno, cod_item As String
    
    Seq_requisicao = Cells(1, 1).Value
    seq_item_requisicao = Cells(1, 2).Value
    qtd_retorno = Cells(1, 3).Value
    qtd_retorno = Cells(1, 4).Value
    cod_item = Cells(1, 5).Value
End Sub
 

Link to post
Share on other sites
  • 0

Alysson eu consegui fazer de um jeito simples. Aí retorna pra mim a seguinte imagem anexada.

Eu estou penando para conseguir fazer um código de soma e que apresente esta imagem consolidada.

Por exemplo, se o que tiver na primeira coluna (seq_requisicao) for repetido e o cod_item também for repetido aí tem que somar o qtd_retorno e apresentar toda essa planilha (dos somados e não somados), contudo mais simples, no caso daria 4 linhas se somar tudo certo.

Capturar.JPG

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148907
    • Total Posts
      645003
×
×
  • Create New...