Notifications
Clear all

Backup de determinadas planilhas - Parâmetro para Array

8 Posts
4 Usuários
0 Reactions
1,299 Visualizações
(@ateix2003)
Posts: 3
New Member
Topic starter
 

Quero fazer backup de determinadas planilhas de um arquivo.

Sub Backup_Planilhas_determinadas()
Sheets(Array("Pagamento", "Combustível").Copy
ActiveWorkbook.SaveAs “C:Backup_Segurança.xls”
ActiveWorkbook.Close
End Sub

Mas como o número de planilhas é grande e vai crescendo mensalmente, precisaria mandar a lista de planilhas como parâmetro.

Lista de planilhas = "Plan1", "Plan2", "Plan3" ... "PlanX"

Sheets(Array(Lista_planilhas).Copy

Contudo não consegui com que o Array recebesse o parâmetro, sempre dá erro. Há algum modo de fazer isso? Ou outra solução para o meu caso?

Obrigado.

 
Postado : 14/06/2016 7:11 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Já tentou assim?

Sub Backup_Planilhas_determinadas()
    Sheets(Array("Pagamento", "Combustível", "Plan1", "Plan2", "Plan3")).Copy
    ActiveWorkbook.SaveAs "C:Backup_Segurança.xls"
    ActiveWorkbook.Close
End Sub

Não testado!!!
Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 14/06/2016 8:10 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Bem vindo ao fórum, Ateix2003

Especificamente quanto à sua dificuldade com o Array:
Lista_Planilhas = Array("Planilha1", "Planilha2", "Planilha3") 'Se vc for declará-la antes, Lista_Planilhas é uma variável tipo Variant.
Sheets(Lista_Planilhas).Copy

Quero fazer backup de determinadas planilhas de um arquivo.
...
Mas como o número de planilhas é grande e vai crescendo mensalmente...

As planilhas que restam sem ser copiadas são muitas? Se for esse o caso, não seria melhor copiar todas e, antes de salvar como backup excluir as desnecessárias?
Para copiar todas:
Sheets.Copy

Para excluir uma delas:
Application.DisplayAlerts = False
Worksheets("PlanilhaN").Delete
Application.DisplayAlerts = True

... Ou outra solução para o meu caso?

Como não sabemos como está estruturada sua pasta de trabalho fica mais complicado, mas vc pode anexar com dados fictícios para análise (como vc é recém-chegado no fórum, leia antes as regras e recomendações de como fazer isto).

 
Postado : 14/06/2016 8:18 am
(@edcronos2)
Posts: 346
Reputable Member
 

não sei se entendi muito bem mas vc pode tentar assim

esse é para chamar a rotina de gravação

Sub GravaAbas()
    Call Backup_Planilhas_determinadas("Plan1", "Plan6", "Plan3")
End Sub


Sub Backup_Planilhas_determinadas(ParamArray Nomes_abas() As Variant)
    Sheets(Nomes_abas).Copy
    ActiveWorkbook.SaveAs "E:Backup_Segurança.xls"
    ActiveWorkbook.Close
End Sub

mas se vc quiser pegar uma lista da planilha tem que fazer um loop na range para adicionar no array "acho eu"

 
Postado : 14/06/2016 9:19 am
(@ateix2003)
Posts: 3
New Member
Topic starter
 

Caio no mesmo problema anterior, quando tento parametrizar minha lista de planilhas.

Sub GravaAbas2()
lista = Worksheets("Parametros").Range("LISTA").Value
Call Backup_Planilhas_determinadas(lista)
End Sub

Sub Backup_Planilhas_determinadas(ParamArray Nomes_abas() As Variant)
Sheets(Nomes_abas).Copy
ActiveWorkbook.SaveAs "C:Backup_Segurança.xls"
ActiveWorkbook.Close
End Sub

O meu desejo é, quando inserir uma nova planilha no arquivo não ter que mudar a macro para que a nova planilha entre no backup. No máximo o usuário digitaria o nome da nova planilha em uma planilha de parâmetros, então eu montaria a lista dinamicamente e mandaria pra macro.

 
Postado : 14/06/2016 12:37 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Mesmo acrescentando essa linha?

ThisWorkbook.Sheets.Copy After:=Workbooks(1).Worksheets(Workbooks(1).Worksheets.Count)

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 14/06/2016 12:49 pm
(@ateix2003)
Posts: 3
New Member
Topic starter
 

Resolvi do seguinte modo:

Dim Planilhas

numTotal = x 'nº total das planilhas que farei backup

ReDim Planilhas(1 To numTotal)

For i = 1 To numTotal
Planilhas(i) = "Plani" & i
Next i

Sheets(Planilhas).Copy

Dessa forma eu posso acrescentar uma planilha e em uma célula coloco o número total de planilhas para o backup. Desse modo não preciso alterar a macro.

Obrigado a todos.

 
Postado : 14/06/2016 1:57 pm
(@edcronos2)
Posts: 346
Reputable Member
 

como falei precisa fazer um loop para pegar os valores na planilha
isso pq o array para entrar no sheets tem que ter base zero e ter apenas 1 dimensão
ranges e arrays de planilha tem base 1 e são bidimensionais
fora que tem que ser nomes validos de aba

sem fazer uma verificação de nomes validos seria mais ou menos isso

Sub GravaAbas()
    pl = Worksheets("Parametros").Range("LISTA").Value2
    ct = UBound(pl, 2)
    lt = UBound(pl, 1)
    ReDim ListPL(0 To ct * lt)
    n = 0
    For l = 1 To lt
        For c = 1 To ct
            If pl(l, c) <> "" Then
                ListPL(n) = pl(l, c)
                n = n + 1
            End If
        Next
    Next
    ReDim Preserve ListPL(0 To n - 1)
    Call Backup_Planilhas_determinadas(ListPL)
End Sub


Sub Backup_Planilhas_determinadas(Nomes_abas() As Variant)
    Sheets(Nomes_abas).Copy
    ActiveWorkbook.SaveAs "E:Backup_Segurança.xls"
    ActiveWorkbook.Close
End Sub
 
Postado : 14/06/2016 2:05 pm