Ir ao conteúdo
  • Cadastre-se

Salvar pasta separadamente VBA


Posts recomendados

Bom dia Galera,

    Consegui na internet um código para salvar as pastas (aba) de um arquivo que tem +- 30 pastas (aba), só que o código começa a gravar a partir da primeira pasta (aba), eu preciso saber se tem como começar a partir de uma pasta (aba) que eu selecione, exemplo:

plan1, plan2, plan3, plan4, plan5......, preciso que comece a salvar a partir da plan3 em diante.

código extraído  do site https://www.tomasvasquez.com.br/blog/tag/excal

Public Sub SplitSheetsToWorkbook()
    On Error GoTo TrataErro
    'variáveis
    Dim newBook As Workbook
    Dim sheet As Worksheet
    Dim i As Byte
    'Desativa os avisos e atualiação da tela
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sheet In ThisWorkbook.Worksheets
        'cria uma nova pasta de trabalho:
        Set newBook = Application.Workbooks.Add
        'copia a planilha
        sheet.Copy Before:=newBook.Sheets(1)
        'remove as outras
        For i = 2 To newBook.Worksheets.Count
            newBook.Worksheets(2).Delete
        Next i
        'salva o arquivo
        newBook.SaveAs Replace(ThisWorkbook.FullName, ThisWorkbook.Name, vbNullString) & sheet.Name & ".xlsx"
        newBook.Close
    Next sheet
 TrataSaida:
    'Reativa os avisos e atualiação da tela
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    'zera as variáveis
    Set newBook = Nothing
    Set sheet = Nothing
    MsgBox "Feito!"
    Exit Sub
 TrataErro:
    MsgBox Err.Description, vbCritical, "Erro"
    GoTo TrataSaida
End Sub

Link para o comentário
Compartilhar em outros sites

Em 30/08/2017 às 10:12, Basole disse:

Coloque uma condição, antes da linha que cria uma nova pasta de trabalho: 

Ex.: 


If Not sheet.Name = Sheets(" * nome da sua Plan1").Name And Not sheet.Name = Sheets(" * nome da sua Plan2").Name Then

 

Bom dia e obrigado pela resposta, só que não consegui rodar, no meu caso eu tenho umas 300 planilhas e as que não quero gravar separadamente são: Plan2 (C.Custo), Plan6 (Balancete), Plan7 (Plano de Contas) e Plan229 (Razão), estou definindo via SET as planilhas como A,B,C e D, para caso que haja alteração no nome não trave o processo.

Como eu trataria esta situação.

obrigado mais uma vez.

image.thumb.png.073fe4c1cee4664a65524ed48099fa64.png

image.png

Link para o comentário
Compartilhar em outros sites

Bom vamos la,

1º voce já mudou o enunciado do seu primeiro post, era a partir da plan3 e agora a exceção para 4 abas, ou seja, já esta diferente do que voce colocou.

2º É sempre aconselhável enviar um exemplo com alguns dados do que imagens do arquivo, para que possamos entender e analisar melhor.

3º Analisando através das imagens, chego a conclusão que voce não declarou as variáveis A,B,C,D e ainda referenciou-as erradamente na condição.

 

Vamos as alterações....

    Dim A       As Worksheet
    Dim B       As Worksheet
    Dim C       As Worksheet
    Dim D       As Worksheet
    
    Set A = Plan2
    Set B = Plan6
    Set C = Plan7
    Set D = Plan229

For Each sheet In ThisWorkbook.Worksheets
      ' Exceções para respect. abas:   
     If Not sheet.Name = A.Name And Not sheet.Name = B.Name And _
        Not sheet.Name = C.Name And Not sheet.Name = D.Name Then
         'cria uma nova pasta de trabalho:
        Set newBook = Application.Workbooks.Add
         'copia a planilha
        sheet.Copy Before:=newBook.Sheets(1)
         'remove as outras
        For i = 2 To newBook.Worksheets.Count
            newBook.Worksheets(2).Delete
        Next i
         'salva o arquivo
        newBook.SaveAs Replace(ThisWorkbook.FullName, ThisWorkbook.Name, vbNullString) & sheet.Name & ".xlsx"
        newBook.Close
      
     End If
    
   Next sheet

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

11 minutos atrás, FSoares.FCS disse:

Ok, não foi bem claro na primeira mensagem do post, peço lhe perdão....

Como sou iniciante no VBA, e se houver outra necessidade de incluir planilha que não venha a ser salva separadamente, é só eu ir colocando o END NOT? 

 

Tem outras formas de fazer isso dinamicamente, mas como voce disse que esta iniciando no vba, é aconselhavel fazer desta forma:

And Not sheet.Name = E.Name

ou utilizando <> (diferente)

And sheet.Name <> E.Name

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!