Página 1 de 1

Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 28 Jun 2018 às 13:01
por Spinhosay
Boa Tarde Queridos!

Criei uma rotina de formatação e modificação de objetos através de uma macro salva na minha "Pasta de Trabalho Pessoal de Macros", inclusive programei para ao final da execução salvar e fechar o documento.

Meu problema é que necessito executar essa mesma macro em mais de 300 arquivos. Executar um por um levaria um dia.

Preciso de sugestão de como fazer um loop e executar a mesma macro em todos arquivos da mesma pasta.

Alguma idéia?

Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 28 Jun 2018 às 13:24
por gfranco
Boa tarde.
Sugiro postar um modelo de sua planilha (com dados fictícios mas mesma estrutura)
Poste um modelo em excel (não uma imagem) de preferencia com uma demonstração manual do resultado pretendido.
Para anexar o arquivo, clique em +Resposta e localize a opção abaixo da janela de digitação de mensagens.

Re: Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 28 Jun 2018 às 13:40
por babdallas
Veja se ajuda
Código: Selecionar todos
Sub LooparArquivos()
    Dim objFSO      As Object
    Dim vrtFile     As Variant
    Dim strCaminho  As String
    
    'Caminho da pasta de trabalho
    strCaminho = "C:\Users\CF19\Desktop"
    
    'Instanciando o objeto FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    'Loop pelos arquivos da pasta
    For Each vrtFile In objFSO.GetFolder(strCaminho).Files
        If Right(vrtFile.Name, 4) = "xlsm" Then
            'Coloque seu código
        End If
    Next vrtFile

End Subcode]

Re: Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 28 Jun 2018 às 13:53
por osvaldomp
Não abandone os seus tópicos ;)
viewtopic.php?f=12&t=7128&p=34068#p34068
Código: Selecionar todos
Sub AbreArquivos()
 Dim pasta As String, wb As Workbook, ws As Worksheet, sArq As String
  pasta = "C:\MinhaPasta\" '~~~> coloque o nome da pasta que contém os arquivos
  sArq = Dir(pasta & "*.xlsm")
   Do While sArq <> ""
    Set wb = Workbooks.Open(pasta & sArq)
      Set ws = wb.Sheets("NomePlanilha") '~~~> coloque o nome da planilha em que o seu código irá rodar
      ' chame aqui o seu código
     wb.Close True
     sArq = Dir
   Loop
End Sub

Re: Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 02 Jul 2018 às 10:44
por Spinhosay
babdallas escreveu:Veja se ajuda
Código: Selecionar todos
Sub LooparArquivos()
    Dim objFSO      As Object
    Dim vrtFile     As Variant
    Dim strCaminho  As String
    
    'Caminho da pasta de trabalho
    strCaminho = "C:\Users\CF19\Desktop"
    
    'Instanciando o objeto FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    'Loop pelos arquivos da pasta
    For Each vrtFile In objFSO.GetFolder(strCaminho).Files
        If Right(vrtFile.Name, 4) = "xlsm" Then
            'Coloque seu código
        End If
    Next vrtFile

End Subcode][/quote]

Bom Dia babdallas

funcionou perfeitamente bem. O loop realizou meu script em todas minhas planilhas abertas. Porém, os arquivos necessitam estar abertos para que esse loop funcione.

A solução é inviável pra mim pois hj preciso rodá-los em 750 arquivos.

Re: Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 02 Jul 2018 às 11:02
por Spinhosay
osvaldomp escreveu:Não abandone os seus tópicos ;)
viewtopic.php?f=12&t=7128&p=34068#p34068
Código: Selecionar todos
Sub AbreArquivos()
 Dim pasta As String, wb As Workbook, ws As Worksheet, sArq As String
  pasta = "C:\MinhaPasta\" '~~~> coloque o nome da pasta que contém os arquivos
  sArq = Dir(pasta & "*.xlsm")
   Do While sArq <> ""
    Set wb = Workbooks.Open(pasta & sArq)
      Set ws = wb.Sheets("NomePlanilha") '~~~> coloque o nome da planilha em que o seu código irá rodar
      ' chame aqui o seu código
     wb.Close True
     sArq = Dir
   Loop
End Sub
Olá Osvaldo

Não sei porque seu código não funcionou. Mas também não apareceu erro nenhum.

Creio que seja por causa dessa linha:
Código: Selecionar todos
Set ws = wb.Sheets("NomePlanilha") '~~~> coloque o nome da planilha em que o seu código irá rodar
não informei o nome da planilha pois cada arquivo tem um nome diferente e a macro executa alteração em 5 abas diferentes em cada arquivo.

Re: Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 02 Jul 2018 às 12:00
por babdallas
Tente assim
Código: Selecionar todos
Sub LooparArquivos()
    Dim objFSO      As Object
    Dim vrtFile     As Variant
    Dim strCaminho  As String
    Dim wbkFile     As Workbook
    
    'Caminho da pasta de trabalho
    strCaminho = "C:\MinhaPasta"
    
    'Instanciando o objeto FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    'Loop pelos arquivos da pasta
    For Each vrtFile In objFSO.GetFolder(strCaminho).Files
        If Right(vrtFile.Name, 4) = "xlsm" Then
            Set wbkFile = Workbooks.Open(Filename:=vrtFile.Path)
            
            'Coloque aqui seu código
            
            wbkFile.Close SaveChanges:=True
        End If
    Next vrtFile

End Sub

