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

Wie sende ich eine E-Mail, wenn eine bestimmte Zelle in Excel geändert wird?

In diesem Artikel geht es um das Senden einer E-Mail über Outlook, wenn eine Zelle in einem bestimmten Bereich in Excel geändert wird.

E-Mail senden, wenn die Zelle in einem bestimmten Bereich mit VBA-Code geändert wird


E-Mail senden, wenn die Zelle in einem bestimmten Bereich mit VBA-Code geändert wird

Wenn Sie automatisch eine neue E-Mail mit angehängter aktiver Arbeitsmappe erstellen müssen, wenn eine Zelle im Bereich A2: E11 in einem bestimmten Arbeitsblatt geändert wird, kann Ihnen der folgende VBA-Code helfen.

1. Klicken Sie in dem Arbeitsblatt, in dem Sie E-Mails basierend auf der geänderten Zelle in einem bestimmten Bereich senden müssen, mit der rechten Maustaste auf die Registerkarte Blatt und dann auf Code anzeigen aus dem Kontextmenü. Siehe Screenshot:

2. Beim Auftauchen Microsoft Visual Basic für Applikationen Bitte kopieren Sie den folgenden VBA-Code und fügen Sie ihn in das Code-Fenster ein.

VBA-Code: E-Mail senden, wenn die Zelle in einem bestimmten Bereich in Excel geändert wird

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

Anmerkungen:

1). Im Code A2: E11 ist der Bereich, auf dem Sie E-Mails senden.
2). Bitte ändern Sie den E-Mail-Text nach Bedarf xMailBody Zeile im Code.
3). Ersetze das E-Mail-Adresse mit der E-Mail-Adresse des Empfängers in der Zeile .To = "E-Mail-Adresse".
4). Ändern Sie den Betreff der E-Mail in der Zeile .Subject = "Arbeitsblatt geändert in" & ThisWorkbook.FullName.

3. Drücken Sie die Taste Andere + Q Tasten gleichzeitig zum Schließen der Microsoft Visual Basic für Applikationen Fenster.

Von nun an wird jede Zelle im Bereich A2: E11 geändert. Es wird eine neue E-Mail mit der aktualisierten Arbeitsmappe erstellt. Alle angegebenen Felder wie Betreff, Empfänger und E-Mail-Text werden in der E-Mail aufgelistet. Bitte senden Sie die E-Mail.

HinweisHinweis: Der VBA-Code funktioniert nur, wenn Sie Outlook als E-Mail-Programm verwenden.


In Verbindung stehende Artikel:


Die besten Tools für die Office-Produktivität

Kutools for Excel löst die meisten Ihrer Probleme und erhöht Ihre Produktivität um 80%

  • Wiederverwendung: Schnell einfügen komplexe Formeln, Diagramme und alles, was du vorher benutzt hast; Zellen verschlüsseln mit Passwort; Mailingliste erstellen und E-Mails senden ...
  • Super Formelriegel (leicht mehrere Textzeilen und Formeln bearbeiten); Layout lesen (leichtes Lesen und Bearbeiten einer großen Anzahl von Zellen); In gefilterten Bereich einfügen...
  • Zellen / Zeilen / Spalten zusammenführen ohne Daten zu verlieren; Inhalt geteilter Zellen; Kombinieren Sie doppelte Zeilen / Spalten... doppelte Zellen verhindern; Bereiche vergleichen...
  • Wählen Sie Duplizieren oder Eindeutig Reihen; Wählen Sie Leere Zeilen (alle Zellen sind leer); Super Find und Fuzzy Find in vielen Arbeitsmappen; Zufällige Auswahl ...
  • Exakte Kopie Mehrere Zellen ohne Änderung der Formelreferenz; Referenzen automatisch erstellen zu mehreren Blättern; Aufzählungszeichen einfügen, Kontrollkästchen und mehr ...
  • Text extrahieren, Text hinzufügen, Nach Position entfernen, Leerzeichen entfernen;; Paging-Zwischensummen erstellen und drucken; Inhalt und Kommentare zwischen Zellen konvertieren...
  • Superfilter (Speichern und Anwenden von Filterschemata auf andere Blätter); Erweiterte Sortierung nach Monat / Woche / Tag, Häufigkeit und mehr; Spezialfilter fett, kursiv ...
  • Kombinieren Sie Arbeitsmappen und Arbeitsblätter;; Tabellen basierend auf Schlüsselspalten zusammenführen; Daten in mehrere Blätter aufteilen; Batch-Konvertierung von xls, xlsx und PDF...
  • Mehr als 300 leistungsstarke Funktionen. Unterstützt Office / Excel 2007-2021 und 365. Unterstützt alle Sprachen. Einfache Bereitstellung in Ihrem Unternehmen oder Ihrer Organisation. 30-tägige kostenlose Testversion mit allen Funktionen. 60 Tage Geld-zurück-Garantie.
