Note: The other languages of the website are Google-translated. Back to English

Como enviar email se uma determinada célula é modificada no Excel?

Este artigo fala sobre o envio de um email pelo Outlook quando uma célula em um determinado intervalo é modificada no Excel.

Enviar e-mail se a célula em um determinado intervalo for modificada com o código VBA


Enviar e-mail se a célula em um determinado intervalo for modificada com o código VBA


Se você precisar criar um novo email automaticamente com a pasta de trabalho ativa anexada quando uma célula no intervalo A2:E11 for modificada em uma determinada planilha, o código VBA a seguir poderá ajudá-lo.

1. Na planilha que você precisa enviar e-mail com base em sua célula modificada em um determinado intervalo, clique com o botão direito na guia da planilha e clique no botão Ver código no menu de contexto. Veja a imagem:

2. No popping up Microsoft Visual Basic para Aplicações janela, copie e cole o código VBA abaixo na janela Código.

Código VBA: enviar e-mail se a célula em um intervalo especificado for modificada no Excel

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("A2:E11")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Cell(s) " & xRgSel.Address(False, False) & _
            " in the worksheet '" & Me.Name & "' were modified on " & _
            Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
            " by " & Environ$("username") & "."

        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Notas:

1). No código, A2: E11 é o intervalo no qual você enviará e-mail.
2). Altere o corpo do e-mail conforme necessário em xMailBody linha no código.
3). Substitua o Email com o endereço de e-mail do destinatário alinhado .To = "Endereço de e-mail".
4). Altere o assunto do e-mail na linha .Subject = "Planilha modificada em" & ThisWorkbook.FullName.

3. aperte o outro + Q simultaneamente para fechar o Microsoft Visual Basic para Aplicações janela.

A partir de agora, qualquer célula no intervalo A2: E11 é modificada, um novo e-mail será criado com a pasta de trabalho atualizada anexada. E todos os campos especificados, como assunto, destinatário e corpo do email, serão listados no email. Por favor, envie o email.

Nota: O código VBA funciona apenas se você estiver usando o Outlook como seu programa de email.


Artigos relacionados:


As melhores ferramentas de produtividade para escritório

O Kutools for Excel resolve a maioria dos seus problemas e aumenta sua produtividade em 80%

  • armadilha para peixes: Insira rapidamente fórmulas complexas, gráficos e qualquer coisa que você tenha usado antes; Criptografar células com senha; Criar lista de discussão e enviar emails ...
  • Barra Super Fórmula (edite facilmente várias linhas de texto e fórmula); Layout de leitura (ler e editar facilmente um grande número de células); Colar na faixa filtrada...
  • Mesclar células / linhas / colunas sem perder dados; Dividir o conteúdo das células; Combinar linhas / colunas duplicadas... Evite células duplicadas; Comparar intervalos...
  • Selecione Duplicado ou Único Linhas; Selecione linhas em branco (todas as células estão vazias); Super Find e Fuzzy Find em muitos livros; Seleção aleatória ...
  • Cópia exata Várias células sem alterar a referência da fórmula; Criação automática de referências para várias folhas; Inserir marcadores, Caixas de seleção e mais ...
  • Extrair Texto, Adicionar texto, remover por posição, Remover Espaço; Criar e imprimir subtotais de paginação; Converter entre conteúdo de células e comentários...
  • Super Filtro (salvar e aplicar esquemas de filtro a outras planilhas); Classificação Avançada por mês / semana / dia, frequência e mais; Filtro Especial por negrito, itálico ...
  • Combine pastas de trabalho e planilhas; Mesclar tabelas com base em colunas-chave; Divida os dados em várias folhas; Conversão em lote de xls, xlsx e PDF...
  • Mais de 300 recursos poderosos. Suporta Office / Excel 2007-2019 e 365. Suporta todos os idiomas. Fácil implantação em sua empresa ou organização. Teste gratuito de 30 dias com recursos completos. Garantia de devolução do dinheiro em 60 dias.
guia kte 201905

Guia do Office traz interface com guias para o Office e torna seu trabalho muito mais fácil

  • Habilite a edição e leitura com guias em Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Abra e crie vários documentos em novas guias da mesma janela, em vez de em novas janelas.
  • Aumenta sua produtividade em 50% e reduz centenas de cliques do mouse para você todos os dias!
