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

Cum să trimiteți e-mail dacă o anumită celulă este modificată în Excel?

Acest articol vorbește despre trimiterea unui e-mail prin Outlook atunci când o celulă dintr-un anumit interval este modificată în Excel.

Trimiteți e-mail dacă celula dintr-un anumit interval este modificată cu codul VBA


Trimiteți e-mail dacă celula dintr-un anumit interval este modificată cu codul VBA

Dacă trebuie să creați automat un nou e-mail cu registrul de lucru activ atașat atunci când o celulă din intervalul A2:E11 este modificată într-o anumită foaie de lucru, următorul cod VBA vă poate ajuta.

1. În foaia de lucru de care trebuie să trimiteți e-mail pe baza celulei modificate dintr-un anumit interval, faceți clic dreapta pe fila de foaie și apoi faceți clic pe Afișați codul din meniul contextual. Vedeți captura de ecran:

2. În fereastra pop-up Microsoft Visual Basic pentru aplicații fereastra, vă rugăm să copiați și să lipiți mai jos codul VBA în fereastra Cod.

Cod VBA: trimiteți e-mail dacă celula dintr-un interval specificat este modificată în 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

notițe:

1). În cod, A2: E11 este intervalul pe care veți trimite e-mailuri.
2). Vă rugăm să schimbați corpul e-mailului după cum aveți nevoie xMailBody linie în cod.
3). Inlocuieste Adresa de email cu adresa de e-mail a destinatarului în linie .To = "Adresă de e-mail".
4). Schimbați subiectul e-mailului în linie .Subject = "Foaie de lucru modificată în" & ThisWorkbook.FullName.

3. apasă pe Alt + Q tastele simultan pentru a închide Microsoft Visual Basic pentru aplicații fereastră.

De acum înainte, orice celulă din intervalul A2: E11 este modificată, va fi creat un nou e-mail cu registrul de lucru actualizat atașat. Și toate câmpurile specificate, cum ar fi subiectul, destinatarul și corpul e-mailului, vor fi listate în e-mail. Vă rugăm să trimiteți e-mailul.

notițe: Codul VBA funcționează numai dacă utilizați Outlook ca program de e-mail.


Legate de articole:


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab
Comentarii (37)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Sunt blocat în codul VB de mai jos. Încerc să primesc notificare prin e-mail către utilizatorul în care datele au fost modificate. E-mailul funcționează, dar atunci când fac orice modificare, e-mailul a fost inițiat imediat, dar vreau e-mail când foaia Excel este salvată și închisă după ce am făcut toate modificările tuturor utilizatorilor care au afectat. De asemenea, acest lucru ar trebui să funcționeze pentru oricare dintre foile din întregul registru de lucru Excel.

Te rog ajută ...

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

'****Declarație de obiecte și variabile*****

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

La data de eroare CV următoare

Foi de calcul ("TargetSheet").Range("TargetRange").Select

Application.ScreenUpdating = Fals Application.DisplayAlerts = Fals

„Set xRg = Range(„A” & Rows.Count).End(xlUp).Row

Setați xRg = Interval ("A2:DA1000")
Set xRgSel = Intersect(Target, xRg)


ActiveWorkbook.Salvare
„************Deschiderea aplicației Outlook***********

Dacă nu xRgSel este nimic, atunci

Setați xOutApp = CreateObject("Outlook.Application")
Setați xMailItem = xOutApp.CreateItem(0)

xMailBody = „Celul(e)” & xRgSel.Address(False, False) & _
" din foaia de lucru '" & Me.Name & "' au fost modificate pe " & _
Format$(Acum, "ll/zz/aaaa") & " la " & Format$(Acum, "hh:mm:ss") & _
" prin " & Environ$ ("nume utilizator") & "."
„***********Găsirea listei de destinatari************

Dacă Cells(xRgSel.Row, "A").Value = "Pankaj" Atunci

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

Final, dacă

Dacă Cells(xRgSel.Row, "A").Value = "Nitin" Atunci

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

Final, dacă

Dacă Cells(xRgSel.Row, "A").Value = "Chandan" Atunci

mailTo = "pakxro**@gmail.com"