kte tab 201905

Office Tab Bringt die Oberfläche mit Registerkarten in Office und erleichtert Ihnen die Arbeit erheblich

  • Aktivieren Sie das Bearbeiten und Lesen von Registerkarten in Word, Excel und PowerPoint, Publisher, Access, Visio und Project.
  • Öffnen und erstellen Sie mehrere Dokumente in neuen Registerkarten desselben Fensters und nicht in neuen Fenstern.
  • Steigert Ihre Produktivität um 50 % und reduziert jeden Tag Hunderte von Mausklicks für Sie!
officetab unten
Kommentare (37)
Noch keine Bewertungen. Bewerten Sie als Erster!
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Ich stecke im folgenden VB-Code fest. Ich versuche, eine E-Mail-Benachrichtigung an den Benutzer zu erhalten, wo die Daten geändert wurden. E-Mail funktioniert, aber wenn ich eine Änderung vornehme, wird die E-Mail sofort initiiert, aber ich möchte eine E-Mail, wenn die Excel-Tabelle gespeichert und geschlossen wird, nachdem alle Änderungen an allen betroffenen Benutzern vorgenommen wurden. Dies sollte auch für alle Blätter in der gesamten Excel-Arbeitsmappe funktionieren.

Bitte helfen ...

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

'****Deklaration von Objekten und Variablen*****

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 = False Application.DisplayAlerts = False

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

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


ActiveWorkbook.Speichern
'***********Öffnen der Outlook-Anwendung***********

Wenn nicht, dann ist xRgSel nichts

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

xMailBody = "Zelle(n) " & xRgSel.Address(False, False) & _
" im Arbeitsblatt '" & Me.Name & "' wurden geändert am " & _
Format$(Jetzt, "mm/dd/yyyy") & " at " & Format$(Jetzt, "hh:mm:ss") & _
" by " & Environ$("Benutzername") & "."
'***********Suche Empfängerliste************

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

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

End If

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

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

End If

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

mailTo = "pakxro**@gmail.com"

End If
'*************E-Mail verfassen*************

Mit xMailItem

.To = mailTo
.Subject = "Arbeitsblatt geändert in" & ThisWorkbook.FullName
.Body = xMailBody
'.Anlagen.Hinzufügen (DieseArbeitsmappe.VollständigerName)
.Anzeige

Ende mit

Setze xRgSel = nichts
Setze xOutApp = nichts
Setze xMailItem = nichts

End If

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Liebe Pankaj Shukla,
Posten Sie Ihre Excel-Frage in unserem Forum: https://www.extendoffice.com/forum.html um weitere Unterstützung zu Excel von unserem Excel-Profi zu erhalten.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Ich konnte das Makro erstellen, aber ich habe ein Problem. Ich möchte automatisch eine E-Mail senden, wenn eine Zelle einen bestimmten Schwellenwert erreicht. Die Zelle ist eine Formel. Wenn die Berechnungssumme unter die genannte Schwelle fällt, tut sie nichts; Wenn ich jedoch direkt in die Zelle tippe, wird das Makro wie geplant verarbeitet. Bringt die Formel das Makro durcheinander?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo Sissy-Jones,
Die Methode in diesem Artikel: Wie versendet man automatisch E-Mails basierend auf dem Zellenwert in Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html kann Ihnen helfen, das Problem zu lösen.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Lieber Admin,


Ich brauche deine Hilfe,