parte inferior da aba do escritório
Comentários (28)
Ainda não há classificações. Seja o primeiro a avaliar!
Este comentário foi feito pelo moderador no site
Estou preso no código VB abaixo. Estou tentando receber uma notificação por e-mail para o usuário onde os dados foram alterados. O e-mail está funcionando, mas quando faço qualquer alteração, o e-mail é iniciado de uma só vez, mas quero o e-mail quando a planilha do Excel é salva e fechada depois de fazer todas as alterações em todos os usuários impactados. Além disso, isso deve funcionar para qualquer uma das planilhas em toda a pasta de trabalho do Excel.

Por favor ajude...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'****Declaração de objetos e variáveis******

Dim xRgSel As Range Dim xOutApp As Object Dim xMailItem As Object Dim xMailBody As String Dim mailTo As String

On Error Resume Next

Sheets("TargetSheet").Range("TargetRange").Select

Application.ScreenUpdating = Falso Application.DisplayAlerts = Falso

'Set xRg = Range("A" & Rows.Count).End(xlUp).Row

Definir xRg = Range("A2:DA1000")
Definir xRgSel = Intersect(Target, xRg)


ActiveWorkbook.Save
'************Abertura do aplicativo do Outlook************

Se não xRgSel não é nada, então

Set xOutApp = CreateObject("Outlook.Application")
Definir xMailItem = xOutApp.CreateItem(0)

xMailBody = "Célula(s) " & xRgSel.Address(False, False) & _
" na planilha '" & Me.Name & "' foram modificados em " & _
Formato$(Agora, "dd/mm/aaaa") & " em " & Formato$(Agora, "hh:mm:ss") & _
" por " & Environ$("nome de usuário") & "."
'************Encontrando lista de destinatários************

If Cells(xRgSel.Row, "A").Value = "Pankaj" Then

mailTo = "pank12***@gmail.com"

Se acabar

If Cells(xRgSel.Row, "A").Value = "Nitin" Then

mailTo = "pank****@gmail.com"

Se acabar

If Cells(xRgSel.Row, "A").Value = "Chandan" Then

mailTo = "pakxro**@gmail.com"

Se acabar
'****************E-mail compondo****************

Com xMailItem

.To = mailTo
.Subject = "Planilha modificada em" & ThisWorkbook.FullName
.Body = xMailBody
'.Attachments.Add (ThisWorkbook.FullName)
.Exibição

Terminar com

Definir xRgSel = Nada
Definir xOutApp = Nada
Definir xMailItem = Nada

Se acabar

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
Caro Pankaj Shukla,
Poste sua pergunta do Excel em nosso fórum: https://www.extendoffice.com/forum.html para obter mais suporte sobre o Excel do nosso profissional de Excel.
Este comentário foi feito pelo moderador no site
Consegui criar a macro, porém estou com um problema. Gostaria de enviar um e-mail automaticamente quando uma célula atingir um determinado limite. A célula é uma fórmula. Quando a soma do cálculo fica abaixo do referido limite, não faz nada; no entanto, se eu digitar diretamente na célula, ela processará a macro conforme planejado. A fórmula atrapalha a macro?
Este comentário foi feito pelo moderador no site
Olá Sissy Jones,
O método neste artigo: Como enviar e-mail automaticamente com base no valor da célula no Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html pode ajudá-lo a resolver o problema.
Este comentário foi feito pelo moderador no site
Caro Admin


Preciso da tua ajuda,



Eu tenho um excel para monitorar os detalhes diários do trabalho feito pelo nosso trabalhador do campo, então isso é possível acionar um e-mail da planilha do Excel se esse cara não atualizar os dados nessa planilha do Excel em determinado momento.
Este comentário foi feito pelo moderador no site
Oi,
Não posso ajudar com isso.
Este comentário foi feito pelo moderador no site
Se eu quiser enviar o valor da célula em vez do endereço.. então o que devo alterar no código?
Este comentário foi feito pelo moderador no site
Oi,
Você pode tentar o código VBA abaixo.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRgSel como intervalo
Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xMailBody As String
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Definir xRg = Range("A2:E11")
Definir xRgSel = Intersect(Target, xRg)
ActiveWorkbook.Save
Se não xRgSel não é nada, então
Set xOutApp = CreateObject("Outlook.Application")
Definir xMailItem = xOutApp.CreateItem(0)
xMailBody = "Célula(s) " & xRgSel.Address(False, False) & _
xRgSel.Value & _
" na planilha '" & Me.Name & "' foram modificados em " & _
Formato$(Agora, "dd/mm/aaaa") & " em " & Formato$(Agora, "hh:mm:ss") & _
" por " & Environ$("nome de usuário") & "."