Final, dacă
„************ Compune e-mail*************

Cu xMailItem

.To = mailTo
.Subject = "Foaie de lucru modificată în" & ThisWorkbook.FullName
.Body = xMailBody
'.Atașamente.Adăugați (AcestWorkbook.FullName)
.Afişa

Se termina cu

Set xRgSel = Nimic
Setați xOutApp = Nimic
Set xMailItem = Nimic

Final, dacă

Application.DisplayAlerts = Adevărat
Application.ScreenUpdating = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Pankaj Shukla,
Postați întrebarea dvs. Excel pe forumul nostru: https://www.extendoffice.com/forum.html pentru a obține mai multe asistențe despre Excel de la profesionistul nostru Excel.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am reușit să creez macro-ul, totuși am o problemă. Aș dori să trimit automat un e-mail când o celulă atinge un anumit prag. Celula este o formulă. Când suma de calcul scade sub pragul menționat, nu face nimic; cu toate acestea, dacă tast direct în celulă, va procesa macro-ul așa cum a fost planificat. Formula încurcă macro-ul?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Sissy Jones,
Metoda din acest articol: Cum să trimiteți automat e-mailuri pe baza valorii celulei în Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html vă poate ajuta să rezolvați problema.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Stimate administrator,


Am nevoie de ajutorul vostru,



Am un Excel pentru a monitoriza detaliile zilnice ale lucrătorului nostru de pe teren, așa că este posibil să declanșez un e-mail din foaia Excel dacă acel tip nu a reușit să actualizeze datele din foaia Excel la timp.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Nu te pot ajuta cu asta.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dacă vreau să trimit valoarea celulei în loc de adresa... atunci ce trebuie să schimb în cod?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Puteți încerca codul VBA de mai jos.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dim xRgSel As Range
Dim xOutApp ca obiect
Dim xMailItem ca obiect
Dim xMailBody ca șir
La data de eroare CV următoare
Application.ScreenUpdating = Fals
Application.DisplayAlerts = Fals
Set xRg = Range("A2:E11")
Set xRgSel = Intersect(Target, xRg)
ActiveWorkbook.Salvare
Dacă nu xRgSel este nimic, atunci
Setați xOutApp = CreateObject("Outlook.Application")
Setați xMailItem = xOutApp.CreateItem(0)
xMailBody = „Celul(e)” & xRgSel.Address(False, False) & _
xRgSel.Value & _
" din foaia de lucru '" & Me.Name & "' au fost modificate pe " & _
Format$(Acum, "ll/zz/aaaa") & " la " & Format$(Acum, "hh:mm:ss") & _
" prin " & Environ$ ("nume utilizator") & "."

Cu xMailItem
.To = "Adresă de e-mail"
.Subject = "Foaie de lucru modificată în" & ThisWorkbook.FullName
.Body = xMailBody
.Atașamente.Adăugați (AcestWorkbook.FullName)
.Afişa
Se termina cu
Set xRgSel = Nimic
Setați xOutApp = Nimic
Set xMailItem = Nimic
Final, dacă
Application.DisplayAlerts = Adevărat
Application.ScreenUpdating = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Ce se întâmplă dacă vrem doar comentariile actualizate în acea celulă și nu întreaga valoare a celulei. Ar trebui să arate doar cele mai recente comentarii adăugate în celulă
Acest comentariu a fost redus la minimum de moderatorul de pe site
Ți-ai dat seama de asta?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Informații excelente.
Întrebare referitoare la informațiile care pot fi adăugate la e-mail.
Folosind exemplul dvs. de mai sus....

