Ir ao conteúdo
  • Cadastre-se

Excel Executar uma Macro Quando Uma Célula Tem o Valor VERDADEIRO


Posts recomendados

Queridos, boa noite. Estou com um problema e gostaria da ajuda de vocês.

 

Eu tenho uma célula com uma fórmula que resulta em verdadeiro ou falso. Quando essa célula está com o valor verdadeiro, eu gostaria que ela executasse uma macro automaticamente.

 

Falso: não chama nada.

Verdadeiro: chama a macro automaticamente 1 vez.

 

Poderiam me ajudar com isso? Sou extremamente agradecido pela ajuda de vocês.

Link para o comentário
Compartilhar em outros sites

@Midori  Colei o código, como você passou, mas deu erro (segue imagem em anexo).

 

Aí, após o erro da imagem, eu olhei o código e pensei que talvez seria porque não tinha End If e coloquei. Por fim, parece que o código roda, mas parece que enquanto o valor da célula é VERDADEIRO, o código fica rodando loucamente sem parar e trava o excel. Ele travou o excel imediatamente (nem pude conferir se rodou mesmo a macro). 

 

Porque essa macro que eu quero rodar é o seguinte: se a célula for verdadeiro, rode a macro de limpar alguns campos da planilha. Aí acho que ele está fazendo isso sem parar.

 

O código que eu coloquei com o End If: ***MUDEI A CÉLULA BJ17 PARA BD17, mas por questões pessoais mesmo.

 

Private Sub Worksheet_Calculate()
    If [BD17] = True Then
        Call limpar_busca_paciente
    End If
End Sub

 

erroplanilha.png

Link para o comentário
Compartilhar em outros sites

16 minutos atrás, Ariel Souto disse:

Porque essa macro que eu quero rodar é o seguinte: se a célula for verdadeiro, rode a macro de limpar alguns campos da planilha. Aí acho que ele está fazendo isso sem parar.

Pode ser isso.

 

Qual é o critério para a célula voltar a ser False? Você não pode fazer isso no fim da sub limpar_busca_paciente?

 

A macro vai ter que controlar isso, se não for na Sub que é chamada uma forma é no próprio evento, p.ex

 

Private Sub Worksheet_Calculate()
    Static B As Boolean
    
    If [A1] = True And B = True Then
        Call Macro
        B = False
    End If

    If [A1] = False Then B = True
End Sub

Assim a macro será chamada quando A1=True e depois só será executando após False entre as condições True.

Link para o comentário
Compartilhar em outros sites

@Midori Infelizmente não deu certo. Fecha meu excel. Não dá nenhum erro, mas na hora que o código roda, o excel fecha. Não sei o motivo, mas apenas fecha sozinho. Mas tudo bem, se não der certo não tem problema. Era só algo que eu queria fazer por perfeccionismo meu mesmo. MUITÍSSIMO OBRIGADO pela sua disposição de tempo em me ajudar.

 

Eu vou te explicar melhor o meu caso, pois talvez você consiga me ajudar de outra forma.

 

Tenho uma lista de validação de dados. Quando eu seleciono algum nome da lista, em alguns campos escondidos são puxadas as informações desse nome. Quando eu clico no botão buscar, essas informações desses campos escondidos são copiadas para outros campos do design da planilha. Até aqui, ok. Mas quando eu deleto o nome lá da lista de validação de dados ou seleciono outro nome, enquanto eu não clico em buscar novamente, ficam os dados antigos que foram copiados.

 

Minha intenção em fazer aquilo que pedi ajuda no tópico era para que assim que tal célula ficasse verdadeira, esses dados fossem limpados para que quando eu colocasse outro nome da lista de validação de dados, na parte do programa, as células estivessem em branco.

 

Seguem todos para ilustrar melhor.

SOLUÇÃO_PROGRAMA.png

Link para o comentário
Compartilhar em outros sites

Em 22/07/2020 às 22:16, Ariel Souto disse:

Eu tenho uma célula com uma fórmula que resulta em verdadeiro ou falso.

 

Tentando ajudar. Você poderia colocar uma cópia da fórmula aqui no fórum ?

Link para o comentário
Compartilhar em outros sites

Seguem duas ideias.

 

1. se viável, coloque nos campos "cinza" as fórmulas que estão nos campos "escondidos", assim não serão necessárias macros

 

2. instale uma cópia do código abaixo no módulo da planilha (considerei que a célula que contém a Validação é K5, altere se necessário).

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address <> "$K$5" Then Exit Sub
 Macro Limpar
 If Target.Value <> "" Then Macro Atualizar
End Sub

funcionamento - ao efetuar qualquer alteração manual no conteúdo da célula que contém a Validação de Dados, a macro Limpar será chamada, e se houver um nome naquela célula então a macro Atualizar será chamada.

Link para o comentário
Compartilhar em outros sites

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...