Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: E-Mail automatisch versenden wenn Zelleninhalt durch Formel

E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 10:00:56
René Serk
Hallo Leute,
ich kenne mich mit VBA Programmierung noch nicht doll aus, habe im Forum ein tolles Makro gefunden, welches mir bei meinem Problem helfen könnte. Das Makro habe ich schon ein wenig angepasst, um es zu testen. Ich bekomme es aber nicht hin, dass meine Vorstellung funktioniert. Ich lasse in der Range ("AJ49:AJ64") E-Mail-Adressen eintragen, wenn sie die Mail bekommen sollen. (1s ist der Eintrag dort vorhanden), durch mehrere Bedingung (Monat,Tag; Makro Uhrzeit mit Vergleich Uhrzeit; usw.) Das Makro müsste so angepasst werden, dass die Mails versendet werden wenn dort die jeweiligen E-Mail-Adresse auftauchen. Steht nichts drin=keine Mail, stehen Einträge drin=dann Eintrag gleich Empfänger und versenden. Range ("AJ49:AJ64")
Bislang funktioniert das Makro nur wenn ich die E-Mail-Adresse nicht durch eine Formel sondern händisch eintrage und das auch nur zu einer konstanten Emailadresse.

Ich bitte nun Hilfe um dieses Problem zu lösen.

Option Explicit

'----- Setup >------
Private Const °Input_ As String = "a.a@muster.com*"

Private Const °Email_Address_To As String = "a.a@muster.com"
Private Const °Email_Title As String = "Text"
Private Const °Email_Text As String = "hier steht ein Text "
'-----------


'================== Events >==================
Private Sub Worksheet_Change(ByVal Target As Range)
'-------- Worksheet_Change(ImputCell) >--------
'*After_Cell_Input_Change
If Not Intersect(Target, Range("AJ49:AJ64")) Is Nothing Then
If Target.Value Like °Input_ Then
Dim sText As String
sText = °Email_Text
sText = sText & vbCrLf & "Eingabewert =" & Target.Value & " in Zeile: " & Target.Address
Send_Email (sText)
End If
End If
'----------------
End Sub
'====================================



'================== Functions >==================
Private Sub Send_Email(ByVal sText As String)
'------------- Send_Email() >-------------
'---- Send with Outlook >----
Dim app_Outlook As Outlook.Application
Set app_Outlook = New Outlook.Application

'-- Email einstellen >--
Dim objEmail As Outlook.MailItem

'-- Send Email >--
Set objEmail = app_Outlook.CreateItem(olMailItem)
objEmail.To = °Email_Address_To
objEmail.Subject = °Email_Title
objEmail.Body = sText
objEmail.Display False
objEmail.Send '*optional
'----


' Abschluss >
Set objEmail = Nothing
Set app_Outlook = Nothing
'

'--------
'--------------------------
End Sub

'====================================


Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 12:10:50
ralf_b
Worksheet_Change reagiert nur auf direkte Zelländerungen. Änderungen durch Formelergebnisse werden nicht erkannt.
Es reagiert auch schon auf den ersten Buchstaben, den du eingegeben hast. Vielleicht ist das nicht die richtige Art den E-Mailversand auszulösen.
Um die Adressaten aus dem Zellbereich auszulesen mußt du natürlich diese Elemente auch dynamisch gestalten und nicht als Konstanten nutzen. d.h. die Zellwerte vor dem Versenden in die entsprechenden Felder der Email eintragen. Aktuell übergibst du nur einen Text an das Emailmakro.

Entscheide dich ob du die Mails bei jeder Zelländerung direkt versenden möchtest oder nach Abschluß der Bearbeitung der Tabelle durch einen Auslöser z.b. Button.

Anschliessend muß die betreffende Zelle auch wieder geleert werden. Sonst steht nach Versand dann ja noch eine Emailadresse drin.

