none
COMO CRIAR UM BOTÃO NO VBA EXCEL 2010 PARA LIMPAR CÉLULAS ESPECÍFICAS

    Question

  • Olá pessoal estou com um problema aqui que possivelmente pra alguém do forum com conhecimentos mais avançados em programação VBA Excel seja moleza.

    O problema é o seguinte, eu construi uma planilha, cujo nome Histórico Escolar, funciona na verdade como um cadastro de alunos na escola onde eu trabalho.

    Fiz diversas outras funções automáticas por meio do VBA. No entanto, não estou conseguindo criar um botão que limpe campos específicos da minha planilha. Para fascilitar, ou quem sabe, aumentar o tamanho da questão vou postar aqui os campos ou células de que eu gostaria que fossem limpas quando eu pressionasse o dito botão criado no VBA do Excel.

    As células são:

    G18, AK18, AM18, AS18, F20, AG20, F22, AA22, K25, I28, L31, J34, B45, F82, AI82, (de BA8 até CI8), (de BA9 até CI9), BE11, BA13, CN13, (de BA16 até CI16), e assim por diante.

    Existem outras células para serem limpas após preenchimento, não as colocarei porque este texto passará de todos os limites.

    DETALHE: Todas estas células estão mescladas. Será este o motivo de eu não conseguir?

    Bom, espero ter sido bem sunscinto em minha pergunta!

    Agradeço pela resposta de alguém, obrigado!

    GILDEÃO DIAS


    Sunday, January 13, 2013 11:09 PM

Answers

  • Boa noite Gildeão.

    A forma mais simples que vejo de fazer isso, apesar de não ser muito eficiente, é utilizar o pequeno código abaixo:

    Sub LimparCelulas()
    '
    
    'Descreva aqui todas as células desejadas (entre aspas):
    Celulas = Array("G18", "AK18", "AM18")
    
    For i = 0 To UBound(Celulas)
    
        Range(Celulas(i)).ClearContents
    Next i
    
    End Sub
    

    Digo que não é eficiente porque não há uma lógica no endereço das células, tendo que informá-las manualmente. Mas penso que isso resolve o seu problema.

    Um abraço.


    Filipe Magno

    • Marked as answer by Gildeão Dias Monday, January 14, 2013 11:58 AM
    Monday, January 14, 2013 1:08 AM

