Ir ao conteúdo

Posts recomendados

Postado

Alguem poderia me ajudar com o  seguinte caso ?

 Com o código abaixo eu salvo um arquivo excel, em uma determinada pasta.

 

     Dim filePathName As String     filePathName = rootPath1 & "\" & "Hardware Plan" & ".xlsm"     If Dir(filePathName) = "" Then         ActiveWorkbook.SaveCopyAs filePathName     Else         filePathName = rootPath1 & "\" & "Hardware Plan" & "_" & Format(Now(), "yyyymmwwddhhmmss") & ".xlsm"         ActiveWorkbook.SaveCopyAs filePathName     End If

 

Depois com um outro arquivo eu tenho que que abrir esse arquivo mais atual salvo mas não estou conseguindo fazer isso.

Poderiam me ajudar com um codigo que abre a planilha mais atual (filePathName = rootPath1 & "\" & "Hardware Plan" & "_" & Format(Now(), "yyyymmwwddhhmmss") & ".xlsm") dentro da pasta?

 

Tambem, em um agendamento que tenho preciso ir até esse arquivo que está aberto e fechar, mas ele vai estar com o nome variado, não tenho ideia como fazer.

 

Obrigado pessoal !

Postado

Segue sugestao e exemplo para adaptar ao seu cenario e ambiente

 

Sub AbrirArquivoMaisRecente()
    Dim sFile  As String
    Dim sUFile As String
    Dim sPath  As String
    Dim dDLmd  As Date
    Dim dUdDate As Date
    
    sPath = "C:\Users\Documents\" '*ALTER AQUI O DIRETORIO DOS ARQ.*
   
    If VBA.Right(sPath, 1) <> "\" Then sPath = sPath & "\"
    sFile = VBA.Dir(sPath & "*.xls", VBA.vbNormal)
    If VBA.Len(sFile) = 0 Then
        MsgBox "Nenhum arquivo foi encontrado!!!...", 48, "Atencao!!"
        Exit Sub
    End If
    Do While VBA.Len(sFile) > 0
     If VBA.Left(sFile, 14) = "Hardware Plan_" Then
        dDLmd = VBA.FileDateTime(sPath & sFile)
        If dDLmd > dUdDate Then
            sUFile = sFile
            dUdDate = dDLmd
        End If
        End If
        sFile = VBA.Dir
    Loop
   If sUFile <> "" Then Workbooks.Open sPath & sUFile
End Sub

 

Postado

@Basole

 Levando em consideração o código abaixo em junção ao código que você propos, a String sUFile está ficando vazio na ultima parte do loop !

 Fiz a depuração e não está funcionando, não abre nada por essa string ficar vazio !

 

 

 Dim PathTgt As Variant
                                    
                                        PathTgt = ano & "\" & mes1 & ". " & mes & "\W" & semana & "\" & dia       ' ex   =   '2021/1. JANEIRO/W2/01
                                    
        
                                                            Dim sFile  As String
                                                            Dim sUFile As String
                                                            Dim sPath  As String
                                                            Dim dDLmd  As Date
                                                            Dim dUdDate As Date
                                                            
                                                            sPath = "\\105.103.12.249\OQC\11. PLANOS DIÁRIOS\3. PAINEL DE DEMANDA\" & PathTgt
                                                            
                                                            If VBA.Right(sPath, 1) <> "\" Then sPath = sPath & "\"
                                                             sFile = VBA.Dir(sPath & "*.xlsm", VBA.vbNormal)
                                                             If VBA.Len(sFile) = 0 Then
                                                             
                                                             Exit Sub
                                                            End If
                                                            Do While VBA.Len(sFile) > 0
                                                             If VBA.Left(sFile, 14) = "Painel Demanda_" Then
                                                              dDLmd = VBA.FileDateTime(sPath & sFile)
                                                              If dDLmd > dUdDate Then
                                                               sUFile = sFile
                                                               dUdDate = dDLmd
                                                              End If
                                                             End If
                                                              sFile = VBA.Dir
                                                            Loop
                                                            
                                                            If sUFile <> "" Then Workbooks.Open sPath & sUFile
                                        

 

Postado

No seu exemplo anterior voce indicou que parte do nome do arquivo tinha: "Hardware Plan_".

E agora esta diferente. 

Altere a linha abaixo no codigo no seu codigo

 

 If VBA.Left(sFile, 15) = "Painel Demanda_" Then

 

Postado

Minha sugestao e usar o exemplo que postei para verificar o mais recente arquivo.

Feito isso, use a rotina abaixo para fechar 

 

Application.DisplayAlerts = False
   Workbooks(sUFile).Close savechanges:=True ' Salva arquivo
Application.DisplayAlerts = True

 

Postado

@Basole

   Não me expressei direto...

   O codigo abaixo é um agendamento, abre o arquivo (sUFile) as 6hs e deve fechar o mesmo que está aberto as 23hs.

   AbreArquivo = 6hs (o que você me ajudou com o sUFile

  FechaArquivo = 23hs (preciso burscar o arquivo com o mesmo nome do sUFile)

 

  Seria u

 

Sub executa()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
  
    Dim dayWeek As Integer
    dayWeek = Weekday(Date)

    If Not dayWeek = 6 Or dayWeek = 7 Then
        scheduleTime = nightTime
        If CInt(Hour(Now)) < nightTime Then ' Se ainda não é 23h
             Call scheduleVBA(scheduleTime) ' agenda execução para 23h
             Call AbreArquivo.AbrirPainel
             Exit Sub ' não tem motivo pra continuar... sai da macro
             
         Else ' Agora é 23h
             Call scheduleVBA(scheduleTime, stopSchedule)
             Call FechaArquivo.FechaPainel
         End If
    End If
    
    'agenda execução para 6h
    scheduleTime = morningTime
    Call scheduleVBA(scheduleTime)
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

 

entendeu?

Postado

Experimente declarar a variavel sUFile, fora das subs, no topo do modulo:

Public sUFile As String  ' (* Retire esta variavel da Sub, para nao dar erros.)

 

Desta forma o valor da variavel permancerá na variavel, quando for fechar o arquivo.

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!