Ich habe ein Excel, um die Details der täglichen Arbeit unseres Außendienstmitarbeiters zu überwachen. Ist es also möglich, eine E-Mail aus dem Excel-Blatt auszulösen, wenn dieser Typ die Daten in diesem Excel-Blatt nicht zu einem bestimmten Zeitpunkt aktualisiert hat?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo,
Kann da nicht helfen.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Wenn ich den Zellenwert anstelle der Adresse senden möchte ... was soll ich dann im Code ändern?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo,
Sie können den folgenden VBA-Code ausprobieren.

Private Sub Worksheet_Change (ByVal-Ziel als Bereich)
Dim xRgSel als Bereich
Dim xOutApp als Objekt
Dim xMailItem als Objekt
Dim xMailBody als String
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = Falsch
Setze xRg = Range("A2:E11")
Setze xRgSel = Intersect(Target, xRg)
ActiveWorkbook.Speichern
Wenn nicht, dann ist xRgSel nichts
Set xOutApp = CreateObject("Outlook.Application")
Setze xMailItem = xOutApp.CreateItem(0)
xMailBody = "Zelle(n) " & xRgSel.Address(False, False) & _
xRgSel.Value & _
" im Arbeitsblatt '" & Me.Name & "' wurden geändert am " & _
Format$(Jetzt, "mm/dd/yyyy") & " at " & Format$(Jetzt, "hh:mm:ss") & _
" by " & Environ$("Benutzername") & "."

Mit xMailItem
.To = "E-Mail-Adresse"
.Subject = "Arbeitsblatt geändert in" & ThisWorkbook.FullName
.Body = xMailBody
.Anlagen.Hinzufügen (DieseArbeitsmappe.VollständigerName)
.Anzeige
Ende mit
Setze xRgSel = nichts
Setze xOutApp = nichts
Setze xMailItem = nichts
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Was ist, wenn wir nur die aktualisierten Kommentare in dieser Zelle und nicht den gesamten Zellenwert haben möchten? Es sollten nur die neuesten Kommentare angezeigt werden, die in der Zelle hinzugefügt wurden
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hast du das herausgefunden?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Tolle Informationen.
Frage zu den Informationen, die der E-Mail hinzugefügt werden können.
Anhand deines Beispiels oben....

Wenn Sie einen Wert in F4 hätten, wie würden Sie den F4-Wert in die E-Mail aufnehmen, die generiert wurde, als D4 geändert wurde?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
wenn ich dann die ganze Zeile senden muss?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Ich habe den obigen VBA-Code ausprobiert: E-Mail senden, wenn Zelle in einem bestimmten Bereich in Excel geändert wird. Dieses VBA funktioniert für mich außer dem Senden von E-Mails. Wenn die Daten im angegebenen Bereich geändert werden, wird automatisch eine E-Mail mit geänderten Zelldetails generiert. Die E-Mail wird jedoch nicht automatisch an den Empfänger gesendet, und der Benutzer muss in der E-Mail auf die Schaltfläche „Senden“ klicken. Was ich hier suche, ist, dass die E-Mail automatisch an die Empfänger gesendet werden muss, wenn sie generiert wird. Bitte helfen Sie mir, einen Code dafür bereitzustellen. Vielen Dank
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo Jimmy Joseph,
Bitte ersetzen Sie die Zeile „.Display“ durch „.Send“. Hoffe, ich kann helfen. Vielen Dank für Ihren Kommentar.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
hallo; Gibt es eine Möglichkeit, den angezeigten Text mithilfe von Informationen aus anderen Zellen (aus der ersten Zeile und der ersten Spalte) zu ändern? Wenn ich beispielsweise die Zelle K15 ändere, möchte ich in die Nachrichteninformationen zu den Zellen A15 und K1 aufnehmen? was soll ich am code ändern? Danke sehr
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo Laona. Findest du heraus, wie das geht?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo. Wie ändere ich den Code so, dass eine E-Mail an eine andere E-Mail-Adresse gesendet wird, wenn ein anderer Zellbereich bearbeitet wird?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Irgendwelche Hilfe bei dieser Anfrage? Ich habe das gleiche Problem. Ich möchte mehrere E-Mail-Adressen pro Zeile hinzufügen, aber wenn ich eine Zeile ändere, ändert sich das gesamte Arbeitsblatt. Wie kann ich die Änderungen nur auf eine Zeile beschränken?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Zeile bearbeiten:
1). Im Code ist A2:E11 der Bereich, auf dessen Grundlage Sie E-Mails senden.
und
3). Ersetzen Sie die E-Mail-Adresse durch die E-Mail-Adresse des Empfängers in Zeile .To = "E-Mail-Adresse".

