Ir ao conteúdo
  • Cadastre-se

Excel Executar macro - alteração em lista suspensa


Ir à solução Resolvido por Visitante,

Posts recomendados

Postado

Olá, boa tarde,

 

Possuo uma sheet (comparativo) que possui uma lista suspensa. Essa lista suspensa é alterada automaticamente conforme outros parâmetros, mas sempre mantem uma seleção específica, que chama "Nova entrada".

Gostaria que sempre que fosse selecionada essa opção "nova entrada", fosse executada uma macro. Caso contrário, não aconteça nada.

 

Podem me ajudar por favor?

 

Obrigado

Postado

Bem vindo ao fórum Microsoft Office do Clube do Hardware, @Bruno Denadai

 

Estou supondo que a célula da lista suspensa seja a A1 e que você já criou sua outra macro, digamos "MinhaMacro".

Clique com o botão direito na aba da planilha que você quer monitorar a entrada e escolha "Exibir código". Cole o seguinte código no editor do VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(False, False) = "A1" And [A1] = "nova entrada" Then Call MinhaMacro
End Sub

Lembrando que o VBA é Case Sensitive, portanto "nova entrada" é diferente de "Nova entrada".

Postado

Olá Edson, 

Agradeço as boas vindas e o breve retorno. Estou começando nesse mundo do VBA então agradeço também a disponibilidade.

 

A lista suspensa está na célula "c4", então ajustei a referência, mas ainda assim não funcionou.

 

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(False, False) = "c4" And [c4] = "Nova entrada" Then Call Novocredito
   
End Sub

 

Essa lista suspensa que comentei está relacionada a outra lista suspensa, na célula "c6". Ela é atualizada sempre que altero o valor dessa célula.

Pode ter alguma relação?

 

Abs 

Postado

 

Experimente

 

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address <> "$C$6" Or UCase([C4]) <> "NOVA ENTRADA" Then Exit Sub
 Novocredito
End Sub

O código será disparado após alteração manual em C6.

Postado

Olá pessoal, ainda não rs

 

Segue a planilha como exemplo.

 

Eu tenho uma múltipla seleção na célula c6 (deixei o suporte da lista suspensa), que vai variar automaticamente a seleção da célula c4 (também deixei o suporte da lista).

De toda forma, sempre haverá essa opção "Nova entrada", independente do valor da célula c6. E a ideia é que sempre que essa opção seja selecionada, ele simplesmente abra uma nova guia.

 

Muito obrigado.

 

Abs

Lista Suspensa.xlsx

  • Solução
Postado
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address <> "$C$4" Or Target.Value <> "Nova entrada" Then Exit Sub
 Novocredito
End Sub

 

Postado

Como se houvesse sensores, o Excel detecta alguns eventos que ocorrem em alguns de seus objetos:  em nível de aplicativo como um todo, de pasta de trabalho, de planilha, de gráfico, de célula, de pressionamento de tecla, de intervalo de tempo, de clicks em botões, de seleções, de células que se alteram por recálculo, etc.... Outros procedimentos de eventos especializados podem ser criados pelo programador em módulos de classe, como os que ocorrem em nível de Application.

Um desses gatilhos pré-determinados é a alteração de dados pelo usuário em uma ou mais células de uma planilha (evento Change).

O procedimento de evento Worksheet_Change é disponibilizado pelo próprio Excel, que oferece ainda o parâmetro Target para poder identificar qual (ou quais) foram as células que o dispararam.

Resumindo, Target foi o range que sofreu a alteração manual de valores.

Se quiser, embora raramente seja feito, pode-se renomear Target para algo mais adequado ao uso.

Postado
1 hora atrás, Bruno Denadai disse:

 ... como exatamente interpretar o target.address?

 

 

A variável Target, do tipo Range, está declarada como argumento do evento WS_Change.
Esse evento será disparado em decorrência da alteração de conteúdo em um intervalo, e Target se refere a esse intervalo.

 

O evento será disparado em decorrência de alterações manuais (via teclado ou mouse) e também por alterações feitas por macros, mas não será disparado por alterações no resultado de fórmulas.

 

Já "Address" é uma das propriedades do objeto Range, que aqui é representado pela variável Target, e retorna um String no formato "A1", ou seja, "Col,Lin", que se refere ao endereço do intervalo no qual ocorreu a alteração de conteúdo. No seu caso retorna "$C$4".

Tal intervalo poderá ser formado por somente uma ou por múltiplas células.

 

Como curiosidade, instale uma cópia do código abaixo no módulo de uma planilha vazia, e em seguida:
1. selecione uma célula e aperte Delete, depois
2. selecione células adjacentes e aperte Delete, depois
3. selecione intervalos/células não adjacentes e aperte Delete

Private Sub Worksheet_Change(ByVal Target As Range)
 MsgBox Target.Address
End Sub

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...