Ir para conteúdo
Fórum Script Brasil
  • 0

Importar algumas colunas do TXT para VBA


esteves.arthur

Pergunta

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
 

 

 

Editado por esteves.arthur
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...