Notifications
Clear all

Bloquear alterações nas regras de formatação condicional

7 Posts
3 Usuários
0 Reactions
3,193 Visualizações
(@rkabariti)
Posts: 3
Active Member
Topic starter
 

Bom dia, galera. Estou com o seguinte problema:

Criei uma planilha com um sistema maravilhoso todo baseado em formatações condicionais. Basicamente é uma linha de cronograma em que você preenche as células com o valor 1 e de acordo com a data atual ele colore as realizações das atividades desse cronograma acusando os atrasos em vermelho e as realizações em verde.

O problema é que eu preciso deixar esta planilha pra dezenas de pessoas com conhecimento muito baixo em excel realizarem atualizações nos valores das células formatadas. O que acontece é que a formatação não dura 2 dias na mão dessas pessoas. O pessoal usa ctrl+c e ctrl+v pra copiar valores de uma célula com uma formatação pra outra célula com outra formatação e está feito o estrago.

Uma outra questão é em relação ao tamanho da planilha que cresce conforme a quantidade de regras de formatação aumenta. A planilha começa com 6 regras, mas conforme as pessoas copiam e colam as células de um lugar pro outro, as regras vão se multiplicando e eu já vi as 6 iniciais virarem mais de 50.

Eu fico horas corrigindo a formatação, já tentei bloquear as células pra evitar o estrago quando alguém mais espertinho inventa de querer excluir e inserir linhas e colunas, mas ainda não me acertei com a formatação condicional.

É possível impedir que alguém copie e cole a formatação de um lugar para o outro e ao mesmo tempo permitir que ele edite o valor das células? Alguém pode me dar uma luz?

 
Postado : 18/03/2014 6:42 am
(@gtsalikis)
Posts: 2373
Noble Member
 

vc pode redefinir o comando colar para colar somente valores.

É um código VBA, faça o seguinte:

Pressione Alt + F11

para abrir o VBE

Dê 2 cliques em "EstaPasta_de_Trabalho" e cole este código:

Private Sub Workbook_Activate()
'Atribui nova função ao Ctrl + v
Application.OnKey "^v", "Somente_Valores"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Restaura o Ctrl + v ao original
Application.OnKey "^v"
End Sub

Private Sub Workbook_Deactivate()
'Restaura o Ctrl + v ao original
Application.OnKey "^v"
End Sub

Private Sub Workbook_Open()
'Atribui nova função ao Ctrl + v
Application.OnKey "^v", "Somente_Valores"
End Sub

Depois, crie um módulo e cole este código:

Sub Somente_Valores()
On Error GoTo NOCOPY
Selection.PasteSpecial _
    Paste:=xlPasteValues, _
    Operation:=xlNone, _
    SkipBlanks:=False, _
    Transpose:=False
Application.CutCopyMode = False
Exit Sub
NOCOPY:
MsgBox "Não foi possível usar o comando colar.", vbCritical, "Erro Fatal 171"
End Sub
 
Postado : 18/03/2014 7:13 am
(@rkabariti)
Posts: 3
Active Member
Topic starter
 

vc pode redefinir o comando colar para colar somente valores.

É um código VBA, faça o seguinte:

Pressione Alt + F11

para abrir o VBE

Dê 2 cliques em "EstaPasta_de_Trabalho" e cole este código:

Private Sub Workbook_Activate()
'Atribui nova função ao Ctrl + v
Application.OnKey "^v", "Somente_Valores"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Restaura o Ctrl + v ao original
Application.OnKey "^v"
End Sub

Private Sub Workbook_Deactivate()
'Restaura o Ctrl + v ao original
Application.OnKey "^v"
End Sub

Private Sub Workbook_Open()
'Atribui nova função ao Ctrl + v
Application.OnKey "^v", "Somente_Valores"
End Sub

Depois, crie um módulo e cole este código:

Sub Somente_Valores()
On Error GoTo NOCOPY
Selection.PasteSpecial _
    Paste:=xlPasteValues, _
    Operation:=xlNone, _
    SkipBlanks:=False, _
    Transpose:=False
Application.CutCopyMode = False
Exit Sub
NOCOPY:
MsgBox "Não foi possível usar o comando colar.", vbCritical, "Erro Fatal 171"
End Sub