Funktioniert gut.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Können Sie das bitte näher erläutern. Wie wiederholen Sie den Code, um ihn an eine andere E-Mail zu senden, basierend auf einem anderen Bereich, der geändert wird? Ich habe versucht, den folgenden Code zu kopieren und einzufügen und gemäß Ihrem Kommentar zu ändern, aber immer noch scheint nur der erste Bereich den Befehl auszuführen und die E-Mail zu schreiben.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hat jemand darauf eine Antwort?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo, ich habe versucht, E-Mails auf meinem Blatt mit einem auf dem Blatt geänderten Wert zu senden. Wenn in Spalte H der Status auf ="4" geändert wird, sollte die Auftrags-ID links an einen Benutzer gesendet werden. Das Blatt arbeitet dynamisch, sodass ich einen Bereich von D9:D140 habe, in dem Auftrags-IDs gespeichert werden und Statusänderungen im selben Bereich auf H9:H140 vorgenommen werden. Wie kann ich das Ziel erreichen und die Bestell-ID an meinen Kunden senden, wenn der Status auf ="4" geändert wurde?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Wäre es möglich, anstelle der geänderten Zelladresse eine andere Referenzzelle im xMailBody in derselben Spalte anzuzeigen?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo Sam, meinst du damit, eine Referenzzelle zufällig in derselben Spalte der geänderten Zellenadresse auszuwählen? Oder manuell eine Referenzzelle in die xMailBody-Zeile des Codes einzugeben? Es ist einfach, eine Referenzzelle manuell in den Code einzugeben. Schließen Sie einfach die Referenzzelle wie unten gezeigt in doppelte Anführungszeichen ein: xMailBody = "Cell(s) " & "D3" & ", " & "D8" & _

Dieser Kommentar wurde vom Moderator auf der Website minimiert
Ist es möglich, dies so zu ändern, dass die E-Mail nur angezeigt wird, wenn eine Zelle in einem Bereich auf "Ja" geändert wurde? Möchte, dass es nichts tut, wenn es ein anderer Wert ist.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Vielen Dank für den Code, dieser Code funktioniert, wenn ich den Wert eingebe und die Eingabetaste drücke. Aber in meinem Fall füllt sich die Zelle automatisch mit der Formel, und wenn der Wert erreicht ist, wird die E-Mail nicht geöffnet, sodass der Code in diesem Fall nicht funktioniert. Vielen Dank im Voraus!
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo hakana,
Der folgende VBA-Code kann Ihnen helfen, das Problem zu lösen. Bitte versuchen Sie es. Vielen Dank für dein Feedback.

Private Sub Worksheet_Change(ByVal Target As Range)
'Aktualisiert von Extendoffice 2022/04/15
Dim xRgSel als Bereich
Dim xOutApp als Objekt
Dim xMailItem als Objekt
Dim xMailBody als String
Dim xBoolean As Boolean
Dim xItsRG als Bereich
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = Falsch
xBoolesch = Falsch
Setze xRg = Range("E2:E13")

Setze xItsRG = Intersect(Target, xRg)
Setze xDDs = Intersect(Target.DirectDependents, xRg)
Setze xDs = Intersect(Target.Dependents, xRg)
Wenn nicht (xItsRG ist nichts), dann
Setzen Sie xRgSel = xItsRG
xBoolean = Wahr
ElseIf Not (xDDs Is Nothing) Then
Setzen Sie xRgSel = xDDs
xBoolean = Wahr
ElseIf Not (xDs Is Nothing) Dann
Setzen Sie xRgSel = xDs
xBoolean = Wahr
End If


ActiveWorkbook.Speichern
Wenn xBoolean Dann
Debug.Print xRgSel.Address


