Notifications
Clear all

Copiar planilhas de outra pasta baseado em uma lista.

5 Posts
2 Usuários
0 Reactions
988 Visualizações
(@danielsafreire)
Posts: 15
Eminent Member
Topic starter
 

Oi galera,

Gostaria da ajuda de vocês pra elaborar uma macro que importe várias planilhas de uma pasta de trabalho base e transfira para uma outra pasta de trabalho baseado em uma lista de códigos relacionados em uma coluna.

Exemplificando:
Supondo que tenho uma pasta de trabalho chamada de BASE.xlsx armazenada no diretório C: ou seja, C:BASE.xlsx
Dentro desta pasta de trabalho tenho 3 planilhas: a 1ª aba chama-se RECIFE, a 2ª aba chama-se NATAL e a 3ª aba chama-se FORTALEZA.

Supondo também que tenho outra pasta de trabalho chamada CIDADES.xlsx armazenada no diretório C: ou seja, C:CIDADES.xlsx
Dentro desta pasta de trabalho tenho 1 planilha chamada LISTA, e na coluna A desta planilha eu preencho os nomes das cidades que eu quero. Então, por exemplo, eu digito nas células A1 e A2 os nomes RECIFE e NATAL respectivamente.

Gostaria que a macro "lesse" esta coluna e importasse da pasta de trabalho BASE.xlsx as planilhas RECIFE e NATAL.

Obrigado desde já.

 
Postado : 07/06/2013 10:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Salve os dois arquivos na mesma pasta(qualquer), inclusive, no caso do arquivo CIDADES, habilitado para Macros (xlsm).
Insira um Módulo e cole o código abaixo.

Faça um teste com arquivos de backup e reporte erros ou inconsistências.

Sub Importar()

Dim pasta As String
Dim i As Integer
Dim f As Integer

pasta = ThisWorkbook.Path
i = 1
f = Sheets("LISTA").Range("A65536").End(xlUp).Row

Workbooks.Open Filename:=pasta & "BASE.xlsx"

Do While i <= f
Windows("CIDADES.xlsm").Activate
guia = Sheets("LISTA").Cells(i, 1).Value
Windows("BASE.xlsx").Activate
Sheets(guia).Copy After:=Workbooks("CIDADES.xlsm").Sheets(i)
Windows("BASE.xlsx").Activate
i = i + 1
Loop
Windows("BASE.xlsx").Activate
ActiveWindow.Close

End Sub

 
Postado : 07/06/2013 11:35 am
(@danielsafreire)
Posts: 15
Eminent Member
Topic starter
 

Edson, muito obrigado pela rápida resposta.
Seu código atingiu a maior parte do meu objetivo, mas se eu digitar, por exemplo, RECIFE na célula A1 e NATAL na célula A3 (pulei uma linha) a macro dá um erro (Erro em tempo de execução '9': subscrito fora do intervalo).
Além disso, baseado neste código, o nome do arquivo CIDADES.xlsm terá que ficar fixo. Gostaria que o código funcionasse com qualquer nome que eu atribua a este arquivo sem ter que alterar no código.
O meu arquivo BASE.xlsx terá sempre esse nome, mas o arquivo CIDADES.xlsm variará.

Obrigado novamente.

 
Postado : 07/06/2013 12:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Testa assim agora, Daniel.

Sub Importar()

Dim pasta As String
Dim i As Integer
Dim f As Integer
Dim j As String
Dim n As Long

j = ThisWorkbook.Name
pasta = ThisWorkbook.Path
i = 1
f = Sheets("LISTA").Range("A65536").End(xlUp).Row

Workbooks.Open Filename:=pasta & "BASE.xlsx"

Do While i <= f
Windows(j).Activate
guia = Sheets("LISTA").Cells(i, 1).Value
n = Sheets.Count
If guia = "" Then
i = i + 1
Else
Windows("BASE.xlsx").Activate
Sheets(guia).Copy After:=Workbooks(j).Sheets(n)
Windows("BASE.xlsx").Activate
i = i + 1
End If
Loop
Windows("BASE.xlsx").Activate
ActiveWindow.Close

End Sub

 
Postado : 07/06/2013 1:17 pm
(@danielsafreire)
Posts: 15
Eminent Member
Topic starter
 

Muitíssimo obrigado Edson. Era isso mesmo que eu queria.

Valeu!

 
Postado : 07/06/2013 1:41 pm