Compartilhar via

Excluir todas as planilhas com exceção da principal e com confirmação.

Anônima
2011-07-06T06:36:12+00:00

Olá...

Eu tenho um arquivo excel com somente uma planilha, a "01", a qual contém uma macro que cria uma outra planilha semelhante a primeira: "02", "03", "04" e assim por diante...

Estou precisando de outra macro para excluir todas estas planilhas criadas (reinicar o arquivo) com exceção da "01" e após confirmação. Até agora possuo a seguinte macro:

Sub Deleta_todas_menos_a_desejada()

Dim Plan As Worksheet

On Error Resume Next

If MsgBox(("Deseja realmente reiniciar arquivo?"), vbYesNo, "Confirmação") = vbYes Then

Application.DisplayAlerts = False

End If

For Each Plan In Worksheets

If (Plan.Name <> "01") Then

Plan.Delete

End If

Range("D7, D9, D11, D13, D15, C18, D18, E18, G18, H18, C23, D23, E23, H23, C28, E28, M3").Select

        Selection.ClearContents

Next

Application.DisplayAlerts = True

End Sub

Quando a resposta é "sim", tudo funciona que é uma beleza, mas quando a resposta é "não" aparece um alerta para confirmar ou cancelar exclusão de cada planilha, o que se torna incoveniente, pois, haverá casos que posso ter mais de 20 guias criadas.

Alguém saberia me dizer como eu poderia alterar esse código para consertar esta pendência?

Obrigado desde já.

Microsoft 365 e Office | Excel | Para uso doméstico | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

Resposta aceita pelo autor da pergunta

Anônima
2011-07-06T18:00:56+00:00

Complementando também o que falei sobre o On Error Resume Next, a estrutura de tratamento de erro que eu sugiro, especialmente porque você está trabalhando com uma propriedade da aplicação Excel (DisplayAlerts), é esta:

Sub Deleta_todas_menos_a_desejada()

On Error GoTo ErrHandler

'Aqui vai seu código

ExitHere:

Application.DisplayAlerts = True

Exit Sub

ErrHandler:

MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "EstaPasta_de_trabalho-Deleta_todas_menos_a_desejada"

Resume ExitHere

Resume

End Sub

Veja que desta forma, mesmo que ocorra um erro em tempo de execução, a linha que restabelece o DisplayAlerts=True será executada.

Esta resposta foi útil?

0 comentários Sem comentários

7 respostas adicionais

Classificar por: Mais útil
  1. Anônima
    2011-07-07T06:08:21+00:00

    Como eu disse antes... O "Exit Sub" foi suficiente para minha macro.

    Obrigado.

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2011-07-07T06:06:27+00:00

    Luiz Cláudio,

    Da primeira vez que tentei usar o "On Error Go Too ErrHandler" não sei o que houve mas não funcionou.

    Testei pela segunda vez e deu certo, porém o outro código que você me passou é bem mais curto e prático para o que eu quero. Desconhecia o "Exit Sub"... Quebrei tanto a cabeça mas já previa que era algo bem simples. Estou começando a mexer sozinho e com ajuda on line no vba para suprir minhas necessidades profissionais, por isso a dificuldade.

    Obrigado.

    Esta resposta foi útil?

    0 comentários Sem comentários
  3. Anônima
    2011-07-06T14:17:51+00:00

    Bruno,

    você pode simplificar a macro já corrigindo o problema, alterando-a para o conteúdo abaixo:

    Sub Deleta_todas_menos_a_desejada()    Dim Plan As Worksheet    If MsgBox(("Deseja realmente reiniciar arquivo?"), vbYesNo, "Confirmação") = vbYes Then        Application.DisplayAlerts = False        For Each Plan In Worksheets            If (Plan.Name <> "01") Then                Plan.Delete            End If            Range("D7, D9, D11, D13, D15, C18, D18, E18, G18, H18, C23, D23, E23, H23, C28, E28, M3").ClearContents        Next        Application.DisplayAlerts = True    End IfEnd Sub

    Esta resposta foi útil?

    0 comentários Sem comentários
  4. Anônima
    2011-07-06T13:06:55+00:00

    Olá,

    não use o On Error Resume Next, a não ser em casos muito específicos (como validar uma conexão de rede, por exemplo).

    Você não disse qual o comportamento esperado quando se clica em "Não", acredito eu que seja sair do procedimento. Neste caso, faça assim:

    If MsgBox(("Deseja realmente reiniciar arquivo?"), vbYesNo, "Confirmação") = vbYes Then

       Application.DisplayAlerts = False

    Else

       Exit Sub

    End If

    Esta resposta foi útil?

    0 comentários Sem comentários