Notifications
Clear all

Bloquear células

4 Posts
2 Usuários
2 Reactions
786 Visualizações
(@boobymcgee)
Posts: 84
Trusted Member
Topic starter
 

Olá.
Prezados, tenho uma planilha, onde preciso que após a inserção do dado em uma célula as outras células adjacentes bloqueiem.

Tentei um loop, mas me perdi na hora que muda a coluna com a informação.

 
Postado : 15/08/2022 10:16 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Experimente:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 8 Then Exit Sub
ActiveSheet.Unprotect ("")
Cells(ActiveCell.Row, 3).Resize(, 6).Locked = ActiveCell.Value <> "": ActiveCell.Locked = False
ActiveSheet.Protect ("")
End Sub

Osvaldo

 
Postado : 15/08/2022 11:41 am
boobymcgee reacted
(@boobymcgee)
Posts: 84
Trusted Member
Topic starter
 

Obrigado @Osvaldo, serviu bem, só acrescentei a linha "ActiveCell.Offset(-1, 0).Activate", pois ao clicar no "Enter" a célula ativa passava a ser a próxima abaixo.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 8 Then Exit Sub
ActiveCell.Offset(-1, 0).Activate
ActiveSheet.Unprotect ("")
Cells(ActiveCell.Row, 3).Resize(, 6).Locked = ActiveCell.Value <> "": ActiveCell.Locked = False
ActiveSheet.Protect ("")
End Sub
 
Postado : 15/08/2022 2:49 pm
(@osvaldomp)
Posts: 857
Prominent Member
 
Postado por: @boobymcgee

... pois ao clicar no "Enter" a célula ativa passava a ser a próxima abaixo.

Só para não deixar dúvidas, se após Enter a célula ativa muda para a célula abaixo é porque o seu Excel está ajustado para isso, e essa mudança da célula ativa nada tem a ver com o código que passei.

Veja em ~~~> Arquivo | Opções | Avançado | Opções de edição.

Então, em lugar de "a célula ativa passava" é mais apropriado afirmar que "a célula ativa passa". 😉 

Nesse caso pode ser utilizado o código abaixo, que dispensa o uso de Activate.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 3 Or Target.Column > 8 Then Exit Sub
ActiveSheet.Unprotect ("")
Cells(ActiveCell.Row - 1, 3).Resize(, 6).Locked = ActiveCell.Offset(-1).Value <> "": ActiveCell.Offset(-1).Locked = False
ActiveSheet.Protect ("")
End Sub

Osvaldo

 
Postado : 15/08/2022 7:19 pm
boobymcgee reacted