Ir ao conteúdo
  • Cadastre-se
cliffpk

Excel Botão para limpar planilha, ignorando as celulas bloqueadas

Recommended Posts

Amigos, boa tarde.

Atualmente tenho um botão que limpa as células da minha planilha, o problema é que entre uma célula ou outra tenho algumas células bloqueadas. O excel tenta limpar as células e, por ter células bloqueadas entre elas, apresenta erro.

Gostaria de saber como posso adaptar a função VBA para ignorar as células que apresentam bloqueio.

Muito obrigado, abraços!

Sub Limpar_celulas()
Senha = "1234"
resposta = InputBox("Digite a senha para continuar.")
If resposta <> Senha Then
MsgBox "Senha incorreta.", vbCritical, "Atenção!"
Exit Sub 'Não continuar a macro
End If
Sheets("Resumo Geral").Range("C4:C5").ClearContents
Sheets("Resumo Geral").Range("C7:C11").ClearContents
Sheets("Resumo Geral").Range("C14:C16").ClearContents
Sheets("Resumo Geral").Range("C20:C21").ClearContents
Sheets("Resumo Geral").Range("D26:D30").ClearContents
Sheets("Resumo Financeiro").Range("E4:E15").ClearContents
Sheets("Resumo OC").Range("C8:C16").ClearContents
Sheets("Resumo OC").Range("D8:D16").ClearContents
Sheets("Notas Fiscais").Range("B3:I200").ClearContents
Sheets("Ordens de Compra").Range("A3:G200").ClearContents
Sheets("Medições").Range("A3:B17").ClearContents
Sheets("Medições").Range("D3:H17").ClearContents
Sheets("Cronograma").Range("E38:N90").ClearContents

For Each xWs In Application.ActiveWorkbook.Sheets
    For Each xComment In xWs.Comments
        xComment.Delete
    Next
Next
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, cliffpk disse:

Atualmente tenho um botão que limpa as células da minha planilha, ..

 

Limpa as células de 7 planilhas.😉


 

Sub Limpar_celulas()
Senha = "1234"
resposta = InputBox("Digite a senha para continuar.")
If resposta <> Senha Then
MsgBox "Senha incorreta.", vbCritical, "Atenção!"
Exit Sub 'Não continuar a macro
End If

Sheets("Resumo Geral").Protect "SuaSenha", userinterfaceonly:=True
Sheets("Resumo Geral").Range("C4:C5,C7:C11,C14:C16,C20:C21,D26:D30").ClearContents

Sheets("Resumo Financeiro").Protect "SuaSenha", userinterfaceonly:=True
Sheets("Resumo Financeiro").Range("E4:E15").ClearContents

Sheets("Resumo OC").Protect "SuaSenha", userinterfaceonly:=True
Sheets("Resumo OC").Range("C8:C16,D8:D16").ClearContents

Sheets("Notas Fiscais").Protect "SuaSenha", userinterfaceonly:=True
Sheets("Notas Fiscais").Range("B3:I200").ClearContents

Sheets("Ordens de Compra").Protect "SuaSenha", userinterfaceonly:=True
Sheets("Ordens de Compra").Range("A3:G200").ClearContents

Sheets("Medições").Protect "SuaSenha", userinterfaceonly:=True
Sheets("Medições").Range("A3:B17,D3:H17").ClearContents

Sheets("Cronograma").Protect "SuaSenha", userinterfaceonly:=True
Sheets("Cronograma").Range("E38:N90").ClearContents

 For Each xWs In ActiveWorkbook.Worksheets
  For Each xComment In xWs.Comments
   xComment.Delete
  Next
 Next
End Sub

obs. se as planilhas estão protegidas com senha então substitua no código todas as ocorrências de SuaSenha pela senha de cada planilha, se não, remova esta parte ["SuaSenha",] de todas as ocorrências.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@osvaldomp, fiz dessa forma e o que aconteceu foi que as células bloqueadas foram apagadas, ao invés de apresentar erro.

Como as minhas planilhas não tem senha, deixei o código da seguinte forma:

Sub Limpar_celulas()
Senha = "1234"
resposta = InputBox("Digite a senha para continuar.")
If resposta <> Senha Then
MsgBox "Senha incorreta.", vbCritical, "Atenção!"
Exit Sub 'Não continuar a macro
End If

Sheets("Resumo Geral").Protect userinterfaceonly:=True
Sheets("Resumo Geral").Range("C4:C5,C7:C11,C14:C16,C20:C21,D26:D30").ClearContents

Sheets("Resumo Financeiro").Protect userinterfaceonly:=True
Sheets("Resumo Financeiro").Range("E4:E15").ClearContents

Sheets("Resumo OC").Protect userinterfaceonly:=True
Sheets("Resumo OC").Range("C8:C16,D8:D16").ClearContents

Sheets("Notas Fiscais").Protect userinterfaceonly:=True
Sheets("Notas Fiscais").Range("B3:I200").ClearContents

Sheets("Ordens de Compra").Protect userinterfaceonly:=True
Sheets("Ordens de Compra").Range("A3:G200").ClearContents

Sheets("Medições").Protect userinterfaceonly:=True
Sheets("Medições").Range("A3:B17,D3:H17").ClearContents

Sheets("Cronograma").Protect userinterfaceonly:=True
Sheets("Cronograma").Range("E38:N90").ClearContents

 For Each xWs In ActiveWorkbook.Worksheets
  For Each xComment In xWs.Comments
   xComment.Delete
  Next
 Next
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

No código que eu sugeri eu mantive os intervalos que estão no seu código original, pois são os intervalos que o seu código tenta limpar.

 

Se não for isso então informe quais os intervalos que você deseja limpar em cada planilha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@osvaldomp

Os intervalos estão certos, a questão é que se houver uma célula bloqueada dentro desses intervalos ela também é apagada.

A ideia que tive é que a mesma seria ignorada, não gerando erro e não sendo limpa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade a planilha é um modelo de controle de notas fiscais à ser utilizado em diferentes situações por uma equipe, então algumas linha serão acrescentadas, editadas... caso fosse possível simplesmente ignorar as celulas bloqueadas, eu poderia manter as celulas da estrutura da planilha bloqueadas e englobar uma quantidade de células maior no botão de limpar as planilhas, de forma que ele realmente limpasse toda a planilha, englobando mesmo as possíveis adições de linhas.

De qualquer forma muito obrigado..

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 horas atrás, osvaldomp disse:

Entendi. E você não sabe quais estão bloqueadas ou quais não estão bloqueadas?

 

5 horas atrás, cliffpk disse:

... então algumas linha serão acrescentadas, editadas...

 

Considerando que você não informou se sabe quais células estão bloqueadas/não bloqueadas e considerando o seu comentário acima, me parece que as células são bloqueadas continuamente e por isso você não tem a informação e a sua ideia é que o próprio código faça a busca para descobrir e não limpar as bloqueadas. Seria isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×