Rapaz, funcionou muito bem pro comando copiar e colar e dá uma mensagem de erro ao tentar recortar e colar..
Até aí beleza, mas eu notei que ainda dá pro cara pegar uma célula com uma formatação e arrastar ela pro lugar de uma outra. Nesse caso a formatação é arrastada junto..

Nao dá pra subestimar a criatividade de quem tá disposto a fazer cagada estragar tudo! Rsrsrsrs...

 
Postado : 18/03/2014 8:20 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Nesse caso, em EstaPasta_de_Trabalho, tente assim:

Private Sub Workbook_Activate()
'Atribui nova função ao Ctrl + v
Application.OnKey "^v", "Somente_Valores"
'bloqueia o arrastar do mouse
Application.CellDragAndDrop = False
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Restaura o Ctrl + v ao original
Application.OnKey "^v"
'desbloqueia o arrastar do mouse
Application.CellDragAndDrop = True
End Sub

Private Sub Workbook_Deactivate()
'Restaura o Ctrl + v ao original
Application.OnKey "^v"
'desbloqueia o arrastar do mouse
Application.CellDragAndDrop = True
End Sub

Private Sub Workbook_Open()
'Atribui nova função ao Ctrl + v
Application.OnKey "^v", "Somente_Valores"
'bloqueia o arrastar do mouse
Application.CellDragAndDrop = False
End Sub
 
Postado : 18/03/2014 8:28 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Ah, sim, amigo, esqueci de dizer...

Ainda não é 100% funcional.

as pessoas ainda podem clicar com o botão direito do mouse e escolher "colar";

podem usar o menu e clicar no botão colar;

podem abrir a planilha sem habilitar as macros...

vc pode contornar estas coisas também, mas, não sei se seria 100% garantido.

 
Postado : 18/03/2014 8:44 am
(@edcronos)
Posts: 1006
Noble Member
 

Tbm tenho uma planilha baseada em formatações condicionais, quando comecei com as formulas pensei que daria para pegar os valores a parti dessas cores da formatação condicional, tive varios problemas. :cry:

tbm peno com isso de area fixa na formatação condicional "apesar de que minha planilha somente eu uso", meu caso pq é uma planilha escalável

enquanto não conseguimos tal façanha no bloqueio da formatação podemos tentar desenvolver uma macro que reaplique a formatação tipo essa

Sub Reset_Format()
Dim x As Integer
Range("A7:R5000").FormatConditions.Delete
For x = 1 To ActiveSheet.Cells.FormatConditions.Count
With ActiveSheet.Cells.FormatConditions(x)
If .AppliesTo.Cells.Address = "$F$6" Then
.ModifyAppliesToRange Range("$F$6:$F$5000")
ElseIf .AppliesTo.Cells.Address = "$A$6:$R$6" Then
.ModifyAppliesToRange Range("$A$6:$R$5000")
End If
End With
Next
End Sub

bem não funcionaria para todos os caso mas já seria alguma coisa
no caso dessa macro imagina que a formatação vai de F6 até R5000
ela limpa a formatação de F7 até o final e estica a formatação condicional novamente que está em F6 até R5000 o mesmo de Aplica-se a ou algo assim.

alguem com experiência em macro poderia ajuda na adaptação

eu uso um modo de planilha auxiliar principal a parti de macro crio uma nova depois uma macro salva de volta, muito complicado :P

 
Postado : 18/03/2014 2:29 pm
(@rkabariti)
Posts: 3
Active Member
Topic starter
 

Ah, sim, amigo, esqueci de dizer...

Ainda não é 100% funcional.

as pessoas ainda podem clicar com o botão direito do mouse e escolher "colar";

podem usar o menu e clicar no botão colar;

podem abrir a planilha sem habilitar as macros...

vc pode contornar estas coisas também, mas, não sei se seria 100% garantido.

Pois é, amigo.. Você me ajudou bastante com as ideias, mas o fato de eles poderem não habilitar as macros (até pq o office faz o maior terrorismo que macros podem ser perigosas) já me faz pensar em não utilizá-las.

Talvez a melhor solução seja eu manter um arquivo com o template da formatação e entrar na planilha periodicamente, tipo 1x ao mês, pra consertar copiando e colando a formatação do template.

 
Postado : 19/03/2014 11:12 am