Hallo! Ich habe ein Excel 2016 und habe eine Frage. Kann man in Excel einen Befehl erstellen, der mir den Bereich B2:K12 automatisch an die E-Mail in Spalte O schickt? Dabei soll er nur die E-Mail senden, wenn in Spalte M ein x steht. Er soll dabei die Daten nehmen, die in der gleichen Zeile stehen, wo das x steht. Begrenzt auf Spalte N-Q. Im Anhang finden Sie die Datei. Geht das so, oder kann man das nicht so machen? Hoffe ihr könnt mir dabei helfen. Lg Marek
31.05.2020, 16:32 (Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2020, 16:32 von schauan.)
Hallöchen,
ja, so was geht. Wie man eine E-Mail sendet weißt Du? Falls nicht, dann schaue mal in unserem Forum - oben rechts ist die Suche.
Was wäre denn der "automatische" Auslöser? Ein Datum? Man könnte das Datum dann z.B. beim Öffnen der Exceldatei prüfen und dann die E-Mail absenden. Du müsstest Dir jedoch Gedanken machen, wie DU die E-Mails in Deinem Urlaub loswerden willst … Würde auch gehen, wenn Du Deinen Rechner an lässt und über den Taskmanager / die Aufgabenplanung Excel nebst der Datei jeden Tag startest.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
wie mal ein Ansatz, eine Idee zur Umsetzung Deines Projektes. Es wird nur eine Mail versendet, nämlich die aus der Zeile, in dem ein "x" steht. Ich habe Signatur und einen kleinen Kopftext eingefügt, den Du natürlich auch weglassen kannst. Der zu kopierende Bereich wird ebenfalls dynamisch ermittelt.
Bitte beachte auch die Ausführungen von Schauan zum Triggern des Mailcodes. Anstelle oder zusätzlich zum x könnte man auch das Datum als Vergleich nehmen...
Option Explicit Option COMPARE TEXT
Sub SendeMail() 'Sendet Mail mit integriertem Bereich als Bild mit Signatur 'Das Bild wird über das Kürzel ~ im Text platziert Dim WSh As Worksheet Dim sMailtext As String, sSignatur As String Dim sBer As String, iEinf As Integer, iZeile As Long Set WSh = ThisWorkbook.Sheets("Tabelle1") 'Blatt mit Maildaten For iZeile = 2 To WSh.UsedRange.Rows.Count If WSh.Cells(iZeile, "M").Value Like "x" Then sBer = WSh.Cells(iZeile, "Q").Value 'Kopierbereich GoTo Weiter End If Next iZeile MsgBox "Es wurde keine Mail versendet!", vbCritical, "Mail senden" Exit Sub Weiter: On Error Resume Next 'Bereich kopieren Do WSh.Range(sBer).CopyPicture Appearance:=xlScreen, Format:=xlBitmap If Err.Number = 0 Then Exit Do Err.Clear Loop With CreateObject("Outlook.Application").CreateItem(0) .BodyFormat = 3 'HTML-Format, Angabe optional .Subject = WSh.Cells(iZeile, "P").Value 'Betreff .To = WSh.Cells(iZeile, "O").Value 'Empfänger sMailtext = "Hallo,¶¶hier die Daten vom " _ & WSh.Cells(iZeile, "N").Value & "¶" .GetInspector: sSignatur = .HTMLBody 'Signatur holen .HTMLBody = Replace(sMailtext, "¶", "<br>") & sSignatur .Display iEinf = InStr(sMailtext, "~") 'Alternative Einfügestelle If iEinf = 0 Then iEinf = Len(sMailtext) 'Grafik Einfügestelle With .GetInspector.WordEditor.Application.Selection .Start = iEinf: .End = iEinf .Paste 'Grafik in Mail einfügen End With End With End Sub
02.06.2020, 18:14 (Dieser Beitrag wurde zuletzt bearbeitet: 02.06.2020, 18:14 von Marek.)
Hallo nochmals! Ich habe noch etwas wenig Erfahrung mit Makros und VBA-Codes. Wo müsste ich den Befehl "WSh.Range(sBer).Copy" einfügen? Ich hätte noch eine weitere Frage. Wenn ich den Makro ausführe, öffnet sich ja das Outlookfenster zum senden. Könnte man den Code auch so ändern, dass er es gleich sendet und nicht nochmals zeigt? Vielen Dank im Voraus! LG Marek
das direkte Versenden der eMail erfolgt mit .Send anstelle von .Display. Allerdings erfolgt in der Regel von Outlook eine Sicherheitsabfrage, die von VBA nicht umgangen werden kann.
Manche verwenden daher die Tastenanschlagsendefunktion: SendKeys "%s", True.
Hallo! Irgendwie funktioniert dieser Befehl .Send nicht bei mir. Wenn er die E-mail sendet, kopiert er die Tabelle nicht in die E-mail. Also versendet er mir eine leere E-mail. Mach ich was falsch? Ich habe nur den Befehl .Display mit dem Befehl .Send ausgewechselt. Eine andere Frage wäre noch: Wie meinen Sie das mit dem Sendkeys"%s",True? Müsste ich den wo dazu schreiben, oder statt dem .Display schreiben? Hoffe ihr könnt mir helfen. Vielen Dank im Voraus! LG Marek