Com xMailItem
.To = "Endereço de e-mail"
.Subject = "Planilha modificada em" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Exibição
Terminar com
Definir xRgSel = Nada
Definir xOutApp = Nada
Definir xMailItem = Nada
Se acabar
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
E se quisermos apenas os comentários actualizados nessa célula e não o valor da célula inteira Deve mostrar apenas os comentários mais recentes adicionados à célula
Este comentário foi feito pelo moderador no site
Você descobriu isso?
Este comentário foi feito pelo moderador no site
Grande informação.
Pergunta sobre as informações que podem ser adicionadas ao e-mail.
Usando seu exemplo acima....

Se você tivesse um valor em F4, como você incluiria o Valor F4 no email que foi gerado quando D4 foi modificado?
Este comentário foi feito pelo moderador no site
se eu tiver que enviar essa linha inteira então?
Este comentário foi feito pelo moderador no site
Eu tentei acima do código VBA: Enviar email se a célula em um intervalo especificado for modificada no Excel. Este VBA funciona para mim, exceto enviar e-mail. Quando os dados são modificados no intervalo determinado, um e-mail é gerado automaticamente com os detalhes das células modificadas. No entanto, o e-mail não é enviado automaticamente para o destinatário e o usuário precisa clicar no botão enviar no e-mail. O que estou procurando aqui é que o e-mail deve ser enviado aos destinatários automaticamente quando é gerado. Por favor me ajude a fornecer um código para isso. Muito Obrigado
Este comentário foi feito pelo moderador no site
Olá Jimmy Joseph,
Por favor, substitua a linha ".Display" por ".Send". Espero que eu possa ajudar. Obrigado por comentar.
Este comentário foi feito pelo moderador no site
Oi; existe uma maneira de alterar o texto exibido usando informações de outras células (da primeira linha e primeira coluna)? por exemplo, se eu alterar a célula K15, quero incluir na mensagem as informações das células A15 e K1? o que devo mudar no código? Muito obrigado
Este comentário foi feito pelo moderador no site
oi Laona. você descobrir como pode fazer isso?
Este comentário foi feito pelo moderador no site
Olá. Como modifico o código para que um e-mail seja enviado para outro endereço de e-mail se outro intervalo de células for editado?
Este comentário foi feito pelo moderador no site
Alguma ajuda neste pedido? Estou com o mesmo problema. Quero adicionar vários endereços de e-mail por linha, mas quando altero uma linha, toda a planilha é alterada. Como posso limitar as alterações apenas a uma linha?
Este comentário foi feito pelo moderador no site
Editar linha:
1). No código, A2:E11 é o intervalo no qual você enviará e-mail com base.
e
3). Substitua o endereço de e-mail pelo endereço de e-mail do destinatário na linha .To = "Email Address".

Funciona bem.
Este comentário foi feito pelo moderador no site
Você pode por favor explicar isso melhor. Como você repete o código para enviar para um e-mail diferente com base em outro intervalo sendo modificado. Eu tentei copiar e colar o código abaixo e alterar conforme seu comentário, mas ainda assim apenas o primeiro intervalo parece executar o comando e escrever o email.
Este comentário foi feito pelo moderador no site
Alguém tem uma resposta para isto?
Este comentário foi feito pelo moderador no site
Olá, eu estava tentando enviar e-mails na minha planilha usando um valor alterado na planilha. Se na coluna H o status for alterado para ="4" o ID do pedido à esquerda deve ser enviado para um usuário. A planilha funciona dinamicamente, então eu tenho um intervalo de D9:D140 onde os ids do pedido são armazenados e as alterações de status são feitas no mesmo intervalo em H9:H140. Como posso atingir a meta de fazer isso e enviar o ID do pedido para o meu cliente quando o status foi alterado para ="4" ?
Este comentário foi feito pelo moderador no site
Seria possível exibir uma célula de referência diferente no xMailBody na mesma coluna em vez dos endereços da célula modificados?
Este comentário foi feito pelo moderador no site
Oi Sam, Você quer selecionar uma célula de referência aleatoriamente na mesma coluna do endereço da célula modificada? Ou digite manualmente uma célula de referência na linha xMailBody do código? É fácil digitar manualmente uma célula de referência no código, apenas coloque a célula de referência entre aspas duplas como mostrado abaixo: xMailBody = "Cell(s) " & "D3" & ", " & "D8" & _