Set xOutApp = CreateObject("Outlook.Application")
Setze xMailItem = xOutApp.CreateItem(0)
xMailBody = "Zelle(n) " & xRgSel.Address(False, False) & _
" im Arbeitsblatt '" & Me.Name & "' wurden geändert am " & _
Format$(Jetzt, "mm/dd/yyyy") & " at " & Format$(Jetzt, "hh:mm:ss") & _
" by " & Environ$("Benutzername") & "."

Mit xMailItem
.To = "E-Mail-Adresse"
.Subject = "Arbeitsblatt geändert in" & ThisWorkbook.FullName
.Body = xMailBody
.Anlagen.Hinzufügen (DieseArbeitsmappe.VollständigerName)
.Anzeige
Ende mit
Setze xRgSel = nichts
Setze xOutApp = nichts
Setze xMailItem = nichts
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo, ich habe einen ähnlichen Code erstellt, aber ich möchte eine Bedingung ***, bei der beim Löschen eines Zellenwerts keine E-Mail gesendet wird, wenn er gespeichert/geschlossen wird. Es wird nur dann eine E-Mail gesendet, wenn ein Zellenwert eingegeben wurde. Wissen Sie, wie das geht? Das ist mein Code:

CODE FÜR AUTOMATISCHE E-MAIL AN JEMANDEN, WENN EXCEL-ARBEITSBUCH AKTUALISIERT WIRD

BLATTCODE:

Option Explicit 'Excel-Arbeitsblatt-Änderungsereignisbereich
Private Sub Worksheet_Change (ByVal-Ziel als Bereich)
If Not Intersect(Target, Range("C3:D62")) ist Nothing Then
'Target.EntireRow.Interior.ColorIndex = 15
Range("XFD1048576").Value = 15
End If
Wenn Not Intersect(Target, Range("I3:J21")) ist dann nichts
'Target.EntireRow.Interior.ColorIndex = 15
Range("XFD1048576").Value = 15
End If
End Sub


ARBEITSBUCHCODE:

Private Sub Workbook_BeforeClose (Abbrechen als boolescher Wert)
Wenn Me.Saved = False, dann Me.Save

Dim xOutApp als Objekt
Dim xMailItem als Objekt
Dim xName als Zeichenfolge

If Range("XFD1048576").Value = 15 Then
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Setze xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.VollständigerName
Mit xMailItem
.To = "E-Mail"
.CC = ""
.Betreff = "Nachricht"
.Body = "Nachricht!"
.Anhänge.*** xName
.Anzeige
'.schicken
Ende mit
End If
Setze xMailItem = nichts
Setze xOutApp = nichts



End Sub

Private Sub Workbook_Open ()
Bereich ("XFD1048576").Löschen
End Sub
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo zusammen,

der Code würde gut für meine Ebene 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 würden 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 der E-Mail, wenn aber jemand anders Filtert wird er die Änderung nicht mehr finden.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo Esser123,
Die folgenden VBA-Codes können helfen. Nachdem Sie die Zellen im angegebenen Bereich geändert und die Arbeitsmappe gespeichert haben, wird eine E-Mail angezeigt, in der alle geänderten Zellen im E-Mail-Text aufgelistet sind, und die Arbeitsmappe wird auch als Anhang in die E-Mail eingefügt. Bitte befolgen Sie die folgenden Schritte:
1. Öffnen Sie das Arbeitsblatt, das die Zellen enthält, auf deren Grundlage Sie E-Mails senden möchten, klicken Sie mit der rechten Maustaste auf die Blattregisterkarte und klicken Sie auf Code anzeigen aus dem Rechtsklickmenü. Kopieren Sie dann den folgenden Code in das Sheet(Code)-Fenster.
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. Doppelklicken Sie im Visual Basic-Editor DiesesWorkbook im linken Bereich, kopieren Sie dann den folgenden VBA-Code in die ThisWorkbook (Code) Fenster.
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
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Ich brauche etwas Hilfe beim Auslösen einer E-Mail mit einer geringfügigen Änderung. Anstelle eines numerischen Werts oder der manuellen Eingabe der Informationen in die Zelle ändern sich die Zellen in Spalte B in „Y“, ausgelöst durch eine Formel in anderen Zellen in dieser Zeile. Die Formel für Spalte B lautet =IF([@[Quantity in Stock]]>[@[Reorder Level]],,"Y") und zeigt an, dass der Bestand nur noch wenig auf Lager ist und eine Nachbestellung erforderlich ist. Ich muss eine automatische E-Mail auslösen, wenn sich ein Zellenwert in Spalte B auf „Y“ ändert, damit ich automatisch per E-Mail über den niedrigen Bestand benachrichtigt werde. Ich habe alles versucht, was ich mir vorstellen kann, um bereits bereitgestellte Codes zu ändern, aber nichts scheint bei mir zu funktionieren ... bitte helfen Sie!
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo KathrynF,
Der folgende VBA-Code kann Ihnen helfen, das Problem zu lösen. Bitte versuchen Sie es. Danke für deinen Kommentar.
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
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo und vielen Dank für dieses Tutorial.
J'ai cependant une difficé pour l'application de la plage de recherche.
Dans le code, j'ai demandé à verifier la plage C2:C4.
Tout fonctionne bien si je modifie C2, C3 ou C4 uniquement. Cela fonctionne auch si je modifie C2+C3+C4 ou C2+C3 ou C3+C4 mais cela ne fonctionne pass si j'ai un saut dans la plage. Zum Beispiel, wenn Sie C2 und C4 ändern, ohne den Modifikator C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouve mon erreur ?
Danke im voraus.

