Ir ao conteúdo
  • Cadastre-se

Excluir "abas" planilhas - VBA


Ir à solução Resolvido por Visitante,

Posts recomendados

Pessoal,

 

Boa tarde !!!

 

Preciso de uma macro para excluir planilhas "abas" do Excel ...

 

Encontrei o tutorial abaixo com uma macro, mas não consegui adapta-lo, porque parece que tem algumas palavras que forma traduzida para português e tenho pouco conhecimento em VBA ...

 

Quem poderia me ajudar a corrigir essa macro ou criar uma nova ...

 

Fico grato pela atenção.

 

Link da planilha com a macro: https://www.sendspace.com/file/gj4mr5

 

Link do tutorial da internet: http://pt.wingwit.com/P/visual-basics-programming/95004.html

 

Sem mais.

Link para o comentário
Compartilhar em outros sites

  • Solução

Wagner, veja se ajuda.

Sub ExcluiPlanilhas()  Dim wsPlan As Worksheet    On Error Resume Next    For Each wsPlan In Worksheets(Array("Plan1", "Plan2", "Plan3"))     Application.DisplayAlerts = False      wsPlan.Delete     Application.DisplayAlerts = True    Next wsPlanEnd Sub

 

Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...

Pessoal,

 

Na mesma linha desse tópico, gostaria de saber se é possível executar um código no Excel, que exclua planilhas de um arquivo, a partir de uma condição em outra planilha.

 

Exemplo:

na coluna A contenha uma lista:

 

1

2

3

4

7

9

 

os nomes das planilhas : 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 

 

Para cada item desta lista, existe uma planilha, porém, pode conforme essa lista sofre uma alteração e alguns deixam de existir, e as planilhas que estiverem sobrando (não tem na lista, ela deverá ser excluída).

 

Muito Obrigado

 

Att..

 

Gilberto

 

 

 

Link para o comentário
Compartilhar em outros sites

@Gilberto_Silva  Considerei a aba Nomes do mesmo arquivo com a coluna (A) dos nomes das planilhas,

 

Sub Macro()
    Dim P   As Worksheet
    Dim R   As Range
    
    Set R = ThisWorkbook.Worksheets("Nomes").[A:A]
    
    For Each P In ThisWorkbook.Worksheets
        If P.Name <> "Nomes" Then
            If R.Find(What:=P.Name, LookAt:=xlWhole) Is Nothing Then
                Application.DisplayAlerts = False
                P.Delete
                Application.DisplayAlerts = True
            End If
        End If
    Next P
End Sub

 

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

 

Experimente:

 

Sub ExcluiPlanilhas()
 Dim k As Long
  Application.DisplayAlerts = False
  For k = 1 To Application.Max([A:A])
   If Application.CountIf([A:A], k) = 0 Then Sheets(CStr(k)).Delete
  Next k
End Sub

 

Link para o comentário
Compartilhar em outros sites

16 horas atrás, osvaldomp disse:

Sub ExcluiPlanilhas() Dim k As Long Application.DisplayAlerts = False For k = 1 To Application.Max([A:A]) If Application.CountIf([A:A], k) = 0 Then Sheets(CStr(k)).Delete Next k End Sub

image.png.f0d6589d230331a4f996fc4f02d1be2e.png

adicionado 1 minuto depois
2 minutos atrás, Gilberto_Silva disse:

image.png.f0d6589d230331a4f996fc4f02d1be2e.png

as planilhas com digito excluiu, a partir de 2 não foram excluidos.

adicionado 12 minutos depois
16 horas atrás, Midori disse:

@Gilberto_Silva  Considerei a aba Nomes do mesmo arquivo com a coluna (A) dos nomes das planilhas,

 


Sub Macro()
    Dim P   As Worksheet
    Dim R   As Range
    
    Set R = ThisWorkbook.Worksheets("Nomes").[A:A]
    
    For Each P In ThisWorkbook.Worksheets
        If P.Name <> "Nomes" Then
            If R.Find(What:=P.Name, LookAt:=xlWhole) Is Nothing Then
                Application.DisplayAlerts = False
                P.Delete
                Application.DisplayAlerts = True
            End If
        End If
    Next P
End Sub

 

Funcionou,muito obrigado.

é possível eu incluir esse codigo com outros dois, para formar um unico, assim eu posso executar todas as funções de uma unica vez?

1) Sub InsereHiperlinks()
 Dim c As Range
  With Range("K6:K" & Cells(Rows.Count, 1).End(3).Row)
   .ClearHyperlinks
   .Font.Underline = xlUnderlineStyleNone
  End With
  For Each c In Range("A6:A" & Cells(Rows.Count, 1).End(3).Row)
   If Evaluate("ISREF('" & (c.Value) & "'!A1)") = True Then
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(c.Row, "K"), Address:="", SubAddress:= _
        "'" & c.Value & "'!A1"
   End If
  Next c
End Sub

 

2) 

Sub CONCILIAR_CONTAS()

 Dim LRd As Long, LRo As Long, c As Range
  Application.ScreenUpdating = False
  On Error Resume Next
  Sheets("BALANCETE").ShowAllData

    Columns("J:J").Select
    Selection.ClearContents

  With Sheets("BALANCETE")
   LRd = .Cells(Rows.Count, 2).End(3).Row
   .Range("J6:J" & LRd).Formula = "=INDIRECT(A6&""!D5"")"
   .Range("J6:J" & LRd).Value = .Range("J6:J" & LRd).Value
  End With
  Application.ScreenUpdating = True
  
  
