Notifications
Clear all

Unificar dois códigos de Evento Change em um.

3 Posts
2 Usuários
0 Reactions
865 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá boa tarde !

Gostaria de pedir um grande favor, além do que já me foram feitos aqui. Dentre essas ajudas, consegui aqui 2 códigos distintos que foram aplicados e funcionam super bem. Mas surgiu a necessidade de que ambos possam ser executados juntos. E definitivamente está além da minha capacidade fazer com que eles continuem sendo executados, cada um com sua função.

O primeiro código "oculta" determinadas células quando há alteração nas células "C7" ou "N40" e desde que em determinado intervalo tenha o número 0 (Zero).

Segue o código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$7" Or Target.Address = "$N$40" Then
Application.ScreenUpdating = False
For Each cell In Range("$BW$2:$BW$110")
If cell.Value = 0 Then
cell.EntireRow.Hidden = True
Else
cell.EntireRow.Hidden = False
End If
Next
Application.ScreenUpdating = True
End If
End Sub

O segundo código protege todas as células que contenham fórmulas, permitindo alterações nas demais células da planilha.

Segue o código:

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

O PROBLEMA:

O código que oculta as linhas não consegue ocultar quando a planilha já está protegida. Essa proteção ocorre quando o segundo código é executado. Isso em tese, pois como ambos tem o mesmo evento CHANGE, tentei inserir-los na planilha e surgiu a mensagem de erro.

Minha idéia então é, executar os códigos ao mesmo tempo sem que um impeça o outro de funcionar.
A sequência seria - ocultar as células e em seguida proteger. Mas aí quando houver outra alteração nas células do primeiro código (C7 ou N40), desprotege as células, processa as informações, volta a proteger.

Imagino a loucura de como ficará esse código, mas já me ajuda demais do jeito que está.

Obrigado a todos.

 
Postado : 08/04/2015 12:50 pm
(@laennder)
Posts: 62
Trusted Member
 

Você pode alterar o argumento UserInterfaceOnly do método Protect. Dá uma lida nesse artigo, que dá pra você ter uma noção.

http://gurudoexcel.com/blog/executando- ... rotegidas/

Laennder Alves
Microsoft MVP

 
Postado : 08/04/2015 4:02 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Laennder,

Sabia que já tinha visto algo parecido. Infelizmente só poderei testar amanhã, mas acredito que seja a solução. Desde já agradeço.

Obrigado.

 
Postado : 08/04/2015 6:12 pm