Página 1 de 1

Macro para inserir "X" na tabela com duplo clique

Enviado: 24 Out 2019 às 21:09
por SandroLima
Boa noite, pessoal.

Essa macro insere um "X" na planilha a partir de um duplo clique:
Código: Selecionar todos
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column <> 2 Then Exit Sub
        If Target.Value = "" Then
            Target.Value = "X"
        Else: Target.Value = ""
        End If
    Application.SendKeys "{ESCAPE}"
End Sub
Como faço para inserir/desinserir um "X" maiúsculo através de um duplo clique somente na área da tabela "TB_Divisao"?
Lembrando que a tabela "TB_Divisao" pode mudar de posição na planilha.

Segue planilha para testes.

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 25 Out 2019 às 00:02
por Jimmy
Boa noite Sandro,

Veja se a planilha anexa te atende.

Já que está programando em eventos, seria legal dar uma lida no post abaixo, que traz algumas boas práticas que evitam alguns erros frequentes.
http://gurudoexcel.com/forum/viewtopic. ... 015#p40015

Caso tenha alguma questão sobre esta planilha, ou algo do tópico acima, fique a vontade pra perguntar.

Jimmy San Juan

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 25 Out 2019 às 21:56
por SandroLima
Boa noite, Jimmy.

A macro atendeu muito bem... mas aproveitando o ensejo o que eu deveria alterar na caro para que ela se restringisse aàs colunas da tabela referentes aos usuários somente?
Acredito que seria alterando o RngAlvo na linha:
Código: Selecionar todos
Set RngAlvo = ActiveSheet.ListObjects("TB_Divisao").DataBodyRange /code]

Seria fazendo uma espécie de Array entre as Coluna Usuário 1 - Usuário 7?
Array (Listcolumns("      ????
Serviria para evitar erro caso eu dê um duplo clique por exemplo na coluna [Tabela] da TB_Divisão... queria restringir a macro às colunas de Usuários.

Muito obrigado pela ajuda até aqui.

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 25 Out 2019 às 21:58
por SandroLima
E obrigado pela dica:
Já que está programando em eventos, seria legal dar uma lida no post abaixo, que traz algumas boas práticas que evitam alguns erros frequentes.
http://gurudoexcel.com/forum/viewtopic. ... 015#p40015
Vou estudar as observações feitas.

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 26 Out 2019 às 08:26
por Jimmy
Bom dia Sandro,

Neste seu último arquivo anexado, notei que você colocou a macro de evento DoubleClick na Pasta_de_trabalho, ao invés de colocar na planilha onde está a tabela.

Para que funcione na Pasta de trabalho você deve alterar a primeira linha de
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
para
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

Note que há um parâmetro a mais na Sub, uma vez que as macros colocadas na Pasta_de_trabalho atuam sobre todas as planilhas, logo, ao ser executada é interessante saber qual foi a planilha que a chamou.

Quando coloca a macro em uma planilha específica, ela só vai funcionar para aquela planilha, dessa forma, é desnecessário o sistema informar em qual planilha está rodando.

No nosso caso, a tabela está em uma única planilha (nem poderia ser diferente uma vez que o Excel não aceitaria duas tabelas com o mesmo nome, mesmo em planilhas diferentes), assim, a macro poderia ter sua atuação limitada à aquela planilha, pois caso contrário, será acionada a cada duplo clique dado em qualquer planilha, o que é um desperdício de processamento. É claro que a macro é tão simples que a carga de CPU dada por execuções desnecessárias é imperceptível, mas trata-se de uma boa prática de programação.

Agora vou ver a questão da faixa de atuação da macro na tabela.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 26 Out 2019 às 09:04
por Jimmy
Sandro,

Complementando o que mencionei na minha primeira mensagem de hoje, alterei a macro mas a deixei como um evento da planilha e não da pasta de trabalho.
Acabei não te perguntado se havia motivos para você a ter movido para a pasta de trabalho. Há?

Você tem razão, a atuação nesse caso foi na variável RngAlvo. Fiz passo a passo, e 3 linhas pra ficar mais claro, e também porque não gosto de linhas grandes de de difícil compreensão.

Ficou assim:
Código: Selecionar todos
    Set RngAlvo = ActiveSheet.ListObjects("TB_Divisao").DataBodyRange 'Aponta para a área da tabela
    TotCol = RngAlvo.Columns.Count      'Quantidade de colunas do corpo da tabela
    Set RngAlvo = RngAlvo.Offset(, 1).Resize(, TotCol - 2)  
O comando Set RngAlvo = ActiveSheet.ListObjects("TB_Divisao").DataBodyRange aponta para a área da tabela, que inclui a primeira e última colunas, o que não se quer. É necessário deslocar isso uma coluna pra direita. Esse é o trabalho do .Offset(, 1). Isso faz com que a primeira coluna passe a ser "M" e não mais "L", que é o que queremos. Como o primeiro parâmetro foi omitido (note que logo após o abre parenteses já aparece uma vírgula), não houve deslocamento de linhas.

Com o offset, a última coluna que era "T" passou a ser a "U", sendo que gostaríamos que fosse a "S". Então diminuímos o tamanho da Range em duas colunas. Para fazer isso, a quantidade total de colunas foi previamente obtido pela linha
TotCol = RngAlvo.Columns.Count 'Quantidade de colunas do corpo da tabela
O responsável por diminuir a quantidade de colunar é o .Resize(, TotCol - 2).
Novamente, a quantidade de linhas foi omitida, e por consequência não é alterado.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 26 Out 2019 às 09:06
por SandroLima
Bom dia, Jimmy.

Foi mera falta de atenção. Já fiz a correção.

Obrigado.

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 26 Out 2019 às 09:08
por Jimmy
Nessa última planilha que te mandei já está corrigido.

Re: Macro para inserir "X" na tabela com duplo clique

Enviado: 26 Out 2019 às 09:37
por SandroLima
Perfeito, Jimmy!

Testado e funcionando certinho.

Mais uma vez obrigado.