Notifications
Clear all

Importar TXT - Nome do arquivo txt tem data e hora

6 Posts
2 Usuários
0 Reactions
1,639 Visualizações
(@lucianojr)
Posts: 16
Active Member
Topic starter
 

Senhores,

Bom dia,

Preciso da ajuda de vocês.

Estou fazendo uma planilha que preenche meus relatórios diários automaticamente, lendo os arquivo txt e xls com os dados necessários salvos em uma pasta específica.

Dois dos relatórios usam dados de arquivos txt gerados pelo sistema de automação que salva estes arquivo todos os dias as 17:00, para esses dois relatórios eu consegui fazer.

Minha dúvida foi para preencher outro relatório, que também utiliza um arquivo txt gerado pelo sistema de automação, porém este arquivo é gerado no momento em que o operador insere um dado do laboratório no sistema, ou seja, o horário no nome do arquivo não é exatamente igual todos os dias, como acontece para os dois relatórios mencionados anteriormente.
Sendo assim não estou enxergando uma forma de ler este arquivo pois o nome dele tem parte conhecida (parte da data) e uma parte que eu não conheço (parte da hora).

Exemplo:

Dia 05/05 o operador atualizou o arquivo as 07:18:55 então o nome do arquivo será FQ1A ADR May 05 2014 071855.txt
Dia 06/05 o operador atualizou o arquivo as 07:25:02 então o nome do arquivo será FQ1A ADR May 06 2014 072502.txt

Alguém enxerga uma luz no fim do túnel? :geek:

Desde já agradeço.

 
Postado : 06/05/2014 1:38 pm
benzadeus
(@benzadeus)
Posts: 78
Trusted Member
 
Public Sub pMain()
  Dim strCaminho As String
  
  strCaminho = pGetRelatório()
  
  If strCaminho = "" Then
    MsgBox "Não foi possível encontrar o relatório de hoje.", vbExclamation
  Else
    MsgBox "Caminho do relatório de hoje: " & strCaminho, vbInformation
  End If
End Sub

Private Function pGetRelatório() As String
  'Altere aqui o caminho. Não se esqueça de inserir
  'a contra-barra no final do endereço do diretório:
  Const cstrDiretório As String = "C:temp"
  
  Dim strDir As String
  Dim strPattern As String
  Dim ret As String
  Dim strMês As String
  
  Select Case Month(Date)
    Case 1: strMês = "Jan"
    Case 2: strMês = "Feb"
    Case 3: strMês = "Mar"
    Case 4: strMês = "Apr"
    Case 5: strMês = "May"
    Case 6: strMês = "Jun"
    Case 7: strMês = "Jul"
    Case 8: strMês = "Aug"
    Case 9: strMês = "Sep"
    Case 10: strMês = "Oct"
    Case 11: strMês = "Nov"
    Case 12: strMês = "Dec"
  End Select
  strPattern = "FQ1A ADR " & strMês & " " & Format(Date, "dd yyyy") & " ######.txt"
  
  strDir = Dir(cstrDiretório & "*.txt")
  Do While strDir <> ""
    If LCase(strDir) Like LCase(strPattern) Then
      ret = strDir
      Exit Do
    End If
    strDir = Dir
  Loop
  ret = cstrDiretório & ret
  
  pGetRelatório = ret
End Function

Felipe Costa Gualberto
Microsoft Excel MVP
http://www.ambienteoffice.com.br

 
Postado : 06/05/2014 4:06 pm
(@lucianojr)
Posts: 16
Active Member
Topic starter
 

Obrigado pela resposta Benzadeus.

Só me tira mais algumas dúvidas pois comecei a trabalhar com VBA faz 1 semana.

o caractere # significa q pode ser qualquer valor? é isso?

Pq eu usei parte do seu código e ele está rodando bem...

Porém não importa o arquivo.txt para a aba TXT da minha planilha... ele da erro na linha .Refresh BackgroundQuery:=False (na parte de importação do arquivo.txt)

segue abaixo meu codigo:

Sub CopiarTXT_XML004()

'Copia o relatório do FQ1A para a aba temporária TXT, copia os dados necessários para a aba Base e depois apaga os dados da aba TXT.

Application.ScreenUpdating = False

Dim wksBASE1 As Worksheet
Dim wksBASE As Worksheet
Dim wksTXT As Worksheet
Dim strPattern As String
Dim strMês As String

Set wksBASE = ThisWorkbook.Worksheets("Plan1")
Set wksBASE1 = ThisWorkbook.Worksheets("Formatado")
Set wksTXT = ThisWorkbook.Worksheets("TXT")

'------------------
Select Case Month(Date)
    Case 1: strMês = "Jan"
    Case 2: strMês = "Feb"
    Case 3: strMês = "Mar"
    Case 4: strMês = "Apr"
    Case 5: strMês = "May"
    Case 6: strMês = "Jun"
    Case 7: strMês = "Jul"
    Case 8: strMês = "Aug"
    Case 9: strMês = "Sep"
    Case 10: strMês = "Oct"
    Case 11: strMês = "Nov"
    Case 12: strMês = "Dec"
End Select
strPattern = "FQ 1A ADR " & strMês & " " & Format(Date, "dd yyyy") & " ######.txt"
  
'----------------


    Sheets("TXT").Select
        With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & wksBASE1.Range("O17") & strPattern _
        , Destination:=Range("$A$1"))
        .Name = "FQ 1A ADR May 07 2014 070824"
        .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
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With


wksBASE.Cells(22, 2) = wksTXT.Range("B36") 'VCF Turbina A
wksBASE.Cells(22, 3) = wksTXT.Range("D36") 'VCF Turbina B
wksBASE.Cells(22, 4) = wksTXT.Range("E36") 'VCF Tramo C
    
    Range("A1:N22").Select
    Selection.QueryTable.Delete
    Selection.ClearContents
    Sheets("Plan1").Select
    
    Application.ScreenUpdating = True
End Sub
 
Postado : 07/05/2014 8:22 am
(@lucianojr)
Posts: 16
Active Member
Topic starter
 

eu tinha entendido errado... só troquei uma funcão aqui e funcionou...

no lugar de strDir = Dir(cstrDiretório & "*.txt") eu coloquei strDir = Dir(cstrDiretório & strPattern)

Obrigado

 
Postado : 08/05/2014 8:31 am
(@lucianojr)
Posts: 16
Active Member
Topic starter
 

Desculpe minha ignorância...

A lógica está perfeita.

Obrigado.

 
Postado : 08/05/2014 10:45 am
benzadeus
(@benzadeus)
Posts: 78
Trusted Member
 

Sem problemas, amigo.

o caractere # significa q pode ser qualquer valor? é isso?

Representa qualquer número de 0 a 9.
Veja mais detalhes em: http://www.ambienteoffice.com.br/officevba/sintaxe_do_vba/#operador_like

Felipe Costa Gualberto
Microsoft Excel MVP
http://www.ambienteoffice.com.br

 
Postado : 08/05/2014 5:16 pm