Notifications
Clear all

Copiar conjunto de Planilhas para uma nova pasta de trabalho

4 Posts
2 Usuários
0 Reactions
673 Visualizações
(@celsoaj)
Posts: 2
New Member
Topic starter
 

Boa noite pessoal, estou com um problema que aparentemente consegui resolver. E como não encontrei nada a respeito, vou compartilhar aqui.

O que eu preciso é selecionar em uma pasta de trabalho, algumas planilhas e copia-las para uma nova pasta de trabalho, na pasta principal são aproximadamente 40 planilhas e todo mês tenho que selecionar varias destas e copia-las criando outras 7 pastas de trabalho.

Mandando gravar macros no excel e selecionando as planilhas e copiando ele cria o seguinte código:

'Sheets(Array("Plan2", "Plan3")).Copy

'Porém queria definir quais as planilhas seria copiadas no excel através de um nome definido de células que teriam os nomes das planilhas
exemplo:
'Sheets(Array(intervalo)).Copy
depois
'Sheets(Array(intervalo2)).Copy
....
'Sheets(Array(intervalo3)).Copy
etc...

Só que assim não funciona. O que eu consegui fazer foi o que está no código abaixo e também na planilha em anexo, só que queria saber se tem como alimenta-lo fazendo como acima em forma de array copiando todas as planilhas de uma vez.

Sub salva1()

intervalo1 = "Salvar1"
'aqui chama o módula para copiar, passando os parâmetros
Call Salvar_Planilhas(intervalo1, "Salva1")

End Sub

Sub salva2()


intervalo2 = "Salvar2"
'aqui chama o módulo para copiar e salvar, passando os parâmetros
Call Salvar_Planilhas(intervalo2, "Salva2")


End Sub


Sub Salvar_Planilhas(intervalo, nome_planilha)

Dim Plan_Origem As String
Dim Plan_Destino As String
Dim Caminho As String

'Atribui o nome da Planilha
Caminho = ThisWorkbook.Path
Plan_Origem = ThisWorkbook.Name

'Percorre os itens do intervalo nomeado
For Each P In Range(intervalo)
   
           'Verifica se é o 1° item
           If Plan_Destino = "" Then
           'Cria uma cópia da primeira Planilha
           Sheets(P.Value).Copy
           'Pega o nome da pasta de trabalho criada pelo excel
           Plan_Destino = ActiveWorkbook.Name
           'Volta para a pasta origem
           Windows(Plan_Origem).Activate
           'Após o 1º loop a plan_destino já terá um nome e começara a executar a partir daqui
           Else
           On Error Resume Next
           'copia a segunda planilha do intervalo para a mesma pasta criada na etapa anterior
           Sheets(P.Value).Copy After:=Workbooks(Plan_Destino).Sheets(Workbooks(Plan_Destino).Sheets.Count)
           'volta para a pasta principal para copiar a próxima planilha
           Windows(Plan_Origem).Activate
           End If
'avança para o próximo item
Next P
'ativa a pasta criada para salva-la
Windows(Plan_Destino).Activate
'Salva a nova pasta de trabalho no mesmo diretório da pasta original porém com o nome do intervalo
ActiveWorkbook.SaveAs Filename:=Caminho & "" & nome_planilha & ".xlsx"
'Fecha a pasta de trabalho
ActiveWorkbook.Close

End Sub
 
Postado : 12/07/2014 11:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Você pretende copiar intervalos específicos de varias guias de um Livro (arquivo xls) para outro Livro?

Os intervalos são iguais em todas as guias?

Att

 
Postado : 13/07/2014 6:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tópico cruzado:

http://forum.baboo.com.br/index.php?/to ... try3241047

 
Postado : 13/07/2014 11:53 am
(@celsoaj)
Posts: 2
New Member
Topic starter
 

Quero copiar Plan1, Plan2, Plan3 para uma nova pasta de trabalho (arquivo.xlsx) depois Plan1, Plan4, plan5, plan6 para uma outra nova pasta de trabalho e assim sucessivamente. O nome das planilhas que serão copiadas estarão em uma planilha da pasta de origem, ex: A1: Plan1, A2: Plan2, A3: Plan3, seleciono estas células e Defino um nome, e este nome que usarei no código VBA, ai se futuramente quiser incluir uma planilha neste intervalo fica fácil, e não precisa mecher no código. A planilha que anexei já ta fazendo isso, só que ela faz assim: copia a primeira planilha, volta para a pasta copia a segunda, depois a terceira, etc. Queria selecionar todas do intervalo de uma vez.

 
Postado : 13/07/2014 6:35 pm