Usuário com melhor resposta
Exemplo de programacao da Microsoft usando Intersect nao funciona em planilhas protegidas.

Pergunta
-
Bom dia.
1-Tenho uma planilha que se der dois clics numa determinada area A1:C10, coloca na celula uma palavra predeterminada que e de uso constante. Por sugestao do Forum da Microsoft, estou usando o recuso a um bom tempo, mas com os icrementos na planilha estou pensando em colocar uma protecao para que o operador nao apage formulas por engano.......mas dai a rotina deixou de funcionar.
Tentei contornar a situacao colocando uma linha no inico para desproteger e no final voltar a proteger mas nao tive resultado.
Sera que essa rotina tem alguma forma de modificar para que funcione com planilhas protegidas?.O link da microsoft esta abaixo e anexei o codigo que fiz uma modificacao para que funcione com dois clicks.
2-Numa outra planilha, uso uma Tabela e gostaria que se desse dois clics numa das colunas da Tabela colocasse uma determinada palavra e se desse dois clicks numa numa outra coluna da Tabela colocasse uma outra palavra pre determinada.Para colocar a mesma palavra em colunas diferentes tenho usado o codigo Union, mas preciso identificar a area da minha activecell e usar um If.Tentei escrever If activecell,range.name="nome da regiao" , mas nao deu resultado. Teria uma solucao para esse caso?
Desde ja agradeco
Tadao
https://support.microsoft.com/pt-pt/kb/213612
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim KeyCells As Range Set KeyCells = Range("A1:C10") If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then If ActiveCell = "" Then ActiveCell = "Ativo" ActiveCell.Offset(1).Select ' ElseIf activecell = "Ativo" Then ' ActiveCell = "Desligado" ' ActiveCell.Offset(1).Select Else ActiveCell = "" ActiveCell.Offset(1).Select End If End If End Sub
- Editado Antonio Tadao kano domingo, 25 de outubro de 2015 03:37
Respostas
-
Bom dia Antônio.
A respeito da proteção, basta apenas que a região que a macro irá atuar não esteja com as células bloqueadas (Página Inicial >> Formatar >> Bloquear Célula (cadeado desmarcado)). Fazendo isso pode proteger a planilha normalmente. Obs.: na sua primeira linha comentada há um erro: troque:
acticecell
por
ActiveCell
Para sua segunda pergunta, basta que faça dois testes condicionais de intersecção:
If Not Application.Intersect(KeyCells1, Range(Target.Address)) Is Nothing Then '... End If If Not Application.Intersect(KeyCells2, Range(Target.Address)) Is Nothing Then '... End If
Abraço.
Filipe Magno
- Sugerido como Resposta JAlvez42 sábado, 24 de outubro de 2015 15:42
- Marcado como Resposta Antonio Tadao kano terça-feira, 27 de outubro de 2015 00:24
-
Bom dia Antônio.
Agora sim entendi perfeitamente seu problema. Por sorte (ou não) eu já tinha passado pelo problema do mouse não se transformar na "mãozinha" ao proteger a planilha, exigindo que o clique fosse exatamente no final da célula. Para resolver foi bastante simples, bastou desmarcar uma opção ao proteger a planilha. No seu caso não sei se é a solução mais indicada (não sei exatamente no que implica), mas faz com que o comportamento seja o que deseja.
Para fazer, ao proteger a planilha basta marca a opção de 'Editar Objetos', conforme figura:
Veja se te atende.
Abraço.
Filipe Magno
- Marcado como Resposta Antonio Tadao kano terça-feira, 27 de outubro de 2015 00:24
Todas as Respostas
-
Bom dia Antônio.
A respeito da proteção, basta apenas que a região que a macro irá atuar não esteja com as células bloqueadas (Página Inicial >> Formatar >> Bloquear Célula (cadeado desmarcado)). Fazendo isso pode proteger a planilha normalmente. Obs.: na sua primeira linha comentada há um erro: troque:
acticecell
por
ActiveCell
Para sua segunda pergunta, basta que faça dois testes condicionais de intersecção:
If Not Application.Intersect(KeyCells1, Range(Target.Address)) Is Nothing Then '... End If If Not Application.Intersect(KeyCells2, Range(Target.Address)) Is Nothing Then '... End If
Abraço.
Filipe Magno
- Sugerido como Resposta JAlvez42 sábado, 24 de outubro de 2015 15:42
- Marcado como Resposta Antonio Tadao kano terça-feira, 27 de outubro de 2015 00:24
-
Agradeco pelo retorno Felipe.
1-Corrigi o codigo que estava comentado e agora esta funcionando perfeitamente como desejado.Obrigado.
Quanto ao desbloquear as celulas, elas ja estao desbloqueadas, mas me desculpe que nao passei um detalhe importante de que as celulas estao com validacao de dados lista com uma lista de palavras chaves e as que usam mais constantemente, estava pensando em fazer com dois clicks para faciliatar a digitadora. Tem alguma forma de colocar um codigo para desabilitar a validacao no inicio e depois ativar no final da rotina?
2-Na sua segunda sugestao, nao sei se interpretei certo, coloquei o codigo como abaixo........
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim KeyCells1 As Range Dim Keycells2 As Range Set KeyCells1 = Range("A1:A10") Set Keycells2 = Range("c1:c10") If Not Application.Intersect(KeyCells1, Range(Target.Address)) Is Nothing Then If ActiveCell = "" Then ActiveCell = "Ativo" ActiveCell.Offset(1).Select ElseIf ActiveCell = "Ativo" Then ActiveCell = "Desligado" ActiveCell.Offset(1).Select Else ActiveCell = "" ActiveCell.Offset(1).Select End If End If If Not Application.Intersect(Keycells2, Range(Target.Address)) Is Nothing Then If ActiveCell = "" Then ActiveCell = "Falta" ActiveCell.Offset(1).Select ElseIf ActiveCell = "Falta" Then ActiveCell = "Folga" ActiveCell.Offset(1).Select Else ActiveCell = "" ActiveCell.Offset(1).Select End If End If End Sub
......e o resultado ficou assim, como anexo abaixo.
Como se ve, quando dou dois clicks pela primeira vez, aparecem primeira palavras de outra area e abaixo a primeira palavra da segunda area.
Na segunda vez na mesma celula aparece a segunda palavra da outra area.
Na terceira vez na mesma celula aparece a primeira palavra da segunda area
- Editado Antonio Tadao kano segunda-feira, 26 de outubro de 2015 08:06
-
Boa tarde Antônio.
Não compreendi muito bem seu problema com o bloqueio ou validação. Independente da sua lista de validação, a macro sempre escreverá (não haverá crítica).
Sobre o código, o erro da coluna 'C' está ocorrendo porque vc definiu o intervalo concorrente (A1:C10). Basta trocar para:
Set KeyCells1 = Range("A1:A10") Set Keycells2 = Range("c1:c10")
Se puder detalhar melhor a questão da validação...
Abraço.
Filipe Magno
-
Bom dia Felipe. Obrigado mais uma vez.
Corrigi o erro de A1:C10 para A1:A10 e funcionou perfeitamente, obrigado.
Quanto a planilha com ou sem protecao vou tentar explicar o que esta acontecendo em detalhes.:
1-Com a planilha sem protecao
Clico na celula e ao lado da celula aparece o triangulo invertido, que clicando nele aparece a lista e tenho a opcao de poder escolher a palavra pela lista.
Se na celula eu der dois clicks, roda a rotina e automaticamente coloca a palavra pre determinada.
Se der pela segunda vez dois clicks na mesma celula(que esta com a primeira palavra), automaticamente coloca a segunda palavra.
E por fim se der dois clicks pela terceira vez na mesma celula, volta a ficar vazio.
2-Com a planilha protegida.
Se clico numa celula ou coloco o cursor na celula ativa, aparece a maozinha e se der um click(Na Celula) aparece a lista de validacao de dados, coisa que sem a protecao nao ocorre, pois teria que clicar no triangulo ao lado da celula.
Se der dois cliks na celula, a validacao aparece e desaparece sem rodar a rotina de programacao.
Abaixo anexei a tela do monitor para mostrar a situacao quando esta com protecao, mas a maozinha acima da celula nao apareceu na copia.
-
Bom dia Antônio.
Agora sim entendi perfeitamente seu problema. Por sorte (ou não) eu já tinha passado pelo problema do mouse não se transformar na "mãozinha" ao proteger a planilha, exigindo que o clique fosse exatamente no final da célula. Para resolver foi bastante simples, bastou desmarcar uma opção ao proteger a planilha. No seu caso não sei se é a solução mais indicada (não sei exatamente no que implica), mas faz com que o comportamento seja o que deseja.
Para fazer, ao proteger a planilha basta marca a opção de 'Editar Objetos', conforme figura:
Veja se te atende.
Abraço.
Filipe Magno
- Marcado como Resposta Antonio Tadao kano terça-feira, 27 de outubro de 2015 00:24
-