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