Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1668to1672
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

E-Mails automatisch versenden

E-Mails automatisch versenden
29.01.2019 17:26:20
Philip
Hallo zusammen,
ich möchte aus einer Tabelle, worin E-Mail Adressen aufgelistet sind eine automatische E-Mail mit vorgeschrieben Text und Betreff schreiben lassen.
Beispielsweise steht in der Spalte C3 bis C100 oder Tabellenspalte "E-Mail" die jewiligen E-Mails.
Ich habe es bis jetzt so gelöst:

Sub Test()
Dim objOutlook As Object
Dim objMail As Object
Dim i As Integer
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
For i = 3 To 100
With objMail
.To = Cells(i, 3)
.Subject = Range("G3")
.body = Range("H3")
.Display
End With
Next
Set objOutlook = Nothing
Set objMail = Nothing
End Sub

Damit bekomme ich aber nur die letzte E-Mail Adresse angezeigt.
Für mich ist VBA absolutes Neuland und ich hoffe, dass mir trotzdem geholfen werden kann.
Testdatei:
https://www.herber.de/bbs/user/127269.xlsx

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mails automatisch versenden
29.01.2019 17:48:39
Sepp
Hallo Philip,
ohne deine Datei angesehen zu haben.
Wenn du wirklich 297 Mails versenden willst, dann so.
Sub Test()
  Dim objOutlook As Object
  Dim objMail As Object
  Dim i As Integer

  Set objOutlook = CreateObject("Outlook.Application")

  For i = 3 To 300
    Set objMail = objOutlook.CreateItem(0)
    With objMail
      .To = Cells(i, 3)
      .Subject = Range("G3")
      .body = Range("H3")
      .Display
    End With
    Set objMail = Nothing
  Next

  Set objOutlook = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Wenn du eine Mail an 297 Empfänger schicken willst, dann so.
Sub Test2()
  Dim objOutlook As Object
  Dim objMail As Object
  Dim varAddress As Variant, strTo As String

  Set objOutlook = CreateObject("Outlook.Application")
  
  varAddress = Range("C3:C100")
  strTo = Join(Application.Transpose(varAddress), ";")

  Set objMail = objOutlook.CreateItem(0)
  With objMail
    .To = strTo
    .Subject = Range("G3")
    .body = Range("H3")
    .Display
  End With
   

  Set objMail = Nothing
  Set objOutlook = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: E-Mails automatisch versenden
30.01.2019 09:17:16
Philip
Hallo Sepp,
vielen Dank für die schnelle Hilfe.
Dein zweiter Code funktioniert soweit sehr gut und entspricht meinen Vorstellungen.
Wie schaffe ich es nun, dass in der Adresszeile nicht jede E-Mail Adresse aufgeführt wird, sondern für jede E-Mail in der Spalte "c" eine separate E-Mail mit dem Betreff aus Zelle "G3" und der Nachricht aus Zelle "H3" verfasst wird?
AW: E-Mails automatisch versenden
30.01.2019 17:35:26
Sepp
Hallo Philip,
genau das macht der erste Code!
Wenn du die mails gleich versenden willst ohne sie zu öffnen, dann ersetze .Display durch .Send .
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: E-Mails automatisch versenden
31.01.2019 07:31:29
Philip
Hallo Sepp,
mein Fehler... das stimmt. Der erste Code macht alles richtig, super danke!
Kann man noch einbauen, dass es keine E-Mail öffnet, wenn nichts in der Zelle steht?
Oder anders: Wenn ich die Tabelle mit einer neuen E-Mail erweitere, möchte ich nicht jedes mal den Code bei "i = 3 to ..." um eine Stelle erweitern müssen.
AW: E-Mails automatisch versenden
31.01.2019 14:39:36
Sepp
Hallo Philip,
klar geht das.
Sub Test()
  Dim objOutlook As Object, objMail As Object
  Dim rng As Range

  Set objOutlook = CreateObject("Outlook.Application")

  With ActiveSheet  'oder With Sheets("Tabellenname") 
    For Each rng In .Range("C3:C" & Application.Max(3, .Cells(.Rows.Count, 3).End(xlUp).Row))
      If Len(Trim(rng)) Then
        Set objMail = objOutlook.CreateItem(0)
        With objMail
          .To = Trim(rng)
          .Subject = .Range("G3")
          .body = .Range("H3")
          .Display
          'oder 
          '.Send 
        End With
        Set objMail = Nothing
      End If
    Next
  End With

  Set objOutlook = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