End Sub

 

3) 

Sub ExcluiPlanilhas()

    Dim P   As Worksheet
    Dim R   As Range
    
    Set R = ThisWorkbook.Worksheets("BALANCETE").[A:A]
    
    For Each P In ThisWorkbook.Worksheets
        If P.Name <> "BALANCETE" Then
            If R.Find(What:=P.Name, LookAt:=xlWhole) Is Nothing Then
                Application.DisplayAlerts = False
                P.Delete
                Application.DisplayAlerts = True
            End If
        End If
    Next P
End Sub

 

 

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Gilberto_Silva disse:

as planilhas com digito excluiu, a partir de 2 não foram excluidos.

Não procede a sua avaliação. O erro não tem relação com a quantidade de dígitos no nome da planilha.

 

21 horas atrás, Gilberto_Silva disse:

... (não tem na lista, ela deverá ser excluída).

O erro ocorreu porque você informou que queria excluir a planilha cujo nome não estivesse na lista, e com base na imagem que você postou, o código tentou excluir a planilha 12, que não está na lista, porém NÃO EXISTE PLANILHA COM O NOME 12 no seu arquivo.

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Midori disse:

@Gilberto_Silva Você pode usar uma Sub para chamar as outras,

 


Sub Executar()
    Call InsereHiperlinks
    Call CONCILIAR_CONTAS
    Call ExcluiPlanilhas
End Sub

 

Muito Obrigado Midori, funcionou, mas eu esqueci de mencionar que existem pelo menos duas planilhas que não deveriam ser excluídas (quando eu executar o "ExcluiPlanilhas", ou seja, preciso inclui "exceto" planilha X e Y, por exemplo, no momento da exclusão, visto que elas não estão na listas na planilha que o código está se apoiando para executar a função.

Essas duas planilhas seria de informações cadastrais e outras informações.

Muito Obrigado e me desculpe desde já pelo equivoco de informação inicial.

 

att.

Gilberto

 

Link para o comentário
Compartilhar em outros sites

@Gilberto_Silva  Acrescentando um parâmetro na Sub ExcluiPlanilhas é possível informar as planilhas que não devem ser excluídas,

 

Sub ExcluiPlanilhas(Exceto As Variant)
    Dim P   As Worksheet
    Dim R   As Range
    
    Set R = ThisWorkbook.Worksheets("BALANCETE").[A:A]

    For Each P In ThisWorkbook.Worksheets
        If R.Find(What:=P.Name, LookAt:=xlWhole) Is Nothing Then
            If UBound(Filter(Exceto, P.Name, , vbTextCompare)) = -1 Then
                Application.DisplayAlerts = False
                P.Delete
                Application.DisplayAlerts = True
            End If
        End If
    Next P
End Sub

 

Quando chamar a sub informe os nomes das planilhas, p.ex.

 

Call ExcluiPlanilhas(Array("Balancete,X,Y"))

 

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

  • Membro VIP

@Midori

 

Para responder use a janela de resposta que fica logo abaixo da última resposta.

Só use citar quando realmente for necessário, senão polui o fórum sem sem necessidade.

 

Você também está esquecendo de clicar em Curtir nas respostas das pessoas que estão tentando te ajudar.

 

[]s

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

@Midori

 

Na pratica estou fazendo alguma coisa errada rsrs..

 

As planilhas que não serão excluídas são:

Base de Dados, Controle de Conciliação, COLAR BALANCETE (CSV) e BALANCETE 

Logo eu informei no código da seguinte maneira:

 

  If UBound(Filter(Exceto, P.Base de Dados, P.Controle de Conciliação, P.COLAR BALANCETE (CSV), P.BALANCETE, vbTextCompare)) = -1 Then

 

Não sei onde estou errando.

 

 

 

Sub ExcluiPlanilhas()
    Dim P   As Worksheet
    Dim R   As Range
    
    Set R = ThisWorkbook.Worksheets("BALANCETE").[A:A]

    For Each P In ThisWorkbook.Worksheets
        If R.Find(What:=P.Name, LookAt:=xlWhole) Is Nothing Then
            If UBound(Filter(Exceto, P.Name, vbTextCompare)) = -1 Then
                Application.DisplayAlerts = False
                P.Delete
                Application.DisplayAlerts = True
            End If
        End If
    Next P
End Sub

 

 

Link para o comentário
Compartilhar em outros sites

@Gilberto_Silva Você não fez como eu expliquei no último post.

 

Veja que eu modifiquei a Sub ExcluiPlanilhas, agora ela tem um parâmetro que espera um array com os nomes das planilhas.

 

14 horas atrás, Gilberto_Silva disse:

If UBound(Filter(Exceto, P.Base de Dados, P.Controle de Conciliação, P.COLAR BALANCETE (CSV), P.BALANCETE, vbTextCompare)) = -1 Then

 

E assim não tem como rodar, a função Filter tem parâmetros predefinidos, veja a sintaxe dessa função:

 

Filter(sourcearray, match, [ include, [ compare ]])

 

Quando usei essa função passei Exceto para sourcearray, P.Name para match e vbTextCompare para compare.

 

Use a última Sub que postei, não precisa alterar basta passar os nomes das planilhas como argumento da função assim,

 

Call ExcluiPlanilhas(Array("Base de Dados,Controle de Conciliação,COLAR BALANCETE (CSV),BALANCETE"))

 

 

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...