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.

Anote os: 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-2021 e 365. Suporta todos os idiomas. Fácil implantação em sua empresa ou organização. Recursos completos de avaliação gratuita de 30 dias. 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 (37)
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 = Verdadeiro
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 = Verdadeiro
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 xBooleano Como Booleano
Dim xItsRG como intervalo
Dim xDDs como intervalo
Dim xDs como intervalo
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBooleano = Falso
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 = Verdadeiro
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)
Se Me.Saved = False Então 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
Este comentário foi feito pelo moderador no site
Oi tudo,

der Code würde gut für mein Vorhaben passen, aber gibt es die Möglichkeit, dass er eine E-Mail beim speichern schreibt mit allen Zellen die geändert wurden? Então wie es jetzt ist ,würde er jede geänderte Zelle einzeln senden. Dies ist dann problemtisch wenn zB 10 Zellen angepasst werden foi 10 E-Mails beeuten würde. Und gibt es die Möglichkeit, die gesamte geänderte Zelle bei mir von A bis Y in einer E-Mail zu senden? Bisher haut der ja die Zellnummer in the E-Mail, wenn aber jemand anders Filtert wird er die Änderung nicht mehr finden.
Este comentário foi feito pelo moderador no site
Olá Esser123,
Os seguintes códigos VBA podem ajudar. Depois de modificar as células no intervalo especificado e salvar a pasta de trabalho, um email será exibido para listar todas as células modificadas no corpo do email e a pasta de trabalho também será inserida como anexo no email. Por favor, siga os seguintes passos:
1. Abra a planilha que contém as células nas quais você deseja enviar e-mails com base, clique com o botão direito do mouse na guia da planilha e clique em Ver código no menu do botão direito. Em seguida, copie o código a seguir na janela sheet(code).
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220921
Dim xAddress As String
Dim xDRg, xRgSel, xRg As Range

xAddress = "A1:A8"
Set xDRg = Range(xAddress)
Set xRgSel = Intersect(Target, xDRg)
On Error GoTo Err1
If Not xRgSel Is Nothing Then
If ThisWorkbook.gChangeRange = "" Then
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Else
Set xRg = Range(ThisWorkbook.gChangeRange)
Set xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
End If
End If
Exit Sub
Err1:
      ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub

2. No editor Visual Basic, clique duas vezes Esta pasta de trabalho no painel esquerdo e copie o seguinte código VBA para o ThisWorkbook (Code) janela.
Option Explicit
Public gChangeRange As String
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
'On Error Resume Next
On Error GoTo Err1
Set xRg = Range(gChangeRange)
If Not xRg Is Nothing Then
   Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Email Body: " & vbCrLf & "The following cells were modified:" & xRg.Address(False, False)
        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
Err1:
gChangeRange = ""
End Sub
Este comentário foi feito pelo moderador no site
Estou precisando de ajuda para acionar um e-mail com uma pequena alteração. Em vez de um valor numérico ou inserir as informações na célula manualmente, as células na coluna B mudarão para 'Y' acionadas a partir de uma fórmula em outras células dessa linha. A fórmula para a coluna B é =IF([@[Quantity in Stock]]>[@[Reorder Level]],,"Y"), mostrando que o estoque está baixo e precisa de um novo pedido. Preciso acionar um e-mail automatizado quando o valor de uma célula mudar na coluna B para 'Y', então sou notificado automaticamente por e-mail sobre o estoque baixo. Eu tentei tudo que posso pensar em alterar códigos já fornecidos, mas nada parece funcionar para mim... por favor me ajude!
Este comentário foi feito pelo moderador no site
Olá Kathryn F,
O código VBA a seguir pode ajudá-lo a resolver o problema. Por favor, tente. Obrigado pelo seu comentário.
Dim xRg As Range
'Update by Extendoffice 20221019
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("B:B"), Target)
If xRg Is Nothing Then Exit Sub
If Target.Value = "Y" Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi there" & vbNewLine & vbNewLine & _
"This is line 1" & vbNewLine & _
"This is line 2"
On Error Resume Next
With xOutMail
.To = "Email Address"
.CC = ""
.BCC = ""
.Subject = "send by cell value test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub

