Notifications
Clear all

VBA - Como bloquear células após preenchimento obrigatório ?

17 Posts
3 Usuários
0 Reactions
4,326 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá,

Bom dia.

Possuo uma planilha onde determinadas células precisam ser preenchidas pelo usuário. Após os preenchimento de todas essas células, os valores não devem ser alterados ou excluídos.

Encontrei na internet um código que faz essa tarefa de bloqueio, só que de forma muito rígida. Ocorre que se o valor preenchido for errado, só pode ser alterado com "senha" do código, pois o bloqueio é automático.

Tentei usar na minha planilha, mas causava muita dificuldade, pois a cada preenchimento errado tinha que inserir a senha. A idéia é que, como existe uma obrigatoriedade para o preenchimento de determinadas células, então o bloqueio somente ocorra caso todas as células sejam preenchidas e ainda com confirmação do usuário.

O intervalo vai de A2 até I2, esse é o intervalo a ser preenchido e também bloqueado após a célula I2 ser preenchida. O preenchimento da célula I2 deve disparar a solicitação de confirmação do usuário. Caso "sim", bloqueia o intervalo A2:I2, caso "não", não bloqueia. Isso permitirá corrigir algum valor antes de bloquear.

Em anexo tem o código que utilizo e que faz o bloqueio de qualquer célula preenchida automaticamente.

O intervalo de toda a planilha é cerca de 3000 linhas.

Obrigado.

 
Postado : 25/05/2016 8:23 am
(@osvaldomp)
Posts: 858
Prominent Member
 

Segue uma sugestão:
Ao clicar com o direito na célula bloqueada que se deseja editar, o código sugerido abaixo exibirá uma "ImputBox" pedindo a senha.
Se a senha inserida estiver correta, será desbloqueada somente a célula ativa, e a planilha será mantida protegida.

Se quiser testar acrescente o código abaixo no módulo da planilha (mantenha o outro código lá).

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 Dim strS As String
  Cancel = True
  strS = InputBox("digite a senha")
   If strS = "" Or strS <> "senha" Then Exit Sub
    ActiveSheet.Protect "senha", UserInterfaceOnly:=True
    Target.Locked = False
End Sub

opção - se em lugar de desbloquear somente a célula ativa você quiser desbloquear o intervalo 'An:In',
substitua esta linha

Target.Locked = False

por esta

Range(Cells(Target.Row, 1), Cells(Target.Row, 9)).Locked = False

obs. lembrando que para impedir o livre acesso à senha por qualquer usuário você deverá bloquear o Projeto VBA

Osvaldo

 
Postado : 27/05/2016 12:10 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Ok Oswaldomp,

Tudo solucionado com perfeição! Muito obrigado!

 
Postado : 27/05/2016 1:30 pm
Página 2 / 2