Ir ao conteúdo

Excluir "abas" planilhas - VBA


Ir à solução Resolvido por Visitante,

Posts recomendados

Postado

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.

  • Solução
Postado

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

 

  • 5 anos depois...
Postado

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

 

 

 

Postado

@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
Postado

 

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

 

Postado
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

 

 

 

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

 

Postado
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

 

Postado

@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
  • Membro VIP
Postado

@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
Postado

@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

 

 

Postado

@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"))

 

 

  • 5 meses depois...
Postado

Galera, seguindo o tópico excluir aba! Eu tenho uma planilha onde são criados abas aleatoriamente sempre que surge um novo registro de venda. enfim, tem algum código para eu selecionar alguma determinada aba para ser excluída?

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!