none
executar macro após formula atualizar célula RRS feed

  • Pergunta

  • Bom dia,

    Caros colegas, desenvolvi uma planilha de tarefas com deadlines que conforme o prazo vai ficando próximo ela dispara e-mails de follow-up para os responsáveis

    O problema é que a macro só funciona quando eu aperto um "F2, ENTER"

    E deveria funcionar de acordo com a atualização automática através de formulas relacionadas com =AGORA()

    Alguém poderia me indicar o que eu estou fazendo de errado?

    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 = "$I$" & linha Then

    'Atrasado
            If Plan1.Cells(linha, 9) = "Atrasado" Then
                texto = "Prezado(a) " & Plan1.Cells(linha, 7) & "," & vbCrLf & vbCrLf & _
                        "O status da sua tarefa " & Plan1.Cells(linha, 2) & vbCrLf & _
                        "Com a descrição: " & Plan1.Cells(linha, 6) & vbCrLf & _
                        "foi alterado para atrasado." & vbCrLf & _
                        "Favor, assim que finalizar sua tarefa, responder com o documento comprobatorio para atualização do seus stats" & vbCrLf & _
                        vbCrLf & _
                        vbCrLf & _
                        "Atenciosamente," & vbCrLf & _
                        "Dpto Tributario"
                        
            With OutMail
                .To = Plan1.Cells(linha, 7)
                .CC = "dirce.lopes@hilti.com;BRallTAX@hilti.com"
                .BCC = ""
                .Subject = "ATUALIZAÇÃO STATUS TAREFA - " & Plan1.Cells(linha, 2)
                .Body = texto
                .display   'Utilize Send para enviar o email sem abrir o Outlook
            End With
         
                        
        
    'faltam 3 dias
            ElseIf Plan1.Cells(linha, 9) = "Atenção 3" Then
                texto = "Prezado(a) " & Plan1.Cells(linha, 7) & "," & vbCrLf & vbCrLf & _
                        "O status da sua tarefa " & Plan1.Cells(linha, 2) & vbCrLf & _
                        "Com a descrição: " & Plan1.Cells(linha, 6) & vbCrLf & _
                        "foi alterado para Atenção." & vbCrLf & _
                        "Faltam 3 dias para você finalizar esta tarefa" & vbCrLf & _
                        vbCrLf & _
                        vbCrLf & _
                        "Atenciosamente," & vbCrLf & _
                        "Dpto Tributario"
            With OutMail
                .To = Plan1.Cells(linha, 7)
                .CC = "dirce.lopes@hilti.com;BRallTAX@hilti.com"
                .BCC = ""
                .Subject = "ATUALIZAÇÃO STATUS TAREFA - " & Plan1.Cells(linha, 2)
                .Body = texto
                .display   'Utilize Send para enviar o email sem abrir o Outlook
            End With


    'falta 1 dia
            ElseIf Plan1.Cells(linha, 9) = "Atenção 1" Then
                texto = "Prezado(a) " & Plan1.Cells(linha, 7) & "," & vbCrLf & vbCrLf & _
                        "O status da sua tarefa " & Plan1.Cells(linha, 2) & vbCrLf & _
                        "Com a descrição: " & Plan1.Cells(linha, 6) & vbCrLf & _
                        "foi alterado para Atenção." & vbCrLf & _
                        "Falta 1 dias para você finalizar esta tarefa" & vbCrLf & _
                        vbCrLf & _
                        vbCrLf & _
                        "Atenciosamente," & vbCrLf & _
                        "Dpto Tributario"
            With OutMail
                .To = Plan1.Cells(linha, 7)
                .CC = "dirce.lopes@hilti.com;BRallTAX@hilti.com"
                .BCC = ""
                .Subject = "ATUALIZAÇÃO STATUS TAREFA - " & Plan1.Cells(linha, 2)
                .Body = texto
                .display   'Utilize Send para enviar o email sem abrir o Outlook
            End With


    'prazo encerra hoje
            ElseIf Plan1.Cells(linha, 9) = "Atenção" Then
                texto = "Prezado(a) " & Plan1.Cells(linha, 7) & "," & vbCrLf & vbCrLf & _
                        "O status da sua tarefa " & Plan1.Cells(linha, 2) & vbCrLf & _
                        "Com a descrição: " & Plan1.Cells(linha, 6) & vbCrLf & _
                        "foi alterado para Atenção." & vbCrLf & _
                        "Hoje encerra seu prazo para finalizar esta tarefa" & vbCrLf & _
                        vbCrLf & _
                        vbCrLf & _
                        "Atenciosamente," & vbCrLf & _
                        "Dpto Tributario"
                        
            With OutMail
                .To = Plan1.Cells(linha, 7)
                .CC = "dirce.lopes@hilti.com;BRallTAX@hilti.com"
                .BCC = ""
                .Subject = "ATUALIZAÇÃO STATUS TAREFA - " & Plan1.Cells(linha, 2)
                .Body = texto
                .display   'Utilize Send para enviar o email sem abrir o Outlook
            End With
                        
            End If
                        

            On Error GoTo 0

            Set OutMail = Nothing
            Set OutApp = Nothing
        End If
        
        MsgBox "E-mail enviado com sucesso!"
        
    End Sub




    • Editado Fábio Terasaka quinta-feira, 3 de setembro de 2015 13:33 Erro na formula
    quinta-feira, 3 de setembro de 2015 13:20

Respostas

  • Em outras palavras, você quer executar a macro sempre, de qualquer jeito, né?

    Coloca então no evento SelectionChange.

    Mas aí corre o risco da planilha ficar inutilizável, mais ainda do que está agora: a cada movimento do cursor, ele interage com uma instância do Outlook.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 3 de setembro de 2015 17:25
    Moderador

Todas as Respostas

  • Experimente utilizar o evento Worksheet_Calculate. É disparado assim que a planilha recalcula.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Fábio Terasaka quinta-feira, 3 de setembro de 2015 16:56
    • Não Marcado como Resposta Fábio Terasaka quinta-feira, 3 de setembro de 2015 17:12
    quinta-feira, 3 de setembro de 2015 16:23
    Moderador
  • Infelizmente não funcionou,
    a macro continua não sendo executada quando a célula altera o valor através de uma variável =agora().
    quinta-feira, 3 de setembro de 2015 16:56
  • Em outras palavras, você quer executar a macro sempre, de qualquer jeito, né?

    Coloca então no evento SelectionChange.

    Mas aí corre o risco da planilha ficar inutilizável, mais ainda do que está agora: a cada movimento do cursor, ele interage com uma instância do Outlook.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 3 de setembro de 2015 17:25
    Moderador