Korrektur!
31.01.2019 17:47:47
Sepp
Hallo nochmal,
da hatte ich eine Fehler drin!
Sub Test()
  Dim objOutlook As Object, objMail As Object
  Dim rng As Range, strSubject As String, strBody As String

  Set objOutlook = CreateObject("Outlook.Application")

  With ActiveSheet  'oder With Sheets("Tabellenname") 
    strSubject = .Range("G3")
    strBody = .Range("H3")
    For Each rng In .Range("C3:C" & Application.Max(3, .Cells(.Rows.Count, 3).End(xlUp).Row))
      If Len(Trim(rng)) Then
        Set objMail = objOutlook.CreateItem(0)
        With objMail
          .To = Trim(rng)
          .Subject = strSubject
          .body = strBody
          .Display
          'oder 
          '.Send 
        End With
        Set objMail = Nothing
      End If
    Next
  End With

  Set objOutlook = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Korrektur!
04.02.2019 09:28:59
Philip
Hallo Sepp,
nochmals vielen Dank für die Mühen!
Dein Code hilft mir schon mal sehr viel weiter.
Falls du noch etwas Muse hast erkläre ich im Folgenden an einer Testexcel die noch bestehenden Probleme:
https://www.herber.de/bbs/user/127398.xlsm
In dieser Excel ist nun folgender Code enthalten:
Sub Auto_Mail()
Dim objOutlook As Object, objMail As Object
Dim rng As Range, strSubject As String, strBody As String
Set objOutlook = CreateObject("Outlook.Application")
With ActiveSheet  'oder With Sheets("Tabellenname")
strSubject = Worksheets("Mail").Range("B2")
strBody = Worksheets("Mail").Range("B4")
For Each rng In .Range("F4:F" & Application.Max(3, .Cells(.Rows.Count, 3).End(xlUp).Row))
If Len(Trim(rng)) Then
Set objMail = objOutlook.CreateItem(0)
With objMail
.GetInspector
.To = Trim(rng)
.Subject = strSubject
.body = strBody & vbNewLine & .body
.Attachments.Add "C:\Users\Christian Harzendorf\OneDrive\Arbeit\BIKAR\Konstruktion\ _
Anfrage.zip"
'.Display
.Send
End With
Set objMail = Nothing
End If
Next
End With
Set objOutlook = Nothing
End Sub

Meine Anliegen sind nun:
- Ist es möglich den Pfad des Anhangs aus einer Zelle zu nehmen, wie in der TabelleMail B3?
- Ist es möglich den "Senden"-Button auf die TabelleMail zu packen?
- Ist es möglich eine Art Auswahl zu treffen, welche E-Mails aus welcher Tabelle genommen werden?
-> z.B., wenn in einer Zelle in der TabelleMail "Zerspanung" steht, dann wird die Tabelle "Zerspanung" genommen.
Falls dir das zu viel ist, verstehe ich es aber auch vollkommen.
Ich bedanke mich dennoch schon mal im Voraus.
Anzeige
AW: Korrektur!
05.02.2019 05:53:33
Philip
Hallo Sepp,
ich bin absolut beeindruckt!
Das wird mir sehr helfen, vielen Dank für die Mühen.
Ich werde mir wohl doch mal etwas VBA-Basics aneignen müssen.
Nochmals herzlichen Dank, funktioniert wunderbar.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige