Notifications
Clear all

Abrir arquivo mais recente

15 Posts
5 Usuários
0 Reactions
3,047 Visualizações
(@luisangy)
Posts: 21
Eminent Member
Topic starter
 

Bom dia Srs.

Estou com um problema e gostaria da ajuda de vocês. Todos os dias baixo um arquivo com o mesmo nome, ele cai automaticamente na pasta Downloads, porém como tem o mesmo nome, todos dias quando baixa o nome do arquivo muda para + 1. Exemplo:

Relatório.xls
Relatório (1).xls
relatório (2).xls

Tenho uma macro que precisa abrir este arquivo todos dias, porém como o nome muda diariamente, não consigo estabelecer um padrão. Pensei em alguma forma de abrir o arquivo mais recente, tem como fazer isto por VBA?

 
Postado : 10/04/2017 7:49 am
(@romanha)
Posts: 104
Estimable Member
 

Bom dia, Luisangy.

É possível enviar a planilha de exemplo para que possamos entender melhor sua situação?

Se a resposta foi últil, gentileza, Amigo,clique na mãozinha ao lado direito da sua tela. canto superior.

" Aquele que habita no esconderijo do Altissimo, à sombra do Onipotente descansará. Salmos 91:1"

Atenciosamente.

Jason Romanha

 
Postado : 10/04/2017 8:46 am
(@luisangy)
Posts: 21
Eminent Member
Topic starter
 

Boa tarde, Romanha, eu não tenho uma planilha especifica ainda. Apenas criei o código para testes e deparei com esse problema. Segue código:

Sub AttBase()

' Atualizar Base de dados
     Application.DisplayAlerts = False 'desabilite o alerta
     Application.ScreenUpdating = False
     
    Dim wkbOri, wkbDes As Workbook
    Dim wksDes As Worksheet
    Dim GetUserN
    Dim ObjNetwork
    Dim linvazia, linvazia2 As Long
    Dim resultado As VbMsgBoxResult
      
    Set ObjNetwork = CreateObject("WScript.Network")
    GetUserN = ObjNetwork.UserName
    
   'Atribui valor as variveis
     Set wkbDes = Workbooks("Relatório de Produção " & Application.Proper(MonthName(Month(Now))) & " 2017")
     Set wksDes = ThisWorkbook.Worksheets("" & Application.Proper(MonthName(Month(Now))) & " - " & Year(Now) & "")
   'Código aonde busdca meu relatório, no qual baixo todos dias:  
   Set wkbOri = Workbooks.Open("D:Profiles" & GetUserN & "DownloadsVSB_SPC.MP.W06_-_Relatório_Produção_Diário_(Relatório_Gerencial).xlsx")
    

Parei por ai devido ao erro, como o nome não mantem um padrão, dá erro ao executar o comando de abrir.

 
Postado : 10/04/2017 9:18 am
Syrax
(@syrax)
Posts: 160
Estimable Member
 

Supondo que você tenha fornecido todas as informações necessárias no seu post

Veja se isso te ajuda

Sub abrir()
Dim i
i = Dir("C:UsersusernameRelatórioRelatório*.xlsx") ' mude para o caminho onde está o arquivo
If i <> "" And Format(FileDateTime(i), "dd/mm/yyyy") = Format(Date, "dd/mm/yyyy") Then
Workbooks.Open i
Else
MsgBox " Não foi encontrado arquivos na data de hoje"
End If
End Sub

Se essa resposta te ajudou e resolveu o seu problema, clique no "joinha" ao lado de citar, e não esqueça de colocar o tópico como resolvido, clicando no ✓

 
Postado : 10/04/2017 9:19 am
(@luisangy)
Posts: 21
Eminent Member
Topic starter
 

Boa tarde Syrax,
Deu mensagem de erro: "O arquivo não foi localizado"


wkbOri = Dir("D:Profiles" & GetUserN & "DownloadsRelatório*.xlsx")
     If wkbOri <> "" And Format(FileDateTime(i), "dd/mm/yyyy") = Format(Date, "dd/mm/yyyy") Then
     Workbooks.Open wkbOri
    Else
  MsgBox " Não foi encontrado arquivos na data de hoje"
  End If