Anzeige
E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 14:07:29
René S
OK danke, das ist für mich nicht das Problem ich kann dort auch eine 1 eintragen lassen, dann müsste die 1 aber in jeder Zeile einer E-Mail-Adresse zugeordnet sein.
Die Mail soll versendet werden so bald dort die 1 auftritt das ist jetzt bei mir jeden Tag um 15:00 Uhr. Wenn ich das um ändere steht die 1 für eine Sekunde drin bei dem die Bedingungen erfüllt sind. Meine Frage ist wie der Code umgeändert werden müsste. Ich könnte die E-Mail-Adressen auch in Range ("AK49:AK64") eintragen, die müssten dann aber im Makro zugeordnet werden wenn Range ("AJ49:AJ64")=1 dann Mail an die, die in Range ("AK49:AK64") stehen.
Die Mail soll nur in dem Augenblick versendet werden wenn dort die 1 steht. (Zelländerung würde doch 2 Mails auslösen oder?)
Mit der objEmail.To Zeile hast du Recht wenn die Adressen dort stehen bleiben. Betreff und Text ist bei mir aber immer gleich
Anzeige
AW: E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 14:58:32
ralf_b
mal beispielhaft mittels Parmeterübergabe aus Spalte AK



'im Change
'-----------------------------
If Target.Value = 1 Then 'wenn du ne 1 benutzt
Dim sText As String
sText = Modul1.°Email_Text 'private Variablen/Konstanten aus anderen Modulen können evtl. nicht zugreifbar sein.

#das mit dem Eingabewert passt hier irgendwie nicht rein.
sText = sText & vbCrLf & "Eingabewert =" & Target.Value & " in Zeile: " & Target.Address

'zwei Parameter an Emailmakro übergeben
Send_Email sText, Cells(Target.Row, "AK")
End If
'---------------------------


Sub Send_Email(ByVal sText$, sTo$)

'....
objEmail.to = sTo
objEmail.subject = °Email_Title
objEmail.Body = sText
'-----
Anzeige
AW: E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 16:42:31
RenéS
Danke habe ich leider nicht ganz verstanden :c

wie würde der Code denn komplett aussehen.
Ich hatte noch in der Beschreibung bei der Antwort von mir einen Fehler.
Steht in AJ49=1 (ist nur 1 Sekunde der Fall) dann Mail an AK49, Steht in AJ50=1 (ist nur 1 Sekunde der Fall) dann Mail an AK50 bis Zeile AJ64 AK64
Anzeige
AW: E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 17:01:54
ralf_b
Vielleicht erklärst du mal den ganzen Ablauf, den du dir da vorstellst.
wie kommen den die Einträge in die zu prüfenden Zellen zu Stande? Händischer Eintrag oder Formel?
Soll immer nur die Mail für die eine Zelle verschickt werden?

das ist der Wert aus AK Cells(Target.Row, "AK") Target ist die aktive Zelle.
Dieser wird an das Sendmail makro übergeben. Wie die Varaible dann im Makro heist ist relativ egal. Hier heisst sie "sTo"
Send_Email sText, Cells(Target.Row, "AK") ist der Befehl, der das Makro startet und die 2 Parameter mit übergibt.

Send_Email(ByVal sText$, sTo$) im Kopf des Makros wird festgelegt wie die 2 Parameter im Makro heissen werden.
objEmail.to = sTo hier wird der Wert aus AK als Adresse benutzt.

Anzeige
AW: E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 18:36:25
RenéS
In den Zellen AJ49 bis AJ64 wird jetzt per Formel eine 1 eingetragen.
wenn in AJ49 die 1 drin steht (1Sekunde) dann sende AK49 die Mail
wenn in AJ50 die 1 drin steht (1Sekunde) dann sende AK50 die Mail
wenn in AJ51 die 1 drin steht (1Sekunde) dann sende AK51 die Mail
.
.
.
..
wenn in AJ64 die 1 drin steht (1Sekunde) dann sende AK64 die Mail

allso überprüfe die Range("AJ49:AJ64") und sende Allen die gleiche Mail bei denen die 1 steht

ich lade mal die Datei ohne Makro hoch

dazu müsste man an den jeweiligen Tag ein b eintragen in der Range("C13:Ag28") der Monat müsste stimmen und in der Zelle B7 müsste durch Uhrzeitvergleich um 15:00 Uhr eine 1 stehen das funktioniert soweit alles

