Clever-Excel-Forum

Normale Version: Excel Bereich an einem bestimmten Datum an E-mail senden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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...

Code in die Zwischenablage
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

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
Seiten: 1 2