Notifications
Clear all

Adaptar macro para importar vários arquivos TXT

3 Posts
2 Usuários
0 Reactions
1,258 Visualizações
(@tiagotr)
Posts: 2
New Member
Topic starter
 

Olá amigos, experts ou curiosos (como eu)

Estou diante do seguinte problema:

Preciso de uma macro para importar vários arquivos .txt de uma só vez, porém, também preciso que essa macro faça a leitura de todo o arquivo txt e importe somente as linhas (completas) do arquivo que se iniciarem com um determinado critério (por exemplo: linhas que se iniciem com o caractere "|").
Pesquisando aqui no fórum eu encontrei códigos que atendem a minha necessidade - um para cada situação (um importa vários arquivos e o outro importa apenas 1 arquivo com o critério que disse), porém, preciso fazer destes 2 códigos uma macro só (que importe vários e faça a leitura). Se puderem me ajudar eu estou encaminhando abaixo os códigos que possuo:

MACRO QUE IMPORTA VÁRIOS TXT

Option Explicit

Sub teste_importarvarios()

    Dim nxt_row As Long
    Dim Texto As String


     'Caminho
    Const strPath As String = "C:teste"
    Dim strExtension As String


    Application.ScreenUpdating = False

    ChDir strPath

     'extensão
    strExtension = Dir(strPath & "*.txt")


    Do While strExtension <> ""

         'Adiciona o nome do arquivo na próxima linha
        Range("A65536").End(xlUp).Offset(1, 0).Value = strExtension

        nxt_row = Range("A65536").End(xlUp).Offset(1, 0).Row

        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & strPath & strExtension, Destination:=Range("$A$" & nxt_row))
            .Name = strExtension
            .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 = 1
            .TextFileOtherDelimiter = ":"
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With

        strExtension = Dir
    Loop

    Application.ScreenUpdating = True

End Sub

------------------------------------------------------------------------------------------------------------------------

MACRO QUE IMPORTA APENAS UM TXT UTILIZANDO O CRITÉRIO DE IMPORTAR APENAS DETERMINADAS LINHAS (CRITÉRIO "|")

Public Sub LeArquivoTexto()
Dim Texto As String
Dim L As Long        'linha de gravação

'abre o arquivo texto para leitura.
'altere para caminhonome onde seu arquivo está
Open "C:testeteste1.txt" For Input As #1
L = 2:  Cont = 1

'loop para percorrer todas as linhas do arquivo texto
Do While Not EOF(1)
   Line Input #1, Texto 'lê uma linha
   Cont = Cont + 1
    'como o texto de exemplo possui tabulações:
    'Clean - remove caracteres não imprimíveis.
    'LTrim remove espaços a esquerda.
    Texto = WorksheetFunction.Clean(LTrim(Texto))
'
'Caso deseje copiar a linha inteira
   Select Case Left(Texto, 1)
      Case "|" ' col A
         Cells(L, 1).Value = Texto
      L = L + 1
   End Select
Loop
Close #1 'fecha o arquivo texto
End Sub
 
Postado : 17/04/2018 7:46 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Algo assim (talvez)

Sub Teste_Importa_Le()
Dim L As Long, Cont As Long
Dim Texto As String

'Caminho
Const strPath As String = "C:teste"
Dim strExtension As String

Application.ScreenUpdating = False

ChDir strPath
L = 2 'Linha inicial
'extensão
strExtension = Dir(strPath & "*.txt")

Do While strExtension <> ""
Open strExtension For Input As #1
Cont = 1

'loop para percorrer todas as linhas do arquivo texto
    Do While Not EOF(1)
       Line Input #1, Texto 'lê uma linha
       Cont = Cont + 1
        'como o texto de exemplo possui tabulações:
        'Clean - remove caracteres não imprimíveis.
        'LTrim remove espaços a esquerda.
        Texto = WorksheetFunction.Clean(LTrim(Texto))
    'Caso deseje copiar a linha inteira
       Select Case Left(Texto, 1)
          Case "|" ' col A
             Cells(L, 1).Value = Texto
          L = L + 1
       End Select
    Loop
Close #1 'fecha o arquivo texto

strExtension = Dir
Loop

Application.ScreenUpdating = True

End Sub

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

 
Postado : 17/04/2018 8:37 am
(@tiagotr)
Posts: 2
New Member
Topic starter
 

Opaaa, deu certo!!!

Foi necessário apenas fazer um ajuste em uma linha do código pois o procedimento não conseguia encontrar o arquivo no diretório.

Alteração:

"Open strExtension For Input As #1" corrigido para "Open strPath & strExtension For Input As #1"

Cara, muito obrigado pela sua ajuda!!! :D :D :D

 
Postado : 17/04/2018 11:57 am