All replies

  • Boa noite Gildeão.

    A forma mais simples que vejo de fazer isso, apesar de não ser muito eficiente, é utilizar o pequeno código abaixo:

    Sub LimparCelulas()
    '
    
    'Descreva aqui todas as células desejadas (entre aspas):
    Celulas = Array("G18", "AK18", "AM18")
    
    For i = 0 To UBound(Celulas)
    
        Range(Celulas(i)).ClearContents
    Next i
    
    End Sub
    

    Digo que não é eficiente porque não há uma lógica no endereço das células, tendo que informá-las manualmente. Mas penso que isso resolve o seu problema.

    Um abraço.


    Filipe Magno

    • Marked as answer by Gildeão Dias Monday, January 14, 2013 11:58 AM
    Monday, January 14, 2013 1:08 AM
  • Olá, muito obrigado sr. Filipe Magno pela resolução do meu problema!

    Vou inserir os códigos de que me passaste.

    Qualquer dúvida recorro ao sr.!

    Muito obrigado mais uma vez!]

    GILDEÃO DIAS

    Monday, January 14, 2013 11:58 AM
  • Olá, muito obrigado sr. Filipe Magno pela resolução do meu problema!

    Vou inserir os códigos de que me passaste.

    Qualquer dúvida recorro ao sr.!

    Muito obrigado mais uma vez!]

    GILDEÃO DIAS

    Sr. Filipe Magno inseri o código conforme o senhor postou, no entanto o mesmo erro [Erro em tempo de execução '1004': Não podemos fazer isto com uma célula mesclada]e aponta em amarelo para o seguinte [Range(Celulas(i)).ClearContents].

    Existe uma maneira de corrigir isto?

    Fiz estas operações em uma planilha sem células mescladas e dá certo!

    Muito grato pela ajuda!

    GILDEÃO DIAS.

    Monday, January 14, 2013 5:08 PM
  • Olá Gildeão!

    Primeiramente esqueça o Sr., sou muito novo pra isso (rsrsrs).

    Teste da seguinte forma, por favor:

    Sub LimparCelulas()
    '
    
    Application.ScreenUpdating = False 'Aceleração (se desejado)
    
    
    'Descreva aqui todas as células desejadas (entre aspas):
    Celulas = Array("G18", "AK18", "AM18")
    
    cAtual = ActiveCell.Address
    
    For i = 0 To UBound(Celulas)
    
        Range(Celulas(i)).Select
        Selection.ClearContents
    Next i
    
    Range(cAtual).Select  'Volta à célula anteriormente selecionada
    
    Application.ScreenUpdating = True
    
    End Sub



    Filipe Magno


    • Edited by FilipeMagno Monday, January 14, 2013 5:36 PM Pequena alteração no código.
    Monday, January 14, 2013 5:31 PM
  • Desculpe pelo termo "Sr", pela formalidade em si, é força de costume de minha família.

    Bom, estou quase lá, só não entendi não a parte...

    Range(cAtual).Select  'Volta à célula anteriormente selecionada

    Desculpe, por eu está sendo 'muito burro' com tudo isso, é que [eu sou novato em programação VBA, rsrsrs]

    Monday, January 14, 2013 5:45 PM
  • Boa noite Gildeão!

    Só não tem dúvidas quem nada sabe. Não tem esse de "estár sendo muito burro".

    O motivo de eu adicionar as duas linhas a seguir,

    cAtual = ActiveCell.Address  'Memoriza a célula atual
    
    ...
    
    Range(cAtual).Select  'Volta à célula anteriormente memorizada

    é o seguinte:

    ao executar o 'For', todas as células desejadas são percorridas (Range(Celulas(i)).Select). Isso, às vezes, causa o incoveniente de ter que percorrer manualmente a planilha para retornar ao ponto de visualização anterior à execução da Macro.

    Para contornar isso, gosto de memorizar a seleção atual (antes da execução da Macro) e quando a Macro termina, seleciono essa célula, fazendo com que a rolagem da planilha não precise ser feita. Em geral uso isso sempre. Mas isso é opcional, se não colocar não faz falta alguma!

    Se tiver mais dúvidas, não hesite em perguntar. Só não vou responder se não souber... (rsrsrs).

    Um grande abraço.


    Filipe Magno

    Tuesday, January 15, 2013 12:36 AM
  • Olá Filipe Magno, você deixou-me imensuravelmente mais feliz. Coloquei aqui conforme ensinou-me aí em em cima e deu tudo certinho.

    MEU MUITO OBRIGADO, O MUNDO AINDA É UM BOM LUGAR PORQUE TEMOS BONS AMIGOS PARA NOS ENSINAR...!

    Bom, tenho um questão que iniciei em um outro fórum. Acredito que você possa me ajudar com mais essa dúvida.

    _______________________________________________________________________________________

    O negócio é o seguinte, eu criei uma planilha no excel e para essa planilha eu criei uma tela de login no VBA para que antes que a mesma seja aberta esta tela inicie primeiro para as pessoas que autorizei.

    Tudo isso deu muito certo. No entanto, depois que terminei o trabalho habilitei todas as macros na central de confiabilidade salvei o documento e fiz uma cópia do mesmo e coloquei em um pendrive.

    Resolvi testa a abertura da planilha em um outro computador. Percebi que ao abrir a planilha em outro PC a tela de Login que criei parece não servir pra nada, pois a planilha abre primeiro para pedir para habilitar as macros novamente.

    Isso é muito chato, eu gostaria de saber se há uma maneira de tornar essa habilitação de macros permanente, mesmo que eu faça quantas cópias quiser e abra elas em qualquer computador para abrir minha tela de Login primeiramente e não a planilha com o pedido de habilitação de macros.

    Acredito que exista uma forma de fazer isso por meio do VBA criando um comando para que esse pedido de HABILITAÇÃO DE MACRO seja feito depois que o usuaário iserir seu nome e senha de permissão para abrir o arquivo.

    ________________________________________________________________________________________

    No entanto, um outro amigo me deu as seguintes coordenadas:

    É impossível fazer isso. A melhor sugestão que posso te dar nesse caso é encapsular os logins e senhas dentro do VBA e colocar senha de exibição do projeto VBA ou então Ocultar a planilha que possui os logins e senhas.

    ________________________________________________________________________________________

    De fato, o colega fez a sua parte em mim passa essas informações, porém, mesmo assim boei geral...!

    Você pode me ajudar com isso?

    MAIS UMA VEZ AGRADEÇO PELA PACIÊNCIA E CAMARADAGEM!

    Gildeão Dias.

    Tuesday, January 15, 2013 1:01 AM
  • Obrigado pelas palavras. É um prazer poder ajudar.

    Quanto à sua outra questão, infelizmente não tenho prática com essa parte. Sou autoditada no assunto e vou aprendendo conforme a necessidade. Ainda não precisei usar o bloqueio de código e não sei te orientar adequadamente nesse assunto (também aguardo mais informações para aprender).

    O que posso te dizer, de maneira qualitativa, é o seguinte: A ideia seria ocultar "fortemente" todas as planilhas (de forma que não se possa tornar visível pelos Menus do Excel) e deixar visível apenas uma planilha "limpa" para Login. Ao mesmo tempo é preciso bloquear o código VBA com senha, para impedir acesso ao código.

    Ao "logar", as planilhas se tornariam então visíveis. Dessa forma, caso o usuário não habilite o conteúdo em VB, não será possível visualizar as planilhas.

    Um grande abraço.


    Filipe Magno

    Tuesday, January 15, 2013 1:54 AM
  • Tá ok, Filipe Magno estou muito satisfeito com sua ajuda. Caso você encontre uma solução a respeito desse assunto para mim, pode postar aqui um link para eu ir lá ver se consigo resolver isso.

    No entanto, você sabe me explicar por meio de um exemplo como faço para que ocorra esse evento que você me mostrou aqui?

    __________________________________________________________________________________

    Ao "logar", as planilhas se tornariam então visíveis. Dessa forma, caso o usuário não habilite o conteúdo em VB, não será possível visualizar as planilhas.

    _________________________________________________________________________________

    OUTRA COISA QUE EU GOSTARIA DE LHE PERGUNTAR É SE VOCÊ SABE QUAIS SÃO OS CÓDIGOS PARA EU CRIAR UM BOTÃO SALVAR E SALVAR COMO?

    É que eu vou ocultar a faixa de botões [Rebbon], porém, terei que deixar estas opções de Salvar eSalvar como em algum lugar da planilha para que o usuário salve seu trabalho, ou renomear o mesmo para [Salvar como] em um local de sua preferência.

    Bom, é mais ou menos isso amigo Filipe.

    Fico no aguardo, abraço!

    GILDEÃO DIAS.

    Tuesday, January 15, 2013 11:52 AM
  • Certamente, eu tive essa ideia de ocultar as planilhas, porém não quais são os códigos. Se você tiver como me mostrar um exemplo dos códigos te agradeço amigo.

    OUTRA QUESTÃO:

    Eu gostaria de saber como faço para criar um botão Salvar e Salvar como em um local da planilha já que eu vou ocultar todas as ferramentas da planilha, porém o usuário precisara disponível essas opções para salvar seu trabalho.

    Um forte abraço.

    GILDEÃO DIAS.

    Tuesday, January 15, 2013 12:09 PM
  • Certamente, eu tive essa ideia de ocultar as planilhas, porém não quais são os códigos. Se você tiver como me mostrar um exemplo dos códigos te agradeço amigo.

    OUTRA QUESTÃO:

    Eu gostaria de saber como faço para criar um botão Salvar e Salvar como em um local da planilha já que eu vou ocultar todas as ferramentas da planilha, porém o usuário precisara disponível essas opções para salvar seu trabalho.

    Um forte abraço.

    GILDEÃO DIAS.

    Tuesday, January 15, 2013 12:10 PM
  • Bom dia Gildeão.

    Primeiramente gostaria de sugerir que novas questões sejam postadas em novos tópicos, para melhorara a organização do fórum e para facilitar para os demais usuários.

    Mas aproveitando, seguem exemplos da sua dúvida:

    ActiveWorkbook.Save  'Simples assim!
    
    '---------- xxx -----------
    
    
    fName = Application.GetSaveAsFilename 'Solicita Local e Nome
    
    ActiveWorkbook.SaveAs Filename:= fName
    

    Um grande abraço.


    Filipe Magno

    Tuesday, January 15, 2013 2:24 PM
  • Ao "logar", as planilhas se tornariam então visíveis. Dessa forma, caso o usuário não habilite o conteúdo em VB, não será possível visualizar as planilhas.


    Filipe Magno

     Como eu posso fazer isso?

    Você sabe como ocultar as planilhas?

    Tem hotmail, por favor envie.

    GILDEÃO DIAS.

    Tuesday, January 15, 2013 2:28 PM
  • Respondi essa parte no seu tópico específico:

    http://social.msdn.microsoft.com/Forums/pt-BR/vbapt/thread/b32bd5e9-5ae0-495c-bd67-de53b37adf5c

    Vlw.


    Filipe Magno

    Tuesday, January 15, 2013 2:30 PM
  • Boa noite Gildeão.

    A forma mais simples que vejo de fazer isso, apesar de não ser muito eficiente, é utilizar o pequeno código abaixo:

    Sub LimparCelulas()
    '
    
    'Descreva aqui todas as células desejadas (entre aspas):
    Celulas = Array("G18", "AK18", "AM18")
    
    For i = 0 To UBound(Celulas)
    
        Range(Celulas(i)).ClearContents
    Next i
    
    End Sub

    Digo que não é eficiente porque não há uma lógica no endereço das células, tendo que informá-las manualmente. Mas penso que isso resolve o seu problema.

    Um abraço.


    Filipe Magno

    Filipe, bom dia!!

    Seguindo sua instruções eu consegui tbm usar esse macro, porem na hora de salvar ele da erro e quando abro o arquivo o macro não esta ativo.

    Estou criando um planilha de preços para enviar para meus clientes. Ex- o cliente só digita o código da peça e atraves do procv ja aparece tudo que ele precisa, digita o código "X" ai aparece o preço e a aplicação do item "X".

    Gostaria de criar um botão para o cliente conseguir apagar esse "X" e zerar os campos.

    Friday, August 09, 2013 3:02 PM
  • O código pode ser substituído por:

    Sub fMain()
        Range("G18,AK18,AM18").ClearContents
    End Sub


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

    Monday, August 12, 2013 11:38 PM
  • Olá Felipe queria saber se tem uma maneira de fazer isso em várias planilhas

    Friday, November 08, 2013 7:10 PM
  • 'Todas as planilhas
    Sub fncAllWorksheets()
      Dim wks As Excel.Worksheet
      
      For Each wks In Sheets
        wks.Range("G18,AK18,AM18").ClearContents
      Next wks
    End Sub
    
    'Algumas planilhas
    Sub fncSomeWorksheets()
      Dim wks As Excel.Worksheet
      
      For Each wks In Sheets
        Select Case wks.Name
          Case "Plan1", "Plan2", "Plan3"
            wks.Range("G18,AK18,AM18").ClearContents
        End Select
      Next wks
    End Sub


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

    Sunday, November 10, 2013 9:25 PM