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
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.
Hallo Marek,
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 ExplicitOption COMPARE TEXTSub 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 SubWeiter: 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 WithEnd Sub
viele Grüße
Karl-Heinz
Hallo!
Vielen vielen Dank!
Die Ideen funktionieren Super!
Lg
Marek
Vielen Dank für die Rückmeldung, Marek.
Übrigens, falls Du statt eines Bildes lieber den Original-Bereich in die Mail übernehmen möchtest, kannst Du einfach den Kopierbefehl abändern...
WSh.Range(sBer).Copy
viele Grüße
Karl-Heinz
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
Hallöchen,
mit der Zeile tauschen
WSh.Range(sBer).CopyPicture Appearance:=xlScreen, Format:=xlBitmap
Vielen vielen Dank!
LG
Marek
Hallo 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.
viele Grüße
Karl-Heinz
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