Creio que seja por conta do nome do arquivo. Conforme eu havia dito, o nome muda todos dias por eu baixar o mesmo arquivo sempre, hoje mesmo o nome estava assim: Relatório (2)
Eu renomeei o nome para apenas relatório e ainda sim deu arquivo nao localizado.

 
Postado : 10/04/2017 10:22 am
Syrax
(@syrax)
Posts: 160
Estimable Member
 

Você se esqueceu de substituir a variável "i" em Filedatetime

Veja se isso te ajuda

o que contém na variável "GetUserN" é o caminho correto?

wkbOri = Dir("D:Profiles" & GetUserN & "DownloadsRelatório*.xlsx")
     If wkbOri <> "" And Format(FileDateTime(wkbOri), "dd/mm/yyyy") = Format(Date, "dd/mm/yyyy") Then
     Workbooks.Open wkbOri
    Else
  MsgBox " Não foi encontrado arquivos na data de hoje"
  End If

Caso mesmo assim não de certo, aperte alt+F11, clique em "Exibir", depois em "Janela variáveis locais"
inicie o código com F8 e veja qual o valor que "wkbOri" assume

Em relação ao nome do arquivo não tem problema, pois usando o "*" no final do assume, ele procura por qualquer arquivo que seja Relatorio (1) ou Relatorio (2) não precisa salvar com outro nome

Se essa resposta te ajudou e resolveu o seu problema, clique no "joinha" ao lado de citar, e não esqueça de colocar o tópico como resolvido, clicando no ✓

 
Postado : 10/04/2017 11:14 am
(@luisangy)
Posts: 21
Eminent Member
Topic starter
 

Copiei o código igual voce mandou, conferi a variavel de user, ela ta certinha.
Fiz o que você disse para verificar a variavel wkbOri, ela ficou exatamente assim: wkbOri : "Relatório.xlsx" : Variant/String
E a mensagem de erro persistiu: "Arquivo não localizado" Ela aparece no IF.

 
Postado : 10/04/2017 11:40 am
Syrax
(@syrax)
Posts: 160
Estimable Member
 

Luisangy,

Assim que você faz o download do arquivo, você salva ele com outro nome ou mesmo modifica o nome?
Poderia enviar a planilha que você está usando para eu dar uma olhada nela?

Fiz uns testes simulando o nome dos arquivos como Relatório (1).xlsx e funcionou

Se essa resposta te ajudou e resolveu o seu problema, clique no "joinha" ao lado de citar, e não esqueça de colocar o tópico como resolvido, clicando no ✓

 
Postado : 10/04/2017 8:43 pm
Basole
(@basole)
Posts: 487
Reputable Member
 

Amigo segue sugestao, veja se consegue adaptar.

Sub Abrir_Arquivo_Mais_Recente()
  Dim Arq As Variant, i As Integer, Caminho As Variant
   
     Caminho = "C:UsersAdminDesktopPasta Teste"  ' ALTERE AQUI O DIRETORIO DO ARQUIVO
    
     Arq = Dir(Caminho)
   
   While (Arq <> "")
     If VBA.InStr(Arq, "Relatorio(") > 0 Then
        i = i + 1
     End If
        Arq = Dir
   Wend
  
        Workbooks.Open Caminho & "Relatorio(" & i & ").xls"
  
End Sub

Click em se a resposta foi util!

 
Postado : 11/04/2017 5:51 am
Syrax
(@syrax)
Posts: 160
Estimable Member
 

Amigo segue sugestao, veja se consegue adaptar.

Sub Abrir_Arquivo_Mais_Recente()
  Dim Arq As Variant, i As Integer, Caminho As Variant
   
     Caminho = "C:UsersAdminDesktopPasta Teste"  ' ALTERE AQUI O DIRETORIO DO ARQUIVO
    
     Arq = Dir(Caminho)
   
   While (Arq <> "")
     If VBA.InStr(Arq, "Relatorio(") > 0 Then
        i = i + 1
     End If
        Arq = Dir
   Wend
  
        Workbooks.Open Caminho & "Relatorio(" & i & ").xls"
  
End Sub

Basole,

