none
Limpar Planilha e Manter Fórmula RRS feed

  • Pergunta

  • Fala Galera, boa noite.

    Sou novo por aqui até mesmo pq comecei a mexer recentemente com excel e vba .

    Preciso criar uma macro ou codificar um botao em vba que limpe os dados da minha planilha mas mantenha a formulas nas células.

    Já testei alguns códigos que pesquisei que apenas limpam a planilha com todas as formulas, mas preciso das formulas pois é uma planilha diaria que devo enviar.


    Fabricio Proença
    segunda-feira, 29 de novembro de 2010 20:34

Respostas

  • Sub ApagarValores()
      Cells.SpecialCells(xlCellTypeConstants).ClearContents
    End Sub

    No entanto, se você executar essa rotina mais de uma vez, um erro será gerado porque o método SpecialCells irá falhar uma vez que não existem mais constantes. Para evitar que isso aconteça:

    Sub ApagarValores()
      On Error Resume Next
      Cells.SpecialCells(xlCellTypeConstants).ClearContents
      On Error GoTo 0
    End Sub

     


    Felipe Costa Gualberto http://www.ambienteoffice.com.br
    terça-feira, 30 de novembro de 2010 00:12
    Moderador

Todas as Respostas

  • Sub ApagarValores()
      Cells.SpecialCells(xlCellTypeConstants).ClearContents
    End Sub

    No entanto, se você executar essa rotina mais de uma vez, um erro será gerado porque o método SpecialCells irá falhar uma vez que não existem mais constantes. Para evitar que isso aconteça:

    Sub ApagarValores()
      On Error Resume Next
      Cells.SpecialCells(xlCellTypeConstants).ClearContents
      On Error GoTo 0
    End Sub

     


    Felipe Costa Gualberto http://www.ambienteoffice.com.br
    terça-feira, 30 de novembro de 2010 00:12
    Moderador
  • Fala Felipe, blza ??

    Brother, funcionou o comando, está blza, agora veja se consegue me ajudar num caso da mesma planilha.

    Nesta planilha tenho informaçoes de dias uteis e os dias uteis corridos, e também um link escrito menu principal que volta para a primeira sheet.

    Ao executar este comando ele limpa a planilha mantém as formulas mas limpa inclusive estes campos de dias corridos e dias uteis q deixo preenchido em todas as planilhas e altero dia a dia e também apaga o botao de pagina principal, como posso adicionar neste código uma exceçao para nao limpar estes campos ??

     

    Obrigado e vlw pela força. foi rapidao.

    Post Marcado como lido.


    Fabricio Proença
    terça-feira, 30 de novembro de 2010 13:40
  • Sub ApagarValores()
     
      Dim rngExceção As Range
      Dim rngTudo As Range
      Dim rng As Range
      
      'Insira aqui os Ranges que não serão excluídos.
      Set rngExceção = Union(Range("A10"), Range("B5:D3"), Range("F:F"), Range("2:2"))
      'A linha abaixo é equivalente ao comando acima:
      'Set rngExceção = Union(Cells(10, 1), Range("B5:D3"), Columns("F"), Rows(2))
      
      On Error Resume Next
      Set rngTudo = Cells.SpecialCells(xlCellTypeConstants)
      On Error GoTo 0
      
      If rngTudo Is Nothing Then Exit Sub
      
      For Each rng In rngTudo
        If Intersect(rng, rngExceção) Is Nothing Then
          rng.ClearContents
        End If
      Next rng
      
    End Sub

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Sugerido como Resposta Lau Souza quarta-feira, 8 de maio de 2013 20:35
    • Não Sugerido como Resposta Lau Souza quarta-feira, 8 de maio de 2013 20:36
    quarta-feira, 1 de dezembro de 2010 00:18
    Moderador
  • Como faço para esta macro ser executada em diversas worksheets dentro de um workbook.
    quarta-feira, 8 de maio de 2013 20:37
  • Sub ApagarValores()
     
      Dim rngExceção As Range
      Dim rngTudo As Range
      Dim rng As Range
      Dim wks As Worksheet '
      
      For Each wks In Worksheets
        'Insira aqui os Ranges que não serão excluídos.
        Set rngExceção = Union(wks.Range("A10"), wks.Range("B5:D3"), wks.Range("F:F"), wks.Range("2:2"))
        'A linha abaixo é equivalente ao comando acima:
        'Set rngExceção = Union(wks.Cells(10, 1), wks.Range("B5:D3"), wks.Columns("F"), wks.Rows(2))
        
        On Error Resume Next
        Set rngTudo = wks.Cells.SpecialCells(xlCellTypeConstants)
        On Error GoTo 0
        
        If rngTudo Is Nothing Then Exit Sub
        
        For Each rng In rngTudo
          If Intersect(rng, rngExceção) Is Nothing Then
            rng.ClearContents
          End If
        Next rng
        Next wks
      
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 8 de maio de 2013 23:51
    Moderador
  • No entanto, se você executar essa rotina mais de uma vez, um erro será gerado porque o método SpecialCells irá falhar uma vez que não existem mais constantes. Para evitar que isso aconteça:

    Sub ApagarValores()
      On Error Resume Next
      Cells.SpecialCells(xlCellTypeConstants).ClearContents
      On Error GoTo 0
    End Sub

    -------------------------------------------------------------------------------------------------

    Bom Dia,

    Como eu faço para esta macro executar em todas as sub planilha.

    Exemplo:

    nome da planilha: Afinação 05-2013

                                             Saída
                                             Retorno
                                             Devolução
                                             Retorno Devolução

    Poderia por favor, me dar uma dica de como eu faço para que esta macro limpe todas as sub planilhas.

    Grato pela ajuda.

    Lau Souza


    quinta-feira, 9 de maio de 2013 13:22
  • Não estou entendendo suas postagens. Por que está utilizando o balão de citação? Escreva claramente o que deseja fazer porque lendo sua última postagem, o código que apresentei anteriormente já faz o que é solicitado.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 9 de maio de 2013 22:08
    Moderador
  • Bom dia Benzadeus

    A planilha é composta com as seguintes guias:

    - Tabela de Preço

    - Saídas

    - Retorno

    - Devolução

    - Retorno Devolução

    - Resumo Geral

    Criei um botão para executar esta macro, quando ela é executada limpa a digitação apenas na guia que coloquei o botão as demais permanece inalterada, gostaria se for possível que esta macro limpe a digitação das guias: Saídas; Retorno; Devolução e Retorno Devolução.

    Se achar necessário posso enviar a planilha no teu e-mail

    Grato

    Lau Souza

    sexta-feira, 10 de maio de 2013 14:23
  • Veja o código:

    Sub ApagarValores()
     
      Dim rngExceção As Range
      Dim rngTudo As Range
      Dim rng As Range
      Dim wks As Worksheet '
      
        For Each wks In Worksheets
            'Insira aqui os intervalos que não serão excluídos.
            Set rngExceção = Union(wks.Range("A10"), wks.Range("B5:D3"), wks.Range("F:F"), wks.Range("2:2"))
            'A linha abaixo é equivalente ao comando acima:
            'Set rngExceção = Union(wks.Cells(10, 1), wks.Range("B5:D3"), wks.Columns("F"), wks.Rows(2))
            
            On Error Resume Next
            Set rngTudo = wks.Cells.SpecialCells(xlCellTypeConstants)
            On Error GoTo 0
            
            If Not rngTudo Is Nothing Then
                For Each rng In rngTudo
                  If Intersect(rng, rngExceção) Is Nothing Then
                    rng.ClearContents
                  End If
                Next rng
            End If
        Next wks
    End Sub

    Fique atento à linha:

            'Insira aqui os intervalos que não serão excluídos.
            Set rngExceção = Union(wks.Range("A10"), wks.Range("B5:D3"), wks.Range("F:F"), wks.Range("2:2"))
    
    E altere os valores para os intervalos que você deseja que não sejam apagados. Favor testar e retornar.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 11 de maio de 2013 11:58
    Moderador
  • Bom dia Benzadeus

    Obrigado pela sua atenção, infelizmente não consegui fazer este código funcionar e isto se deve ao meu pouco conhecimento de VBA, é que comecei há poucos dias a estudar esta linguagem e sou leigo em programação, como tenho varias planilhas vi que com o VBA é possível automatizar minhas planilhas e fazer com que elas fique mais amigável, mesmo assim não perdi a esperança de um dia encontrar um código que limpe toda a digitação da planilha e suas guias.

    Que Deus abençoe você e que dê sempre paciência para ajudar os leigos.

    Att.

    Lau Souza

    email: laursouza @ hotmail.com

    • Editado Lau Souza segunda-feira, 13 de maio de 2013 12:50
    segunda-feira, 13 de maio de 2013 12:48
  • Vamos tentar resolver seu problema.

    Tente:

    Sub fApagarValores()
      Dim wks As Worksheet
      
        On Error Resume Next
        For Each wks In Worksheets
            wks.Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Next wks
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 13 de maio de 2013 23:12
    Moderador
  • Bom dia Benzadeus

    O código funcionou perfeitamente. O problema são as exceções que não estou conseguindo fazer.

    Estou lhe passando o link da planilha que estou tentando limpar a digitação, acho que fica mais fácil de vc entender. As partes que pintei de amarelo (guias, células, linhas e coluna) são as exceções que não pode apagar.

    Mais uma vez obrigado por tua ajuda.

    Att.

    Lau Souza

    Link para baixar o arquivo: http: //depositfiles .org /files /ofsf12s5e

    terça-feira, 14 de maio de 2013 12:54
  • As rotinas anteriores não funcionariam porque elas assumem que em todas as planilhas os intervalos exceções são sempre os mesmos, e seu caso é diferente. Experimente:

    Sub fApagarValores()
        With ThisWorkbook
            On Error Resume Next
            .Worksheets("Saída").Columns("D:AH").SpecialCells(xlCellTypeConstants).ClearContents
            .Worksheets("Retorno").Range("E6:CC193").SpecialCells(xlCellTypeConstants).ClearContents
        End With
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 15 de maio de 2013 00:37
    Moderador
  • Boa Tarde Benzadeus,

    Muito obrigado por tua ajuda, a macro funcionou sem problemas.

    Pelos testes que fiz à macro do inicio desta lista, funciona se eu fizer um botão em cada guia e executar individualmente, não é o ideal, mais pelo menos não vou ter que mudar a macro toda a vez que eu acrescentar uma linha na planilha.

    Já tentei todo jeitinho brasileiro que conheço mais não consegui burlar.

    Mesmo assim tua ajuda foi muito importante para mim, que Deus lhe proteja sempre.

    Att.

    Lau Souza

    quinta-feira, 16 de maio de 2013 17:48
  • "mais pelo menos não vou ter que mudar a macro toda a vez que eu acrescentar uma linha na planilha"

    Para contornar essa situação, por que não utiliza um intervalo bastante grande? Por exemplo, ao invés de escrever intervalos como Range("E6:CC193"), escreva Range("E6:CC1000")


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 16 de maio de 2013 23:37
    Moderador
  • Felipe, 

    estou com o problema parecido, só que são células diferentes, como faço para rodar a macro e não travar?

    Range("P7").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Range("L8:L30").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("N7:N31").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("P8:P31").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("G34:G39").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("J34:J39").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("L39").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("E41").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("I41").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("M41").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents
        Range("L32").Select
        Cells.SpecialCells(xlCellTypeConstants).ClearContents

    segunda-feira, 18 de maio de 2015 18:13
  • Sub Main()
        Range("P7").PasteSpecial Paste:=xlPasteValues
        
        On Error Resume Next
        Range("L8:L30,N7:N31,P8:P31,G34:G39,J34:J39,L39,E41,I41,M41,L32").SpecialCells(xlCellTypeConstants, 23).ClearContents
        On Error GoTo 0
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 18 de maio de 2015 21:26
    Moderador