none
Exemplo de programacao da Microsoft usando Intersect nao funciona em planilhas protegidas. RRS feed

  • 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



    sábado, 24 de outubro de 2015 04:27

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
    sábado, 24 de outubro de 2015 12:32
  • 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

    segunda-feira, 26 de outubro de 2015 10:47

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
    sábado, 24 de outubro de 2015 12:32
  • 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


    domingo, 25 de outubro de 2015 04:49
  • 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

    domingo, 25 de outubro de 2015 19:30
  • 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.

    segunda-feira, 26 de outubro de 2015 08:39
  • 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

    segunda-feira, 26 de outubro de 2015 10:47
  • Ohh...Felipe..que maravilha!..agora funcionou, muito obrigado.

    Agradeco pela dedicacao e paciencia dedicada.

    Tadao

    terça-feira, 27 de outubro de 2015 00:19