Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Automatisch Email versenden - Probleme mit Makro

Betrifft: Automatisch Email versenden - Probleme mit Makro von: Christoph
Geschrieben am: 31.10.2014 12:20:07

Moin Moin,

mit nachfolgendem Makro (natürlich in Verbindung mit einem Weiteren), verschicke ich automatisch eine Email, wenn das heutige Datum mit einem bestimmten Datum einzelner Projekte übereinstimmt.

Sub testemail()
     
     Dim objApp  As Outlook.Application
     Dim objMail As Outlook.MailItem
     Dim llast As Long
     Dim i As Long
     Dim wkb As Workbook
     Dim wks As Worksheet
     
     Set objApp = CreateObject("Outlook.Application")
     Set objMail = objApp.CreateItem(olMailItem)
     Set wkb = ThisWorkbook
     Set wks = wkb.Sheets(1)
     
     llast = wks.UsedRange.SpecialCells(xlCellTypeLastCell).Row
     sbody = ""
     For i = 5 To llast
        If wks.Cells(i, 8).Value = wks.Cells(2, 2).Value Then
        ssubject = ssubject & " - " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
        sbody = sbody & vbCrLf & "> " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
        End If
     Next i
     objMail.To = "xy@gmy.de"
     objMail.Subject = "+++ Vorlaufstart folgender Projekte" & ssubject & " +++"
     objMail.Body = "Sehr geehrter XY," & vbCrLf & vbCrLf & "für nachfolgende Projekte muss ein  _
Kostenvoranschlag erstellt werden:" & vbCrLf & sbody
     objMail.ReadReceiptRequested = True
            
     objMail.Display
     objMail.Send
 
     Set objApp = Nothing
     Set objMail = Nothing
     
   End Sub
Es funktioniert soweit auch alles. Allerdings habe ich zwei Probleme, bei denen ich etwas auf dem Schlauch stehe, da meine VBA-Möglichkeiten sehr limitiert sind und ich mir alles gerade im Stile von 'learning by doing' versuche anzueignen.

1.) Wenn das heutige Datum mit keinem der Projektdaten übereinstimmt, wird trotzdem eine Email mit dem Inhalt von objMail.Subject und objMail.Body versendet. Muss ich beides in die If-Schleife integrieren, um zu verhindern, dass überhaupt eine Email versendet wird, wenn die If-Bedingung nicht zutrifft?

2.) Die zu Grunde liegende Tabelle wird von mir und noch zwei weiteren Kollegen genutzt. Gibt es eine Möglichkeit mit der ich sicherstellen kann, dass die Email nur ein einziges Mal gesendet wird? Nicht dass bspw. ich die Tabelle am Tag als erstes öffne und die Email versendet wird und Kollege B dann beim öffnen auch nochmals eine Mail verschickt. Überdies wäre es natürlich schön, wenn die Email immer von der gleichen Adresse versendet wird. Man könnte es natürlich so machen, dass nur ich die Version mit dem Makro habe, aber dies ist nicht praktikabel, da wir alle in einer Datei arbeiten müssen.

Für Denkanstöße wäre ich unendlich dankbar und wünsche jedem im Forum ein wunderschönes Wochenende.

VG, Christoph

  

Betrifft: AW: Automatisch Email versenden - Probleme mit Makro von: Rudi Maintaire
Geschrieben am: 31.10.2014 12:32:39

Hallo,
1.

.....
     Next i
     if ssubject <>"" Then
     objMail.To = "xy@gmy.de"
     objMail.Subject = "+++ Vorlaufstart folgender Projekte" & ssubject & " +++"
     objMail.Body = "Sehr geehrter XY," & vbCrLf & vbCrLf & "für nachfolgende Projekte muss ein  _
 _
Kostenvoranschlag erstellt werden:" & vbCrLf & sbody
     objMail.ReadReceiptRequested = True
            
     objMail.Display
     objMail.Send
end if

2. Schreib das Sendedatum in eine Zelle und frag es ab.
....
....
If sheets(1).Range("A1") <>Date then
Set objApp = CreateObject("Outlook.Application")
.....
.....
objMail.send
sheets(1).Range("A1")=Date
.....

Gruß
Rudi


  

Betrifft: AW: Automatisch Email versenden - Probleme mit Makro von: fcs
Geschrieben am: 31.10.2014 12:46:10

Hallo Christoph,

du muss eine Prüfung einbauen, ob die Body-Variable nach dem durchlaufen der For-Next-Schleife Inhalt hat. Wenn die For-Next-Schleife nur einen Treffer enthalten kann, dann kannst du den Senden-Code auch in den If-Part innerhalb der Schleife verschieben.

Den doppelten Versand kannst du vermeiden, indem das Makro in eine Testzelle nach dem Versand das aktuelle Datum einträgt. Zu Beginn des Makros wird geprüft, ob das Datum in der Testzelle = dem aktuellen Datum ist und das Makro ggf. beendet.

Bei der Sender-Adresse kann ich nicht weiterhelfen. Meines Wissens kann man nicht mit der gleichen Absender-Adressen aus verschiedenen E-Mail-Accounts heraus senden.

Gruß
Franz

Sub testemail()
  
  Dim objApp  As Outlook.Application
  Dim objMail As Outlook.MailItem
  Dim llast As Long
  Dim i As Long
  Dim wkb As Workbook
  Dim wks As Worksheet
  
  Set objApp = CreateObject("Outlook.Application")
  Set objMail = objApp.CreateItem(olMailItem)
  Set wkb = ThisWorkbook
  Set wks = wkb.Sheets(1)
  'Prüfen ob heute schon E-Mail versendet
  If wks.Range("X1").Value = Date Then
    MsgBox "E-Mail wurde heute schon gesendet"
    GoTo Beenden
  End If
  llast = wks.UsedRange.SpecialCells(xlCellTypeLastCell).Row
  sbody = ""
  For i = 5 To llast
     If wks.Cells(i, 8).Value = wks.Cells(2, 2).Value Then
     ssubject = ssubject & " - " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
     sbody = sbody & vbCrLf & "> " & wks.Cells(i, 1).Value & " " & wks.Cells(i, 2).Value
     End If
  Next i
  If sbody <> "" Then
   objMail.To = "xy@gmy.de"
   objMail.Subject = "+++ Vorlaufstart folgender Projekte" & ssubject & " +++"
   objMail.Body = "Sehr geehrter XY," & vbCrLf & vbCrLf & _
      "für nachfolgende Projekte muss ein Kostenvoranschlag erstellt werden:" _
      & vbCrLf & sbody
   objMail.ReadReceiptRequested = True
          
   objMail.Display
   objMail.Send
   'Datum in Testzelle für E-Mail-Versand eintragen
   wks.Range("X1").Value = Date
  Else
     MsgBox "Keine Daten zum Versenden per E-Mail gefunden!"
  End If
Beenden:
  Set objApp = Nothing
  Set objMail = Nothing
  
End Sub



  

Betrifft: AW: Automatisch Email versenden - Probleme mit Makro von: Christoph
Geschrieben am: 31.10.2014 13:31:58

Hallo Rudi, Hallo Franz,

vielen Dank für Eure Hilfe. Ihr habt mir wirklich sehr geholfen. Konnte das Ganze jetzt nochmal gut nachvollziehen, was mich in meinem VBA-Wissen sicher auch voran gebracht hat.

Vielen Dank und einen schönen Tag + entspanntes WE Euch.

VG, Christoph


 

Beiträge aus den Excel-Beispielen zum Thema "Automatisch Email versenden - Probleme mit Makro"