Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
FSoares.FCS

Salvar pasta separadamente VBA

Recommended Posts

FSoares.FCS    0

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Basole    484

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
FSoares.FCS    0
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Basole    484

    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    FSoares.FCS    0
  • Autor do tópico
  • 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? 

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Basole    484
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    FSoares.FCS    0
  • Autor do tópico
  • Muito obrigado, que Deus lhe abençoe me ajudou muito.....

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×