Notifications
Clear all

Como proteger células que contém fórmulas via VBA ?

13 Posts
4 Usuários
0 Reactions
2,015 Visualizações
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Olá,

Bom dia!

Gostaria de saber como proteger todas as célula de uma planilha que possuem qualquer fórmula ?.

Grato!

 
Postado : 25/02/2015 8:40 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Vc poderia ser mais específico? O código abaixo está tão genérico quanto a tua dúvida:

Sub Protege_celula_GT()

For Each cell In ActiveSheet.UsedRange
    If cell.HasFormula = True Then cell.Locked = True
Next cell

End Sub
 
Postado : 25/02/2015 9:34 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Use a pesquisa!
http://www.google.com.br/cse?cx=partner ... gsc.page=1

Sub NaoTestado()
Dim SH As Worksheet
Dim rng As Range

On Error Resume Next
For Each SH In Worksheets
    SH.Protect Password:="SuaSenha"
    With SH.UsedRange
        .Locked = False
        Set rng = Nothing
        Set rng = .SpecialCells(xlCellTypeFormulas)
        If Not rng Is Nothing Then rng.Locked = True
    End With
    SH.Protect Password:="SuaSenha"
Next SH
End Sub

Att

 
Postado : 25/02/2015 9:35 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Boa tarde!

Esclarecendo a dúvida. Para proteger células, com ou sem fórmulas, podemos utilizar os recursos habituais do próprio excel. como a opção "Proteger Planilha".
Mas minha intenção é utilizar o recurso do VBA para proteger uma planilha onde haja uma fórmula. Essa proteção consiste em não permitir o acesso a fórmula.
Uma vez ativa a planilha todas as células que contenham uma fórmulas estariam protegidas, e somente serão desprotegidas com a interrupção da macro.

É isso!.

PS: Não testei as soluções apresentadas! Farei isso agora.

Obrigado.

 
Postado : 25/02/2015 10:27 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Após o esclarecimento, surge uma possível alteração nos códigos apresentados. A alteração é que, a macro deve estar no evento "activesheet".

 
Postado : 25/02/2015 10:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Qual o problema com esse evento? está gerando algum erro? não conseguiu adaptar?

Private Sub Worksheet_Activate()
    Call NaoTestado
End Sub

Att

 
Postado : 25/02/2015 10:36 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Mais um detalhe e o mais importante: As demais células devem estar liberadas para edição. Apenas as células que contenham fórmulas devem ser protegidas.

 
Postado : 25/02/2015 10:38 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Obrigado Alexandre! seria minha opção para ativar a macro. Mas o código bloqueia as demais células sem fórmula. Foi a ultima observação que mandei.

 
Postado : 25/02/2015 10:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Você sabe quantas células (intervalo, coluna, linha), tem formulas, é muita coisa?

Já tentou Gravar uma Macro protegendo as células?

Att

 
Postado : 25/02/2015 11:57 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Alexandre,

Você reparou na minha observação quanto as outras células que não contem fórmulas não serem bloqueadas?

Agradeço a atençã.

Boa tarde!!

Use a pesquisa!
http://www.google.com.br/cse?cx=partner ... gsc.page=1

Sub NaoTestado()
Dim SH As Worksheet
Dim rng As Range

On Error Resume Next
For Each SH In Worksheets
    SH.Protect Password:="SuaSenha"
    With SH.UsedRange
        .Locked = False
        Set rng = Nothing
        Set rng = .SpecialCells(xlCellTypeFormulas)
        If Not rng Is Nothing Then rng.Locked = True
    End With
    SH.Protect Password:="SuaSenha"
Next SH
End Sub

Att

 
Postado : 25/02/2015 11:59 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Oi Alexandre,

Taí uma falha minha! Realmente é importante um range. No caso específico seria A12:BX115.

Todas as células neste intervalo com fórmulas seriam bloquedas. As demais não seriam.

Obrigado.

Boa tarde!!

Você sabe quantas células (intervalo, coluna, linha), tem formulas, é muita coisa?

Já tentou Gravar uma Macro protegendo as células?

Att

 
Postado : 25/02/2015 12:14 pm
(@miguel-70)
Posts: 0
New Member
 

Talvez resolva, coloque isso no verso da aba.

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)
'Set rng = Cells.SpecialCells(XlCellTypeText) 'Text se quiser travar texto
If Err.Number > 0 Then
Set rng = Cells.SpecialCells(xlCellTypeConstants)
Else
Set rng = Union(rng, Cells.SpecialCells(xlCellTypeFormulas))
'Set rng = Cells.SpecialCells(XlCellTypeText)
End If
On Error GoTo 0
If Not rng Is Nothing Then rng.Locked = True
ActiveSheet.Protect Password:="senha"
End Sub
 
Postado : 25/02/2015 2:13 pm
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Perfeito!

Muito boa a solução. Parebéns!!!

 
Postado : 25/02/2015 3:19 pm