also ich trage schonmal ein b ein und speicher es ab (dann könntest Du in B7 mal die 1 eintragen und es wird jetzt in Range ("AJ49:AJ64") überall die 1 stehen. die Zelle neben der 1 soll die Mail bekommen. das ganze ist natürlich variabel.

hoffe das ist jetzt gut genug erklärt

https://www.herber.de/bbs/user/168389.xlsx
Anzeige
AW: E-Mail automatisch versenden wenn Zelleninhalt durch Formel
28.03.2024 23:15:43
ralf_b
https://www.herber.de/bbs/user/168394.xlsm

das Change Makro reagiert jetzt auf B7, steht dort eine 1 wird sendemail aufgerufen , dort wird der Bereich AJ durchlaufen und geprüft ob dort eine 1 steht.

Ich bezweifele aber das der Bereich innerhalb einer Sekunde abgearbeitet werden kann.
Anzeige
AW: E-Mail automatisch versenden wenn Zelleninhalt durch Formel
29.03.2024 08:04:38
RenéS
OK vielen Dank erstmal, werde ich nach dem Urlaub mal testen.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

E-Mail automatisch versenden basierend auf Zellinhalt in Excel


Schritt-für-Schritt-Anleitung

Um E-Mails automatisch zu versenden, wenn ein bestimmter Wert in einer Zelle erreicht wird, kannst du das folgende VBA-Skript verwenden. Beachte, dass du Microsoft Outlook installiert haben musst, da das Skript darauf basiert.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (deineArbeitsmappe)“ > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    
    Private Const Email_Title As String = "Benachrichtigung"
    Private Const Email_Text As String = "Hier steht dein Text"
    
    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim cell As Range
       If Not Intersect(Target, Range("AJ49:AJ64")) Is Nothing Then
           For Each cell In Intersect(Target, Range("AJ49:AJ64"))
               If cell.Value = 1 Then
                   Send_Email cell.Offset(0, 1).Value  ' E-Mail-Adresse in der Nachbarzelle
               End If
           Next cell
       End If
    End Sub
    
    Private Sub Send_Email(ByVal sTo As String)
       Dim app_Outlook As Outlook.Application
       Set app_Outlook = New Outlook.Application
       Dim objEmail As Outlook.MailItem
       Set objEmail = app_Outlook.CreateItem(olMailItem)
       objEmail.To = sTo
       objEmail.Subject = Email_Title
       objEmail.Body = Email_Text
       objEmail.Send
       Set objEmail = Nothing
       Set app_Outlook = Nothing
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Teste das Makro, indem du in die Zellen AJ49 bis AJ64 eine 1 eingibst. Die E-Mail sollte automatisch an die Adresse in der benachbarten Zelle gesendet werden.


Häufige Fehler und Lösungen

  • Fehler: Das Makro wird nicht ausgeführt, wenn der Wert durch eine Formel gesetzt wird.

    • Lösung: Das Worksheet_Change-Ereignis wird nur bei manuellen Änderungen ausgelöst. Um auch Formeländerungen zu erfassen, könntest du eine andere Trigger-Methode verwenden, wie z.B. ein Button.
  • Fehler: E-Mail wird an falsche Adressen gesendet.

    • Lösung: Stelle sicher, dass die E-Mail-Adressen korrekt in der Nachbarzelle (AK49 bis AK64) eingetragen sind.

Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, könntest du auch Power Automate (ehemals Microsoft Flow) nutzen, um E-Mails basierend auf Excel-Daten zu versenden. Diese Methode ist jedoch komplizierter und erfordert eine Verbindung zu Microsoft 365.


Praktische Beispiele

  1. Beispiel 1: Wenn in Zelle AJ49 eine 1 steht, wird eine E-Mail an die Adresse in AK49 gesendet.
  2. Beispiel 2: Wenn mehrere Zellen in der Range (AJ49:AJ64) auf 1 gesetzt werden, werden für jede Zelle E-Mails an die entsprechenden Adressen gesendet.

Tipps für Profis

  • Optimierung: Du kannst die E-Mail-Benachrichtigung optimieren, indem du zusätzliche Bedingungen einfügst, z.B. das Versenden nur zu bestimmten Zeiten.

  • Debugging: Verwende Debug.Print im Code, um Ausgaben im Direktfenster des VBA-Editors zu überprüfen. Dies kann helfen, Probleme zu identifizieren.

  • Sicherheit: Stelle sicher, dass Makros in Excel aktiviert sind, um das Skript auszuführen.


FAQ: Häufige Fragen

1. Wie kann ich das E-Mail-Format ändern?
Du kannst den Email_Text im Skript anpassen, um den Inhalt der E-Mail zu ändern.

2. Kann ich mehrere E-Mails gleichzeitig versenden?
Ja, das Skript kann so angepasst werden, dass es E-Mails an mehrere Empfänger in einer Schleife sendet.

3. Was muss ich tun, wenn ich keine E-Mail erhalte?
Überprüfe die E-Mail-Adressen in der Zelle AK49 bis AK64 und stelle sicher, dass deine Outlook-Einstellungen korrekt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige