Ir ao conteúdo
  • Cadastre-se

Excel Rodar macro quando o conteúdo da célula é alterado via fórmula ou manualmente


Posts recomendados

Em 30/01/2020 às 19:58, osvaldomp disse:

Com base no que comentei no post #12, segue uma ideia para testes no arquivo anexado.

ExemploTrocadeÓleo - Fórum V2.zip 27 kB · 24 downloads

Finalmente, nessa planilha anexada está rodando tranquilo, porém quando vou colocar na minha planilha oficial aparece: 

Erro em tempo de execução '1004':

O método AutoFilter da classe Range falhou

 

.[B1:X1].AutoFilter 23, "FALSO"

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois...

Boa noite, pessoal! Tudo bem com vocês?

 

Eu estou com um problema praticamente igual, porém eu não consegui aplicar o que foi feito nos posts acima no meu caso... vocês me ajudam?

 

Eu tenho uma planilha com uma coluna com datas (as datas ficam na coluna E) e uma coluna escrito "Deadline" (coluna F) . Quando a data for igual a data de hoje, existe uma função que vai escrever "Hoje" na coluna do deadline, e ela deveria mandar um email informando algumas determinadas pessoas. Porém essa macro só está funcionando se eu clicar em cima da linha e digitar "Hoje" manualmente. Ela não está mandando o e-mail pela fórmula.

 

Meu código é esse:

 

Private Sub Worksheet_Change(ByVal Target As Range)

Dim OutApp As Object
Dim OutMail As Object
Dim texto As String

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

linha = ActiveCell.Row - 1
    
    If Target.Address = "$F$" & linha Then

        If Planilha1.Cells(linha, 6) = "Hoje" Then
        texto = "Prezado Time de CS, " & vbCrLf & vbCrLf & _
        "O Projeto " & Planilha1.Cells(linha, 3) & " está com o dedline para Hoje " & vbCrLf & _
        "Veja informações abaixo:" & vbCrLf & _
        "Deadline: " & Planilha1.Cells(linha, 6) & vbCrLf & _
        "Fase do Projeto: Design Review" & vbCrLf & vbCrLf & _
        "Atenciosamente," & vbCrLf & _
        "Equipe CS"
   
    End If
    
    With OutMail
        .To = "meu email"
        .CC = ""
        .BCC = ""
        .Subject = "Informação!"
        .Body = texto
        .Display 
    End With
    On Error GoTo 0
    
    Set OutMail = Nothing
    Set OutApp = Nothing
    
    
    End If

End Sub

 

Alguém me ajuda? Não sei mais o que fazer... Segue anexo a planilha também.

 

Muito obrigado!

 

Projetos em andamento - Copia.xlsx

Link para o comentário
Compartilhar em outros sites

@MarceloAKniss Bom dia! Tente o código abaixo. Ao se usar o evento Worksheet_Change, é importante atentar que Active_cell nem sempre (quase nunca) é a célula que você quer que dispare o evento. Para isso, utilize Target, que sempre é a célula cujo valor mudou e portanto disparará o evento:

 

Private Sub Worksheet_Change(ByVal Target As Range)

Dim OutApp As Object
Dim OutMail As Object
Dim texto As String

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
    
    If (Target.Column = 6) And (Target.Row > 1) And (Target.Row < 40) Then 'Coloquei o intervalo F2:F39 para a macro rodar. Edite essa linha de código para atender às suas necessidades.

        If Target.Value = "Hoje" Then
            texto = "Prezado Time de CS, " & vbCrLf & vbCrLf & _
            "O Projeto " & Planilha1.Cells(Target.Row, 3) & " está com o dedline para Hoje " & vbCrLf & _
            "Veja informações abaixo:" & vbCrLf & _
            "Deadline: " & Planilha1.Cells(Target.Row, 6) & vbCrLf & _
            "Fase do Projeto: Design Review" & vbCrLf & vbCrLf & _
            "Atenciosamente," & vbCrLf & _
            "Equipe CS"
   
        End If
    
        With OutMail
            .To = "meu email"
            .CC = ""
            .BCC = ""
            .Subject = "Informação!"
            .Body = texto
            .Display
        End With
        On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing
    
    
    End If

End Sub

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Charley Rocha Muito obrigado!!! Funcionou! 

 

Só uma dúvida: Se eu quisesse que essa macro fosse executada quando eu desse um ENTER em cima da célula com a data "Hoje", seria possível fazer isso? Só por que já estou pensando em uma outra coisa futuramente para fazer.

 

Novamente, muito obrigado!

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, MarceloAKniss disse:

@Charley Rocha Muito obrigado!!! Funcionou! 

 

Só uma dúvida: Se eu quisesse que essa macro fosse executada quando eu desse um ENTER em cima da célula com a data "Hoje", seria possível fazer isso? Só por que já estou pensando em uma outra coisa futuramente para fazer.

 

Novamente, muito obrigado!

 

Amigo, virtualmente qualquer coisa que você quiser é possível, resta saber se é uma escolha boa a se fazer. A maneira como você pensou essa macro (do jeito que está agora) é muito utilizada e bem prática. Essa outra que você quer é meio... estranha, por assim dizer. É provável que você acabe ativando a macro por engano diversas vezes, dentre outros problemas.

 

Eu sugeriria um botão em algum lugar da planilha pra executar a macro baseada na célula selecionada. Mas isso sem saber absolutamente nada da sua real necessidade.

  • Obrigado 1
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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!