Private Sub Worksheet_Change (ByVal-Ziel als Bereich)
'Aktualisiert von Extendoffice 20220921
Dim xAddress als Zeichenfolge
Dim xDRg, xRgSel, xRg As Range

xAdresse = "C2:C4"
Setze xDRg = Bereich(xAdresse)
Setze xRgSel = Intersect(Target, xDRg)
Bei Fehler GoTo Err1
Wenn nicht, dann ist xRgSel nichts
Wenn ThisWorkbook.gChangeRange = "" Dann
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
sonst
Setze xRg = Range(ThisWorkbook.gChangeRange)
Setze xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
End If
End If
Exit Sub
Fehler1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub


-----

Option Explizit
Öffentlicher gChangeRange als String
Private Sub Workbook_AfterSave (ByVal Success As Boolean)
'Aktualisiert von Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp als Objekt
Dim xMailItem als Objekt
Dim xMailBody als String
'Bei Fehler als nächstes fortfahren
Bei Fehler GoTo Err1
Setze xRg = Range(gChangeRange)
Wenn nicht xRg ist dann nichts
Set xOutApp = CreateObject("Outlook.Application")
Setze 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 & vbCrLf & "Herzlichen Glückwunsch"
Mit xMailItem
.To = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées " & ThisWorkbook.Name
.Body = xMailBody
.Anlagen.Hinzufügen (DieseArbeitsmappe.VollständigerName)
.Anzeige
Ende mit
Setze xRgSel = nichts
Setze xOutApp = nichts
Setze xMailItem = nichts
End If
Fehler1:
gChangeRange = ""
End Sub
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Ich möchte die E-Mail an 5 Personen senden. Welches Trennzeichen wird zwischen den einzelnen E-Mail-Adressen verwendet?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo Joe,
Bitte verwenden Sie ein Semikolon, um die E-Mail-Adressen zu trennen.
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hier ist eine andere Frage. Wenn sich eine Zelle ändert, sendet sie eine E-Mail. Wenn sich 3 Zellen ändern, werden 3 E-Mails gesendet. Wie stoppen Sie dies, sodass nur eine E-Mail gesendet wird, wenn die Änderungen abgeschlossen sind?
Dieser Kommentar wurde vom Moderator auf der Website minimiert
Hallo Joe,
Angenommen, Sie haben den Bereich im Code als "A2:E11" angegeben. Wie kann ich überprüfen, wann die gesamten Bearbeitungen abgeschlossen sind?
Es sind noch keine Kommentare vorhanden
Hinterlassen Sie Ihre Kommentare
Als Gast posten
×
Bewerte diese Nachricht:
0   Figuren
Vorgeschlagene Standorte

Folgen Sie uns

Copyright © 2009 - www.extendoffice.com. | Alle Rechte vorbehalten. Unterstützt von ExtendOffice. | Sitemap
Microsoft und das Office-Logo sind Marken oder eingetragene Marken der Microsoft Corporation in den USA und / oder anderen Ländern.
Geschützt durch Sectigo SSL