Este comentário foi feito pelo moderador no site
É possível alterar isso para que ele exiba o email apenas se uma célula em um intervalo tiver sido alterada para dizer "Sim". Gostaria que não fizesse nada se for qualquer outro valor.
Este comentário foi feito pelo moderador no site
Obrigado pelo código, este código funciona quando eu insiro o valor e pressiono enter. Mas no meu caso a célula está enchendo automaticamente com fórmula, e quando o valor é atingido não abre o email então o código não funciona nesse caso. Agradeço antecipadamente!
Este comentário foi feito pelo moderador no site
Olá hakana,
O código VBA a seguir pode ajudá-lo a resolver o problema. Por favor, tente. Obrigado pelo seu feedback.

Private Sub Worksheet_Change(ByVal Target As Range)
'Atualizado por Extendoffice 2022/04/15
Dim xRgSel como intervalo
Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xMailBody As String
Dim xBoolean As Boolean
Dim xItsRG como intervalo
Dim xDDs como intervalo
Dim xDs como intervalo
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBoolean = False
Definir xRg = Range("E2:E13")

Defina xItsRG = Intersect(Target, xRg)
Definir xDDs = Intersect(Target.DirectDependents, xRg)
Definir xDs = Intersect(Target.Dependents, xRg)
Se não (xItsRG não é nada), então
Definir xRgSel = xItsRG
xBoolean = Verdadeiro
ElseIf Not (xDDs não é nada) Then
Definir xRgSel = xDDs
xBoolean = Verdadeiro
ElseIf Not (xDs Is Nothing) Then
Definir xRgSel = xDs
xBoolean = Verdadeiro
Se acabar


ActiveWorkbook.Save
Se xBooleano Então
Debug.Print xRgSel.Address


Set xOutApp = CreateObject("Outlook.Application")
Definir xMailItem = xOutApp.CreateItem(0)
xMailBody = "Célula(s) " & xRgSel.Address(False, False) & _
" na planilha '" & Me.Name & "' foram modificados em " & _
Formato$(Agora, "dd/mm/aaaa") & " em " & Formato$(Agora, "hh:mm:ss") & _
" por " & Environ$("nome de usuário") & "."

Com xMailItem
.To = "Endereço de e-mail"
.Subject = "Planilha modificada em" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Exibição
Terminar com
Definir xRgSel = Nada
Definir xOutApp = Nada
Definir xMailItem = Nada
Se acabar
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
Olá, criei um código semelhante, mas gostaria de *** uma condição em que, se um valor de célula for excluído, não enviará um email quando for salvo/fechado. Ele só enviará um e-mail quando um valor de célula for inserido. Você sabe como fazer isso? Este é o meu código:

CÓDIGO PARA E-MAIL AUTOMÁTICO PARA ALGUÉM QUANDO O EXCEL WORKBOOK É ATUALIZADO

CÓDIGO DA FOLHA:

Option Explicit 'Excel worksheet change event Range
Private Sub Worksheet_Change (ByVal Target As Range)
If Not Intersect(Target, Range("C3:D62")) Não é Nada Então
'Target.EntireRow.Interior.ColorIndex = 15
Faixa("XFD1048576").Valor = 15
Se acabar
If Not Intersect(Target, Range("I3:J21")) Não é Nada Então
'Target.EntireRow.Interior.ColorIndex = 15
Faixa("XFD1048576").Valor = 15
Se acabar
End Sub


CÓDIGO DO MANUAL:

Private Sub Workbook_BeforeClose(Cancelar como booleano)
If Me.Saved = False Then Me.Save

Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xName As String

If Range("XFD1048576").Value = 15 Then
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Definir xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
Com xMailItem
.To = "e-mail"
.CC = ""
.Assunto = "mensagem"
.Body = "mensagem!"
.Anexos.*** xName
.Exibição
'.mandar
Terminar com
Se acabar
Definir xMailItem = Nada
Definir xOutApp = Nada



End Sub

Private Sub Workbook_Open ()
Faixa("XFD1048576").Limpar
End Sub
Não há comentários postados aqui ainda
Deixe o seu comentário
Postando como convidado
×
Avalie esta postagem:
0   Personagens
Locais sugeridos