Private Sub Worksheet_Calculate()
Dim xTarget As String
Dim xRg As Range
'Set xRg = Application.Range("B:B")
Set xRg = Intersect(Range("B:B"), Selection.EntireRow)
On Error GoTo Err01
If xRg.Value = "Y" Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub
Este comentário foi feito pelo moderador no site
Olá e obrigado por este tutorial.
J'ai cependant une hardé pour l'application de la plage de recherche.
Das le code, j'ai demandé para verifier la plage C2:C4.
Tout fonctionne bien si je modifie C2, C3 ou C4 uniquement. Cela fonctionne aussi si je modifie C2+C3+C4 ou C2+C3 ou C3+C4 mais cela ne fonctionne pas si j'ai un saut na plage. Por exemplo, si je modifie C2 et C4 sans modificador C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur ?
Merci d'avance.

Private Sub Worksheet_Change (ByVal Target As Range)
'Atualizado por Extendoffice 20220921
Dim xAddress como String
Dim xDRg, xRgSel, xRg como intervalo

xEndereço = "C2:C4"
Definir xDRg = Range(xAddress)
Definir xRgSel = Intersect(Target, xDRg)
Em erro GoTo Err1
Se não xRgSel não é nada, então
Se ThisWorkbook.gChangeRange = "" Então
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Outro
Definir xRg = Range(ThisWorkbook.gChangeRange)
Definir xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
Se acabar
Se acabar
Exit Sub
Erro1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub


-----

Opção explícita
gChangeRange público como string
Private Sub Workbook_AfterSave (ByVal Success As Boolean)
'Atualizado por Extendoffice 20220921
Dim xRgSel, xRg como intervalo
Dim xOutApp como objeto
Dim xMailItem como objeto
Dim xMailBody As String
'Em Erro Continuar Próximo
Em erro GoTo Err1
Definir xRg = Range(gChangeRange)
Se não xRg não é nada, então
Set xOutApp = CreateObject("Outlook.Application")
Definir xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cher Jean-Marie, " & vbCrLf & vbCrLf & "Dans le fichier : " & ThisWorkbook.FullName & vbCrLf & "A página de células foi modificada :" & xRg.Address(False, False) & vbCrLf & vbCrLf & "Cordialemento"
Com xMailItem
.To = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées " & ThisWorkbook.Name
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Exibição
Terminar com
Definir xRgSel = Nada
Definir xOutApp = Nada
Definir xMailItem = Nada
Se acabar
Erro1:
gChangeRange = ""
End Sub
Este comentário foi feito pelo moderador no site
Gostaria de enviar o e-mail para 5 pessoas. Qual delineador é usado entre cada endereço de e-mail?
Este comentário foi feito pelo moderador no site
Oi Joe,
Por favor, use um ponto e vírgula para separar os endereços de e-mail.
Este comentário foi feito pelo moderador no site
Aqui está outra pergunta. Se uma célula for alterada, ela enviará um e-mail. se 3 células mudarem, ele envia 3 emails. Como você para isso para que ele envie apenas 1 e-mail quando as edições forem concluídas?
Este comentário foi feito pelo moderador no site
Oi Joe,
Supondo que você tenha especificado o intervalo como "A2:E11" no código. Como posso verificar quando todas as edições foram concluídas?
Não há comentários postados aqui ainda

Siga-nos

Copyright © 2009 - www.extendoffice.com. | Todos os direitos reservados. Distribuído por ExtendOffice. | | | Mapa do site
Microsoft e o logotipo do Office são marcas comerciais ou marcas registradas da Microsoft Corporation nos Estados Unidos e / ou em outros países.
Protegido por Sectigo SSL