Notifications
Clear all

Bloqueando de células após inserido qualquer valor

5 Posts
2 Usuários
0 Reactions
962 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia.

Estou com dificuldades numa planilha que venho trabalhando (segue anexa). Ela deveria bloquear cada célula que contivesse qualquer valor inserido. As demais células continuariam desbloqueadas até que haja algum conteúdo.
Esta macro deveria controlar essa situação:
-------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range

    ActiveSheet.Unprotect Password:="senha"
    Cells.Locked = False

    On Error Resume Next
    Set rng = Cells.SpecialCells(xlCellTypeFormulas)
    If Err.Number > 0 Then
        Set rng = Cells.SpecialCells(xlCellTypeConstants)
    Else
        Set rng = Union(rng, Cells.SpecialCells(xlCellTypeFormulas))
    End If
    On Error GoTo 0
    
    If Not rng Is Nothing Then rng.Locked = True

    
    If Target.Column = 9 And Cells(Target.Row, 1).Value <> "" Then
    Cells(Target.Row, 10).Value = Str(Now)
    End If

    ActiveSheet.Protect Password:="senha"

End Sub

--------------------------------------------
Agradeço uma ajuda no sentido de verificar porque isso não ocorre efetivamente. Uma vez digitado um valor na célula, a planilha é até bloqueada, porém eu consigo deletar o conteúdo de qualquer célula já preenchida, o que não deveria ocorrer.

* Caso necessite a senha = "senha"

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/08/2018 4:55 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

wwwagner,

Bom dia!

Solicitamos, por gentileza, ao postar códigos VBA, utilizar a ferramenta CODE existente logo acima da caixa de mensagens (quinto botão da esquerda para a direita).

Quanto a sua demanda, veja se é assim.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 22/08/2018 6:04 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Wagner, bom dia.

Obrigado pela ajuda !

Utilizarei a ferramenta CODE nas próximas postagens, realmente não sabia dessa necessidade.

O arquivo que enviou funciona até certo ponto. Ao passar da coluna H para I, ocorre um erro de execução ("não é possível definir a propriedade Locked da classe range"). Após o erro, todas as células que estavam protegidas acabam ficando desprotegidas.
Além disso, no código que você inutilizou (e que estava inicialmente), há uma ação necessário que preciso, que é a marcação de data e hora na coluna J toda vez que for preenchido algo na coluna I.

Obrigado mais uma vez.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/08/2018 6:41 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Ok.

O erro ocorria pelo fato da coluna G está mesclada com a coluna H. Retirei essa mescla dessas colunas uma vez que não há necessidade disso. Para digitar textos mais longos, basta aumentar a largura da coluna.

Com relação a questão da inserção automática da data e hora na célula da coluna J toda vez que for inserido algo em qualquer célula da coluna I da mesma linha, com a retirada da mescla, essas colunas agora passaram a ser a H e a I, respectivamente. Na versão do arquivo anexo, já providenciei para que essa inserção automática ocorra também.

Gostaria apenas de salientar que no seu código original, na verdade, a inserção automática da data e hora na coluna J não se dava quando algo era inserido na coluna I e sim quando algo era inserido na coluna A, conforme pode ver na linha de código abaixo:

'Essa linha diz o seguinte: Se o valor digitado for na coluna I e a Célula A da mesma linha for diferente de vazio...
If Target.Column = 9 And Cells(Target.Row, 1).Value <> "" Then

Desse modo, se for essa a real necessidade (preenchimento da coluna A), você deve modificar a linha (do meu código):

If Target.Column = 8 Then

Para:

If Target.Column = 1 Then

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 22/08/2018 7:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Wagner, perfeito !

Além de todas as coisas que escreveu, o que tiro como ensinamento (e que não tinha esse conhecimento e visão) é o fato de células mescladas serem as responsáveis pelo erro gerado. Apenas deixei deste modo pois previa, num futuro próximo, a inserção de novas colunas pra inserir outras informações; mas isso, claro, pode ser feito de outra forma.

A data está na coluna correta, a que você deixou.

Muito obrigado pela ajuda. Sucesso ! Abraços.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/08/2018 10:39 am