Automatische Emailversand per Excel
#1
Hallo zusammen,

ich habe eine Aufgabe bekommen in meiner Ausbildung bekommen. Dabei geht es um den Emailversand aus Excel. Ich habe mich hier im Forum schon einmal schlau gemacht.
https://www.clever-excel-forum.de/thread-6489.html
Da ich leider gar keine Ahnung von VBA habe verstehe ich nicht wie ich meine Datei (im Anhang) anpassen kann.
Im Reiter Vorlage_Deutsch steht der zu versendende Text. In diesen Text müssen aber viele Informationen eingefügt werden. Zum Beispiel der Wochentag (Lieferant B8), Datum (Lieferant B4), in die Betreffzeile der Mail der Text " Abholung KW (Lieferant B7).
Ein großer Teil soll auch sein, dass in der Mail steht, was bis zum Datum an Bestellungen (Reite Abrufe) noch offen ist.

Als Beispiel soll zum Beispiel stehen, dass Lieferant AAAAAA bis einschließlich den 16.05.2019 noch drei Bestellungen zu liefern hat.

Beim klicken auf den Button "Mail" sollen dann alle Mails an die Lieferanten geschickt werden, welche bis zum 16.05.2019 noch offene Bestellungen haben.

Ich würde mich freuen, wenn mir jemand dabei helfen kann. ich habe die letzte Woche versucht die Programmierung aus dem anderem Thread zu verstehen, aber ohne irgendeine Erfahrung in dem Bereich verstehe ich null.

Danke Vorab für eure Versuche und Mühen.

Nordlicht 1


Angehängte Dateien
.xlsx   Test_Emailversand.xlsx (Größe: 94,32 KB / Downloads: 12)
Top
#2
Hi Nordlicht,

also wenn du gar keine Ahnung von VBA hast, dann wird das kaum möglich sein, dir nur eine Anleitung zu geben. Das sieht dann eher nach einer Komplettllösung aus, die mit ein paar Code-Zeilen nicht getan sein dürfte.

Natürlich ist dein Vorhaben umsetzbar, aber da sollte schon die Excel-Arbeitsmappe entsprechend angepasst werden. Den Mail-Text in einer "Form" finde ich dabei z.B. nicht so prickelnd. Schreibe den Text doch einfach in (unterschiedliche) Zellen. Dabei könntest du z.B. "Platzhalter" einbauen, die dann im Einzelfall mit Werten aus anderen Zellen gefüllt werden können, z.B. "[#Wochentag]" als Platzhalter, der dann programmtechnisch mit dem Wochentag aus deiner gewünschten Zelle ersetzt wird. Das Ganze setzt aber zumindest Grundlagen in der (VBA-) Programmierung voraus.

Mit deinen Formulierungen ist das gewünschte Ziel auch noch nicht hinreichend erklärt.
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Top
#3
Auch Hallo,

mal mein Ansatz

Code:
Sub Excel_Serienmail_mit_mehreren_Anlagen_via_Outlook_Senden()
   'Variablendefinition
   Dim OutApp As Object, Nachricht As Object
   Dim lngLetzteZelle As Long, lngC As Long, lngA As Long
   Dim wksAbruf As Worksheet
   Dim rngLieferant As Range
   Dim strErste As String, strDatensatz As String, strText As String
   Dim vntMenge As Variant
  
   'Variablen f?r Outlook
   Set OutApp = CreateObject("Outlook.Application")
   Set Nachricht = OutApp.CreateItem(0)
  
   Set wksAbruf = Worksheets("Abrufe")
  
   With Worksheets("Lieferanten")
      'letzte beschriebene Zeile im Tabellenblatt Lieferanten
      lngLetzteZelle = .Cells(.Rows.Count, 2).End(xlUp).Row
      'Schleife ?ber die Lieferanten
      For lngC = 21 To lngLetzteZelle
         Set rngLieferant = wksAbruf.Columns(1).Find(.Cells(lngC, 2).Value, LookIn:=xlValues, lookat:=xlWhole)
         'Falls der Lieferant im Tabellenblatt Abrufe gefunden wird
         If Not rngLieferant Is Nothing Then
            'wird der erste Treffer gespeichert
            strErste = rngLieferant.Address
            Do
               'ist der Lieferfrist erreicht.....
               If CDate(rngLieferant.Offset(, 1).Value) <= CDate(.Range("B4").Value) Then
                  '....wird die Nummer und die Anzahl in einer Variablen gespeichert
                  strDatensatz = strDatensatz & rngLieferant.Offset(, 2).Value & "::" & rngLieferant.Offset(, 3).Value & ";;"
               End If
               Set rngLieferant = wksAbruf.Columns(1).FindNext(rngLieferant)
               'suche solange bis der erste Treffer wieder gefunden wird
            Loop While rngLieferant.Address <> strErste
            'trennen in die Einzelauftr?ge...
            vntMenge = Split(strDatensatz, ";;")
            '... und aufbereiten f?r die Mail
            For lngA = 0 To UBound(vntMenge) - 1
               strText = strText & Replace(vntMenge(lngA), "::", " ") & "<br>"
            Next lngA
            
            'Mail
            Nachricht.To = .Cells(lngC, 3).Value
            Nachricht.Subject = "Abholung KW " & .Range("B7").Value
            Nachricht.htmlBody = "Sehr geehrte Damen und Herren,<br><br>anbei finden Sie die Abrufe f?r die n?chste Lieferung am " _
            & .Range("B8").Value & " den " & .Range("B4").Value & _
            ". Bitte pr?fen Sie die Anzahl und ob sich was im Backlog oder im Transit befindet. Bitte geben Sie mir R?ckmeldung" & _
            "um welche Ladungstr?ger es sich handelt und geben Sie mir die Ma?e und die Gewichte bis Morgen um 10 Uhr durch.<br><br>" & _
            .Cells(lngC, 1).Value & " " & .Cells(lngC, 2).Value & "<br><br>Teilenummer Menge<br>" & strText & _
            "<br>Vielen Dank im Voraus.<br><br>Mit freundlichen Gr??en / Kind regards"
            'Mail wird angezeigt
            Nachricht.display
            'Mail wird gesendet
         '   Nachricht.send
            strDatensatz = ""
            strText = ""
            'Warten auf Outlook
            Application.Wait (Now + TimeValue("0:00:05"))
         End If
        
      Next lngC
   End With
   Set Nachricht = Nothing
   Set OutApp = Nothing
End Sub
Gruß Stefan
Win 10 / Office 2016
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste