Notifications
Clear all

Abrir planilha mais recente e copiar dados dela

5 Posts
3 Usuários
0 Reactions
1,659 Visualizações
(@trollv)
Posts: 0
New Member
Topic starter
 

Boa tarde, estou com uma duvida, fiz esse código para abrir planilha mais recente e pegar os dados dela, porém ele está copiando os dados da planilha onde está a macro, o que eu estou errando?

Sub AbreMaisRecente() 
    Dim arqSys As FileSystemObject 
    Dim objArq As File 
    Dim minhaPasta 
    Dim Arquivo As File 
    Dim nomeArq As String 
    Dim dataArq As Date 
    Dim lngLastCol As Long 
    'Dim wkbDes As Workbook 
    'Dim wbOri As Workbook 
    Const Diret As String = "c:Pasta" 
    Set arqSys = New FileSystemObject 
    Set minhaPasta = arqSys.GetFolder(Diret) 
    dataArq = DateSerial(1900, 1, 1) 
    For Each objArq In minhaPasta.Files 
    If objArq.DateLastModified > dataArq _ 
    And objArq.Name Like "*.xl*" Then 
    dataArq = objArq.DateLastModified 
    nomeArq = objArq 
    End If 
    Next objArq 
    Workbooks.Open nomeArq 
    Set arqSys = Nothing 
    Set minhaPasta = Nothing 
    On Error Resume Next 
    Set wbOri = Workbooks(objArq) 
    Set wbDest = Workbooks("Planilha para aonde eu quero copiar") 
    If wbDest Is Nothing Then 
    Set wbDest = Workbooks.Open("c:Planilha para onde eu quero copiar") 
    On Error GoTo 0 
    End If 
     ThisWorkbook.Sheets("Plan1").Range("A1:A32").Copy _ 
        wbDest.Sheets("Plan1").Range("A1:A32") 
    Application.DisplayAlerts = False 
End Sub 
 
Postado : 19/09/2017 8:52 pm
(@leandroxtr)
Posts: 0
New Member
 

Onde está "ThisWorkbook.Sheets" você precisa colocar a variável da pasta correta, pois o ThisWorkbook não é uma função muito confiável quando se trabalha com mais de uma pasta de trabalho.

Tente aí e dê o FeedBack.

 
Postado : 20/09/2017 6:14 am
(@trollv)
Posts: 0
New Member
Topic starter
 

Então, eu já fiz isso usando o wbOri que está setado ali como a variável da planilha mais recente que abre, porém não deu certo. Estou definindo corretamente?

 
Postado : 20/09/2017 11:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pelo que entendi, você está trabalahndo com 3 Arquivos diferentes:
O primeiro onde executa a rotina,
O segundo o Arquivo de Origem, e
O terceiro, o arquivo de destino.

Se for isto, veja se a rotina abaixo ajuda.

Vale ressaltar que, se o arquivo que está executando a macro estiver na mesma pasta onde irá fazer a verificação de data mais recente ele sempre será o arquivo mais recente, então ele não pode estar na mesma pasta, ou temos de tratar na rotina para ignora-lo.

Não esqueça de ajustar os Caminhos e nomes de arquivos na rotina.

Sub AbreMaisRecenteMauro()
    Dim arqSys As FileSystemObject
    Dim objArq As File
    Dim minhaPasta
    Dim Arquivo As File
    Dim nomeArqOrigem As String
    Dim dataArq As Date
    Dim lngLastCol As Long
   
   Dim wkbDes As Workbook
   Dim wbOri As Workbook
    
    'Definido na constante o local onde temos os arquivos modificados
    Const Diret As String = "c:Pasta"
    
    Set arqSys = New FileSystemObject
    
    Set minhaPasta = arqSys.GetFolder(Diret)
    
    dataArq = DateSerial(1900, 1, 1)
    
    'Se o arquivo que está executando a macro estiver na mesma pasta ele será o
    'mais recente
    'Faz a verificação e abre o mais recente
    For Each objArq In minhaPasta.Files
        If objArq.DateLastModified > dataArq And objArq.Name Like "*.xl*" Then
            dataArq = objArq.DateLastModified
            nomeArqOrigem = objArq
        End If
    Next objArq
    
    Workbooks.Open nomeArqOrigem
    
    'Retorna somente o nome do arquivo de origem
    nomeArqOrigem = Mid([nomeArqOrigem], InStrRev([nomeArqOrigem], "") + 1)
    
    'Define o arquivo de origem
    Set wbOri = Workbooks(nomeArqOrigem)
    
    Set arqSys = Nothing
    
    Set minhaPasta = Nothing
    
    On Error Resume Next
    'Set wbDest = Workbooks("c:Planilha para onde eu quero copiarNomeArqDestino.xlsx")
    
    If wbDest Is Nothing Then
        Set wbDest = Workbooks.Open("c:Planilha para onde eu quero copiarNomeArqDestino.xlsx")
        
        On Error GoTo 0
    End If
    
    wbOri.Sheets("Plan1").Range("A1:A32").Copy _
    wbDest.Sheets("Plan1").Range("A1:A32")
    
    Application.DisplayAlerts = False
    
End Sub

[]s

 
Postado : 20/09/2017 1:26 pm
(@trollv)
Posts: 0
New Member
Topic starter
 

Perfeito!! Muito obrigado!!

 
Postado : 20/09/2017 2:02 pm