Poderia nos dizer como o seu código funciona e como ele pretende abrir o arquivo com a data de hoje?
Fiz uma simulação usando os mesmos nomes que o autor postou
Relatorio (1)
Relatorio (2)

usando arquivos de datas diferentes, e no fim, a variável "Arq" assume o valor ""

Desconsidere a probabilidade da extensão do arquivo .xls para .xlsx não ter sido mudada, pois eu adaptei o código, desconsidere também o fato de ter um espaço entre Relatorio e o número (1)

Se essa resposta te ajudou e resolveu o seu problema, clique no "joinha" ao lado de citar, e não esqueça de colocar o tópico como resolvido, clicando no ✓

 
Postado : 11/04/2017 6:04 am
(@luisangy)
Posts: 21
Eminent Member
Topic starter
 

Basole, aconteceu o que o Syrax comentou, no fim a variável Arq assumiu valor "" e não encontrou a planilha.

 
Postado : 11/04/2017 6:48 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Vamos lá....
A logica e o funcionamento é bem simples meu amigo, levando em consideração que por default o Windows renomeia automaticamente os arquivos com o mesmo nome e atribui uma numeraçao sequencial, entao a variavel i define o valor do ultimo arquivo que o Windows nomeou, por exemplo: i = 3 :"(3)", em seguida abre de acordo com a variavel.

Se os arquivos nao forem renomeados ou deletados, esta logica funcionara pois o autor do topico nao quer abrir o arquivo da data do dia e sim o mais recente ou seja o mais recente renomeado pelo windows.

Agora se deseja algo mais elaborado pode-se usar a propriedade DateLastModified do FileSystemObject.

Sub Abrir_Arquivo_Masi_Recente_1()
    
    Dim FileSys As FileSystemObject
    Dim objFile As File
    Dim myFolder
    Dim strFilename As String
    Dim dteFile As Date
    
    Const myDir As String = "C:UsersAdminDesktopPasta Teste"
    
    Set FileSys = New FileSystemObject
    Set myFolder = FileSys.GetFolder(myDir)
    
    dteFile = DateSerial(1900, 1, 1)
    For Each objFile In myFolder.Files
        If objFile.DateLastModified > dteFile Then
            dteFile = objFile.DateLastModified
            strFilename = objFile.Name
        End If
    Next objFile
    Workbooks.Open myDir & strFilename
            
    Set FileSys = Nothing
    Set myFolder = Nothing
End Sub

* Marque a referencia Microsoft Scripting Runtime

Editado:
Luis Aqui pra min funcionou perfeitamente.
Nesta linha do codigo If VBA.InStr(Arq, "Relatorio(") > 0 Then voce precisa, entre aspas colocar o nome do arquivo corretamente considerando os espaços se existirem, de acordo com o nome do seu arquivo.

Click em se a resposta foi util!

 
Postado : 11/04/2017 7:00 am
(@mprudencio)
Posts: 2749
Famed Member
 

Penso que é mais facil configurar o Google Crome para permitir escolher onde o arquivo sera salvo.

Abra o Navegador > Configurações > Mostrar configurações avançadas> Role a pagina ate Download> Marque Perguntar onde salvar o arquivo antes do Download.

Assim é so dar um nome ao arquivo a cada download e resolvido o problema.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 11/04/2017 7:04 am
(@luisangy)
Posts: 21
Eminent Member
Topic starter
 

Basole, funcionou perfeitemente o último código que você mandou!

Só uma coisa, eu baixo vários arquivos ao mesmo tempo, seu código baixa o mais recente. Pode acontecer do mais recente não ser o relatório que preciso, teria como ter um filtro pelo nome do arquivo também?

MPrudencio, valeu demais pela dica!! Realmente, testei aqui, a forma que você falou também funciona.

 
Postado : 11/04/2017 7:12 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Luis,
Eu imaginei que esses arquivos fossem baixados automaticamente, sem voce poder manipular este salvamento.

Pode acontecer do mais recente não ser o relatório que preciso, teria como ter um filtro pelo nome do arquivo também?

Sim tem como, mais tarde, assim que der um tempinho eu adapto o codigo, com este filtro e a lista dos arquivos.

Click em se a resposta foi util!

 
Postado : 11/04/2017 7:54 am