Dacă ați avea o valoare în F4, cum ați include valoarea F4 în e-mailul care a fost generat când D4 a fost modificat?
Acest comentariu a fost redus la minimum de moderatorul de pe site
dacă trebuie să trimit întregul rând?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am încercat mai sus codul VBA: Trimiteți e-mail dacă celula dintr-un interval specificat este modificată în Excel. Acest VBA funcționează pentru mine, cu excepția trimiterii de e-mail. Când datele sunt modificate în intervalul dat, este generat automat un e-mail cu detaliile celulei modificate. Cu toate acestea, e-mailul nu este trimis automat destinatarului, iar utilizatorul trebuie să facă clic pe butonul de trimitere din e-mail. Ceea ce caut aici este că e-mailul trebuie să fie trimis destinatarilor automat când este generat. Vă rog să mă ajutați să ofer un cod pentru asta. Mulţumesc mult
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Jimmy Joseph,
Vă rugăm să înlocuiți rândul „.Display” cu „.Send”. Sper că pot ajuta. Multumesc pentru comentariu.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut; Există o modalitate de a modifica textul afișat folosind informații din alte celule (de pe primul rând și prima coloană)? de exemplu, dacă schimb celula K15, vreau să includ în mesaj informații despre celulele A15 și K1? ce ar trebui sa schimb in cod? mulțumesc foarte mult
Acest comentariu a fost redus la minimum de moderatorul de pe site
salut Laona. afli cum se poate face asta?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna ziua. Cum modific codul astfel încât un e-mail să fie trimis la o altă adresă de e-mail dacă este editat un alt interval de celule?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Ajutor la aceasta cerere? Am aceeasi problema. Vreau să adaug mai multe adrese de e-mail pe rând, dar când schimb un rând, întreaga foaie de lucru se schimbă. Cum pot limita modificările la un singur rând?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Editează linie:
1). În cod, A2:E11 este intervalul pe care veți trimite e-mailuri.
și
3). Înlocuiți adresa de e-mail cu adresa de e-mail a destinatarului în rândul .To = „Adresă de e-mail”.

Merge bine.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Vă rog, puteți explica acest lucru în continuare. Cum repeți codul pentru a trimite la un e-mail diferit în funcție de modificarea unui alt interval. Am încercat să copiez și să inserez codul de mai jos și să-l schimb conform comentariului dvs., dar totuși doar primul interval pare să execute comanda și să scrie e-mailul.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Are cineva un răspuns la asta?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua, încercam să trimit e-mailuri pe foaia mea folosind o valoare modificată pe foaie. Dacă în coloana H starea va fi schimbată în ="4" ID-ul comenzii din stânga ar trebui trimis unui utilizator. Foaia funcționează dinamic, așa că am un interval de la D9: D140 în care sunt stocate ID-urile comenzii și se fac modificări de stare în același interval pe H9: H140. Cum pot atinge obiectivul de a face acest lucru și să trimit ID-ul comenzii clientului meu atunci când starea a fost schimbată la ="4"?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Ar fi posibil să afișați o celulă de referință diferită în xMailBody în aceeași coloană în locul adresei celulei modificate?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Sam, Vreți să selectați o celulă de referință la întâmplare în aceeași coloană a adresei celulei modificate? Sau introduceți manual o celulă de referință în linia xMailBody a codului? Este ușor să introduceți manual o celulă de referință în cod, doar includeți celula de referință cu ghilimele duble, așa cum se arată mai jos: xMailBody = "Celul(e)" & „D3” & ", " & „D8” & _

Acest comentariu a fost redus la minimum de moderatorul de pe site
Este posibil să schimbați acest lucru, astfel încât să afișeze e-mailul numai dacă o celulă dintr-un interval a fost modificată pentru a spune „Da”. Mi-ar plăcea să nu facă nimic dacă este o altă valoare.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mulțumesc pentru cod, acest cod funcționează când introduc valoarea și apăs pe Enter. Dar în cazul meu, celula se umple automat cu formulă, iar când valoarea este atinsă, nu deschide e-mailul, așa că codul nu funcționează în acest caz. Vă mulțumesc anticipat!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună hakana,
Următorul cod VBA vă poate ajuta să rezolvați problema. Vă rugăm să încercați. Multumim pentru feedback-ul dvs.

Private Sub Worksheet_Change(ByVal Target As Range)
„Actualizat de Extendoffice 2022/04/15
Dim xRgSel As Range
Dim xOutApp ca obiect
Dim xMailItem ca obiect
Dim xMailBody ca șir
Dim xBoolean ca boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
La data de eroare CV următoare
Application.ScreenUpdating = Fals
Application.DisplayAlerts = Fals
xBoolean = Fals
Setați xRg = Interval ("E2:E13")

