Notifications
Clear all

Bloquear e desbloquear célula pelo VBA

11 Posts
3 Usuários
0 Reactions
1,566 Visualizações
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Boa noite !

Tenho seguinte código abaixo, quando for ON vai inserir a formula e quando for OFF vai ficar vazio, pois até aqui funcionando corretamente.

Só que eu quero quando for ON a celula D fica bloqueada, se não pode colocar o cursor e acontecer conforme a imagem
e quando for OFF desbloquear a celula D para inserir valor manualmente.

Obrigado desde já !

If Target.Address <> "$C$1" Then Exit Sub
  If Target.Value = "ON" Then
  
    Sheets("Plan1").Range("D" & Linha).FormulaLocal = "=SE(C11=0;"""";RTD(""empresaA.rtd"";;C11;$D$10))"
   
  ElseIf Target.Value = "OFF" Then
  
    Sheets("Plan1").Range("D" & Linha).Value = ""
    
  End If
 
Postado : 12/10/2016 4:35 pm
(@mprudencio)
Posts: 0
New Member
 

Insira essa linha de codigo no seu codigo para proteger

With ActiveSheet
.Protect
.EnableSelection = xlUnlockedCells
End With

Este para desproteger.

activesheet.unprotect

 
Postado : 12/10/2016 5:25 pm
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Não é isso, apenas bloquear e desbloquear celula D

Tem que ser do algo tipo

If Target.Address <> "$C$1" Then Exit Sub
  If Target.Value = "ON" Then
 
    Sheets("Plan1").Range("D" & Linha).FormulaLocal = "=SE(C11=0;"""";RTD(""empresaA.rtd"";;C11;$D$10))"   .Locked = True
   
  ElseIf Target.Value = "OFF" Then
 
    Sheets("Plan1").Range("D" & Linha).Value = "" .Locked = False
   
  End If
 
Postado : 12/10/2016 6:15 pm
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Vai no aba Time e coloca na C1 ON e depois vai na aba Lista na D1 e vai aparecer a formula, pois essa celula tem que bloquear quando aparece a formula.
Ao voltar na aba Time e colocar OFF, aba Lista D1 tem que desbloquear a celula, assim posso digitar.

 
Postado : 12/10/2016 7:56 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tente assim e veja se é isto:

Lembrando que o Bloqueio de Celulas só tem efeito se a aba estiver protegida.

Private Sub Worksheet_Activate()

    Application.EnableEvents = False
    Application.ScreenUpdating = False
    
    ActiveSheet.Unprotect
    
    If Sheets("Time").Range("$C$1").Value = "ON" Then
        
        With Range("D1")
           .FormulaLocal = "=SE(C1=0;"""";RTD(""empresa.rtd"";;C1;$L$10))"
           .Locked = True
        End With
        
        ActiveSheet.EnableSelection = xlNoSelection
        
    ElseIf Sheets("Time").Range("$C$1").Value = "OFF" Then
        
        With Range("D1")
            .Locked = False
            .Value = ""
        End With
        
        ActiveSheet.EnableSelection = xlUnlockedCells
        
    End If
   
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    ActiveSheet.Protect
    
End Sub

[]s

 
Postado : 12/10/2016 9:17 pm
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Bateu na trave, apenas queria bloquear D1, onde vai a formula

Eu quero que na linha 1 só fica bloqueada D1

 
Postado : 12/10/2016 9:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bateu na trave, apenas queria bloquear D1, onde vai a formula

Eu quero que na linha 1 só fica bloqueada D1

Fiquei em duvida se quando OFF todas as celulas estarão desbloqueadas ou não, mas por padrão do excel todas as celulas estão com a opção de Bloqueio habilitada, então com a aba desprotegida você pode selecionar todas as celulas ir em Formatar Celulas e desabilitar a opção Bloqueadas, ou utilizar a rotina abaixo que fiz o ajuste para Desbloquear todas quando OFF e deixar somente a D1 bloqueada quando ON, veja se agora está da forma que quer, deixei algumas instruções desabilitadas só para ver onde foi alterado :

A instrução : ActiveSheet.Cells.Locked = False - Desbloqueia todas as celulas da aba

Private Sub Worksheet_Activate()

    Application.EnableEvents = False
    Application.ScreenUpdating = False
    
    ActiveSheet.Unprotect
    
    'Desbloqueia todas as celulas da aba
    ActiveSheet.Cells.Locked = False
    
    If Sheets("Time").Range("$C$1").Value = "ON" Then
        
        With Range("D1")
           .FormulaLocal = "=SE(C1=0;"""";RTD(""empresa.rtd"";;C1;$L$10))"
           'Bloqueia somente a D1
           .Locked = True
        End With
        
        'ActiveSheet.EnableSelection = xlNoSelection
        
    ElseIf Sheets("Time").Range("$C$1").Value = "OFF" Then
        
        With Range("D1")
            '.Locked = False
            .Value = ""
        End With
        
        ActiveSheet.EnableSelection = xlUnlockedCells
        
    End If
   
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    ActiveSheet.Protect
    
End Sub
 
Postado : 12/10/2016 10:12 pm
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Com ON e OFF todas as celulas estão bloqueadas, somente a linha 1 está desbloqueada, mas com ON quero toda celula bloqueada e somente a D1 da linha 1 bloqueada.

Somente em vermelho vai ficar bloqueada conforme a imagem !

 
Postado : 13/10/2016 5:58 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Se você deixar somente a D1 bloqueada quando estiver ON eu consigo depois proteger ( não pelo VBA ) sem afetar o código no VBA ?

Se sim, só deixar bloqueado a D1 quando for ON

Obrigado !

 
Postado : 13/10/2016 6:13 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Deu certo seu código, estou viajando, pois não tinha fechado o excel.

 
Postado : 13/10/2016 6:22 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Deu certo, pois só não consigo proteger a planilha

 
Postado : 13/10/2016 6:50 am