AW: WENN, DANN - Email Versand durch Bedingung aus Excel heraus
11.02.2024 14:37:59
schauan
Hallöchen,
@Thorsten, so unterschiedlich wird die Programmierung direkt in Outlook auch nicht. Da muss man von Excel aus vielleicht sogar etwas mehr aufpassen, z.B. beim Objekthandling. Ich habe hier mal einen Code programmiert, wie er in Outlook verwendet werden kann.
Excel würde ich aber auch bevorzugen, zum einen bezüglich der Kenntnisse das TE und zum anderen wg. dem Makrohandling in Outlook.
Voraussetzung bei meiner Lösung:
In einer Datei C:\Test\Termine.xlsx stehen in Spalte A Termine, in B Adressen und in C Betreffs. Spalte D ist die Zusatzspalte für einen Logeintrag "x" für versendet.
Der Code wird im VBA-Editor in Outlook in ein neues Modul eingefügt - und erst mal per F5 oder "Ausführen" ausgeführt.
Beachte den Kommentar am Anfang des Makros bezüglich des Verweises.
Was so alles passiert, ist zum einen im Makro ausführlich kommentiert bzw. sieht man beim Ausführen. Nicht berücksichtigt sind bislang nicht gesendete EMails an vergangenen Tagen. Nicht berücksichtigt sind auch diverse weitere Fehlermöglichkeiten wie z.B. fehlende Exceldatei ...
Public Sub AufZu_Excel()
'Verweis auf Microsoft Excel ... setzen!
'Variablendeklarationen
'Objekte von Excel
Dim xlApp As Object, objWB As Object, objWS As Object
'Daten fuer EMail
Dim arrZeile
'Schleifenzaehler (Long)
Dim iCnt&
'Objekte von Outlook
Dim MyEmail As MailItem
'Bei Fehler Zeile ueberspringen (falls App holen nicht klappt)
On Error Resume Next
'Excel App holen
Set xlApp = GetObject(, "excel.application")
'Ende Bei Fehler Zeile ueberspringen
On Error GoTo 0
'Wenn App holen nicht geklappt hat, dann so. Excel sollte aber schon installiert sein ...
If xlApp Is Nothing Then Set xlApp = New Excel.Application
'Datei in Excel oeffnen
Set objWB = xlApp.Workbooks.Open("C:\Test\Termine.xlsx")
'Blatt mit Terminen zuweisen und aktivieren
Set objWS = objWB.Sheets("Tabelle1")
objWS.Activate
'Schleifenzaehler auf Startzeilennummr setzen
iCnt = 1
'auf dem Blatt Tabelle1 was tun
With objWS
'Schleife, solange irgendwas in der zelle steht
Do While .Cells(iCnt, 1).Value > ""
'Mit der Zelle was tun
With .Cells(iCnt, 1)
'Wenn das Datum dort heute ist, dann
If .Value = Date Then
'Wenn 4 Zellen daneben kein x steht (Mailwurde schon gesendet)
If Not(.Offset(0, 4).Value = "x") Then
'Daten der Zeile uebernehmen
arrzeile = .Resize(1, 5).Value
'Emailerstellung beginnen
Set MyEmail = Application.CreateItem(olMailItem)
'Mit der neuen EMail
With MyEmail
'Addressat
.To = arrzeile(1, 2)
'Wichtigkeit hoch
.Importance = olImportanceHigh
'Betreff
.Subject = arrzeile(1, 3)
'EMailtext
.Body = arrzeile(1, 4)
'EMailformat
.BodyFormat = olFormatHTML
'EMail anzeigen
.Display
'Ende Mit der neuen EMail
End With
'EMail senden
'MyEmail.Send
'4 Zellen daneben ein x schreiben
.Offset(0, 4).Value = "x"
'Ende Wenn das Datum dort heute ist, dann
End If
'Ende Wenn 4 Zellen daneben kein x steht
End If
'Ende Mit der Zelle was tun
End With
iCnt = iCnt + 1
'Ende Schleife, solange irgendwas in der zelle steht
Loop
'Ende auf dem Blatt Tabelle1 was tun
End With
'Exceldate speichern
objWB.Close savechanges:=True
'Excel beenden
xlApp.Quit
End Sub