Re: Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 02 Jul 2018 às 15:13
por Spinhosay
babdallas escreveu:Tente assim
Código: Selecionar todos
Sub LooparArquivos()
    Dim objFSO      As Object
    Dim vrtFile     As Variant
    Dim strCaminho  As String
    Dim wbkFile     As Workbook
    
    'Caminho da pasta de trabalho
    strCaminho = "C:\MinhaPasta"
    
    'Instanciando o objeto FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    'Loop pelos arquivos da pasta
    For Each vrtFile In objFSO.GetFolder(strCaminho).Files
        If Right(vrtFile.Name, 4) = "xlsm" Then
            Set wbkFile = Workbooks.Open(Filename:=vrtFile.Path)
            
            'Coloque aqui seu código
            
            wbkFile.Close SaveChanges:=True
        End If
    Next vrtFile

End Sub
Showwwwwwww irmão!

Em 10 min seu código me ajudou a executar a macro em 750 arquivos e nem precisei abri-los. Tenho o resto da semana livre :D ia ter que fazer as modificações uma a uma.

Agora, pra ir pro 10! Gostaria que ao executar sua macro, ele me perguntasse onde (em que pasta) estão os arquivos, a a partir daí executasse automaticamente.

Abaixo cito um código que faz isso. Essa macro unifica todos arquivos na mesma planilha. Mas não sei qual parte do código devo isolar para que essa sua macro me solicite o local primeiramente:
Código: Selecionar todos
'UnificarPlanilhas Macro
Sub lsUnificarPlanilhas()
    On Error GoTo Sair

  Dim lUltimaColunaAtiva As Long
  Dim lUltimaLinhaAtiva As Long
  Dim lRng As Range
  Dim sPath As String
  Dim fName As String
  Dim lNomeWB As String
  Dim lIPlan As Integer
  Dim lUltimaLinhaPlanDestino As Long
   
  PlanilhaDestino = ThisWorkbook.Name
 
  sPath = Localizar_Caminho
 
  sName = Dir(sPath & "\*.xl*")
 
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual
   
  Do While sName <> ""
        fName = sPath & "\" & sName
        Workbooks.Open Filename:=fName, UpdateLinks:=False
        
        lNomeWB = ActiveWorkbook.Name
        
        For lIPlan = 1 To ActiveWorkbook.Sheets.Count
            Workbooks(lNomeWB).Worksheets(lIPlan).Activate
        
            lUltimaLinhaAtiva = Cells(Rows.Count, 1).End(xlUp).Row
            lUltimaColunaAtiva = ActiveSheet.Cells(1, 5000).End(xlToLeft).Column
            
            Set lRng = Range(Cells(1, lUltimaColunaAtiva).Address)
            
            Range("A" & 1 & ":" & gfLetraColuna(lRng) & lUltimaLinhaAtiva).Select
            Selection.Copy
            
            Workbooks(PlanilhaDestino).Worksheets(1).Activate
            
            lUltimaLinhaPlanDestino = Cells(Rows.Count, 1).End(xlUp).Row
            
            If lUltimaLinhaPlanDestino > 1 Then
                lUltimaLinhaPlanDestino = Cells(Rows.Count, 1).End(xlUp).Row + 1
            End If
            
            Range("A" & lUltimaLinhaPlanDestino).Select
            
            ActiveSheet.Paste
            Application.CutCopyMode = False
        Next lIPlan
        
        Workbooks(lNomeWB).Close SaveChanges:=False
        sName = Dir()
  Loop
  
  MsgBox "Planilhas unificadas!"

Sair:
  Application.ScreenUpdating = True
  Application.EnableEvents = True
  Application.Calculation = xlCalculationAutomatic
End Sub

-------

Function gfLetraColuna(ByVal rng As Range) As String
    Dim lTexto() As String
    
    lTexto = Split(rng.Address, "$")
    
    gfLetraColuna = lTexto(1)
End Function

----------
Public Function Localizar_Caminho() As String

    Dim strCaminho As String
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        
        'Permitir mais de uma pasta
        .AllowMultiSelect = False
        
        'Mostrar janela
        .Show
        
        If .SelectedItems.Count > 0 Then
            strCaminho = .SelectedItems(1)
        End If
    
    End With
    
    'Atribuir caminho a variável
    Localizar_Caminho = strCaminho

End Function


Grato!

Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 02 Jul 2018 às 16:36
por mprudencio
No codigo que vc enviou tem uma função que permite vc escolher o local de onde salvar os arquivos.


Ela tem o nome de Localizar_Caminho.

No codigo do babdallas troque esta linha

strCaminho = "C:\MinhaPasta"

Por esta

strCaminho = Localizar_Caminho

Cole a função Localizar_Caminho do codigo que vc indicou em um modulo.

Re: Aplicar macro em vários arquivos *.xlsm da mesma pasta

Enviado: 02 Jul 2018 às 17:20
por Spinhosay
mprudencio escreveu:No codigo que vc enviou tem uma função que permite vc escolher o local de onde salvar os arquivos.


Ela tem o nome de Localizar_Caminho.

No codigo do babdallas troque esta linha

strCaminho = "C:\MinhaPasta"

Por esta

strCaminho = Localizar_Caminho

Cole a função Localizar_Caminho do codigo que vc indicou em um modulo.
Perfeito, Deu Certo!
Muitíssimo Obrigado! Pessoal aqui do fórum é muito fera mesmo!