Set xItsRG = Intersect(Target, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
Dacă nu (xItsRG este nimic) atunci
Setați xRgSel = xItsRG
xBoolean = Adevărat
ElseIf Not (xDDs is Nothing) Atunci
Setați xRgSel = xDDs
xBoolean = Adevărat
ElseIf Not (xDs is Nothing) Atunci
Setați xRgSel = xDs
xBoolean = Adevărat
Final, dacă


ActiveWorkbook.Salvare
Dacă xBoolean Atunci
Debug.Print xRgSel.Address


Setați xOutApp = CreateObject("Outlook.Application")
Setați xMailItem = xOutApp.CreateItem(0)
xMailBody = „Celul(e)” & xRgSel.Address(False, False) & _
" din foaia de lucru '" & Me.Name & "' au fost modificate pe " & _
Format$(Acum, "ll/zz/aaaa") & " la " & Format$(Acum, "hh:mm:ss") & _
" prin " & Environ$ ("nume utilizator") & "."

Cu xMailItem
.To = "Adresă de e-mail"
.Subject = "Foaie de lucru modificată în" & ThisWorkbook.FullName
.Body = xMailBody
.Atașamente.Adăugați (AcestWorkbook.FullName)
.Afişa
Se termina cu
Set xRgSel = Nimic
Setați xOutApp = Nimic
Set xMailItem = Nimic
Final, dacă
Application.DisplayAlerts = Adevărat
Application.ScreenUpdating = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua, am creat un cod similar, dar aș dori să *** o condiție în care, dacă o valoare a celulei este ștearsă, aceasta nu va trimite un e-mail când este salvată/închisă. Va trimite un e-mail numai atunci când a fost introdusă o valoare a celulei. Știi cum să faci asta? Acesta este codul meu:

COD PENTRU E-MAIL AUTOMAT CĂTRE CINEVA CÂND SE ACTUALIZAȚI CAIETUL DE LUCRU EXCEL

COD Foaie:

Opțiunea Explicită „Interval de evenimente de modificare a foii de lucru Excel
Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dacă nu se intersectează (Target, Range ("C3:D62")) nu este nimic, atunci
„Target.EntireRow.Interior.ColorIndex = 15
Interval("XFD1048576").Valoare = 15
Final, dacă
Dacă nu se intersectează (țintă, interval ("I3:J21")) este nimic, atunci
„Target.EntireRow.Interior.ColorIndex = 15
Interval("XFD1048576").Valoare = 15
Final, dacă
End Sub


COD CAIET DE LUCRU:

Private Sub Workbook_BeforeClose(Anulați ca boolean)
Dacă Eu.Salvat = Fals, atunci Eu.Salvează

Dim xOutApp ca obiect
Dim xMailItem ca obiect
Dim xName ca șir

If Range("XFD1048576").Valoare = 15 Atunci
La data de eroare CV următoare
Setați xOutApp = CreateObject("Outlook.Application")
Setați xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
Cu xMailItem
.To = „e-mail”
.CC = ""
.Subject = „mesaj”
.Body = "mesaj!"
.Atasamente.*** xNume
.Afişa
'.trimite
Se termina cu
Final, dacă
Set xMailItem = Nimic
Setați xOutApp = Nimic



End Sub

Private Sub Workbook_Open()
Interval("XFD1048576").Clear
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună tuturor,

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? So wie es jetzt ist ,würde er jede geänderte Zelle einzeln senden. Dies ist dann problematisch wenn zB 10 Zellen angepasst werden was 10 E-mails bedeuten 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 e-mail, wenn aber jemand anders Filtert wird er die Änderung nicht mehr finden.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Esser123,
Următoarele coduri VBA vă pot ajuta. După modificarea celulelor din intervalul specificat și salvarea registrului de lucru, va apărea un e-mail pentru a enumera toate celulele modificate din corpul e-mailului, iar registrul de lucru va fi inserat și ca atașament în e-mail. Vă rugăm să urmați următorii pași:
1. Deschideți foaia de lucru care conține celulele pe care doriți să trimiteți e-mailuri pe baza, faceți clic dreapta pe fila foii și faceți clic pe Afișați codul din meniul de clic dreapta. Apoi copiați următorul cod în fereastra foaie (cod).
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. În editorul Visual Basic, faceți dublu clic Acest manual de lucru în panoul din stânga, apoi copiați următorul cod VBA în ThisWorkbook (Cod) fereastră.
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
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am nevoie de ajutor pentru declanșarea unui e-mail cu o ușoară modificare. În loc de o valoare numerică sau de introducerea manuală a informațiilor în celulă, celulele din coloana B se vor schimba în „Y” declanșat de la o formulă din alte celule din acel rând. Formula pentru coloana B este =IF([@[Cantitatea în stoc]]>[@[Nivel de recomandă]],,"Y"), ceea ce arată că stocul este scăzut și necesită o recomandă. Trebuie să declanșez un e-mail automat când valoarea unei celule din coloana B se schimbă în „Y”, așa că sunt notificat automat prin e-mail cu privire la stocul scăzut. Am încercat tot ce mi se poate gândi în modificarea codurilor deja furnizate, dar nimic nu pare să funcționeze pentru mine... vă rog ajutați!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Kathryn F,
Următorul cod VBA vă poate ajuta să rezolvați problema. Vă rugăm să încercați. Multumesc pentru comentariu.
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
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua și vă mulțumesc pentru acest tutorial.
J'ai cependant une difficulté pour l'application de la plage de recherche.
Dans le code, j'ai cerut à verifica la plaja C2:C4.
Tout funcționează bine și modifică C2, C3 sau C4 numai. Cela fonctionne aussi si je modifie C2+C3+C4 sau C2+C3 sau C3+C4 mais cela nu functioneaza pas si j'ai un saut dans la plage. De exemplu, dacă modific C2 și C4 fără modificatorul C3.
Est-ce que quelqu'un ar putea m'aider pour m'indiquer où se trouve mon erreur ?
Vă mulțumesc anticipat.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
„Actualizat de Extendoffice 20220921
Dim xAddress ca șir
Dim xDRg, xRgSel, xRg As Range

xAdresă = „C2:C4”
Set xDRg = Range(xAddress)
Set xRgSel = Intersect(Target, xDRg)
La eroare GoTo Err1
Dacă nu xRgSel este nimic, atunci
Dacă ThisWorkbook.gChangeRange = "" Atunci
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Altfel
Set xRg = Range(ThisWorkbook.gChangeRange)
Set xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
Final, dacă
Final, dacă
Ieșiți din Sub
Err1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub


-----

Opțiune explicită
Public gChangeRange As String
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
„Actualizat de Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp ca obiect
Dim xMailItem ca obiect
Dim xMailBody ca șir
„La eroare, reluați următoarea
La eroare GoTo Err1
Set xRg = Range(gChangeRange)
Dacă nu xRg este nimic, atunci
Setați xOutApp = CreateObject("Outlook.Application")
Setați xMailItem = xOutApp.CreateItem(0)
xMailBody = "Cher Jean-Marie, " & vbCrLf & vbCrLf & "Dans le fichier : " & ThisWorkbook.FullName & vbCrLf & "La plage de cellules a été modifiée :" & xRg.Address(False, False) & vbCrLf & vbCr & „Cordialement”
Cu xMailItem
.To = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées " & ThisWorkbook.Name
.Body = xMailBody
.Atașamente.Adăugați (AcestWorkbook.FullName)
.Afişa
Se termina cu
Set xRgSel = Nimic
Setați xOutApp = Nimic
Set xMailItem = Nimic
Final, dacă
Err1:
gChangeRange = ""
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Aș dori să trimit e-mailul la 5 persoane. Ce delimitator este folosit între fiecare adresă de e-mail?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Joe,
Vă rugăm să utilizați punct și virgulă pentru a separa adresele de e-mail.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Iată o altă întrebare. Dacă o celulă se schimbă, trimite un e-mail. dacă se schimbă 3 celule, trimite 3 e-mailuri. Cum oprești acest lucru, astfel încât să trimită doar un e-mail când editările sunt făcute?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Joe,
Să presupunem că ați specificat intervalul ca „A2:E11” în cod. Cum pot verifica când s-au făcut toate editările?
Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL