E-Mail nach Zellenprüfung
#11
hallo,

habe die funktion angepasst und sie läuft einwandfrei. nur noch eine kurze frage: besteht die möglichkeit, dass outlook statt für jedes projekt eine einzelne email zu öffnen, die jeweiligen projektnamen entsprechend der zuständigen sales mitarbeiter in eine einzige email verpackt.

gruß
Top
#12
Hallöchen,

in Outlook nicht. Excel liefert ja die Daten und löst den email-Versand aus. Im Moment wird dazu jede einzelne Zeile geprüft und ggf. Outlook gestartet und die email erzeugt. Man müsste also erst mal alle Daten sammeln und dann die "Sammlung" versenden.

Du möchtest da pro Mitarbeiter (= sales member ?) eine email, wenn ich es richtig verstanden habe?

In Deinem Beispiel gab es den member 1 und 3 je 2x, allerdings war bei beiden nur je 1x submitted. Es würde also bei je einer email mit dem Inhalt für das jeweilige "submitted" - Projekt bleiben.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#13
ok, danke.

genau pro mitarbeiter eine email.

gibt es denn die möglichkeit, dass outlook die email sofort automatisch versendet, ohne dass immer ein "neue email" fenster geöffnet wird und jede einzelne email manuell abgesendet werden muss?

gruß
Top
#14
Hallöchen,

das mit dem Absenden geht eigentlich nicht. Ich glaube, spätestens seit Office 2007, eventuell aber schon eher, hat Microsoft das unterbunden, damit das nicht zum "programmierten" Spamversand mißbraucht werden kann.
Um den "Rest" kümmer ich mich später, bin jetzt erst mal etwas offline Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#15
Hallo,

der code ist jetzt um einiges komplizierter geworden. Für die Zusammenfassung der Meldungen nutze ich jetzt zwei Collections. In die Collection der members werden Collections mit den jeweiligen Einträgen eingefügt. Die emails werden dann mit den Daten der Collections gefüllt.
Würde man nur die Zeilennummern übernehmen, müsste man die Daten aus der Tabelle holen. Würde aber auch gehen. In meinem Test hatte ich nur einen passenden Member mit 2 Einträgen Für das email. Ich hoffe, es klappt auch mit mehreren Wink


Code:
Option Explicit

' Verweis auf "Microsoft Outlook xxx Object Library"
' schauan
' Programmiert fuer Clever-Excel-Forum 2014
Sub SendInfoMail()
'Variablendekalrationen
Dim olApp As Outlook.Application
Dim objMail As Outlook.MailItem
Dim colMembers As Collection
Dim colSubmit As Collection
Dim iCnt1%, iCnt2%
Dim strSubject As String, strBody As String
'Daten sammeln
'Colection mit Members
Set colMembers = New Collection
'Bei Fehler mit naechster Anweisung weiter
On Error Resume Next
'Schleife ueber alle Eintragungen
For iCnt1 = 2 To Sheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).Row
  'Wenn Datum aelter als 183 Tage und Status submitted, dann
  If Sheets("Tabelle1").Cells(iCnt1, 2).Value < Date - 183 And _
     Sheets("Tabelle1").Cells(iCnt1, 4).Value = "submitted" Then
    Set colSubmit = New Collection
    'Erzeugen einer Collection mit Projekt;Datum;Member;Zeilennummer
    'Innere Schleife ueber alle Eintraege
    For iCnt2 = 2 To Sheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).Row
        'Wenn der Member der inneren Schleife dem der aeusseren entspricht, dann
        If Cells(iCnt2, 3) = Cells(iCnt1, 3) Then
          'Wenn Datum aelter als 183 Tage und Status submitted, dann
          If Sheets("Tabelle1").Cells(iCnt2, 2).Value < Date - 183 And _
               Sheets("Tabelle1").Cells(iCnt2, 4).Value = "submitted" Then
            'submit-colection fuellen
            colSubmit.Add Cells(iCnt2, 1).Value & ";" & Cells(iCnt2, 2).Value & ";" & Cells(iCnt2, 3).Value & ";" & iCnt2, Cells(iCnt2, 1) & "sm"
          'Ende Wenn Datum aelter als 183 Tage und Status submitted, dann
          End If
        'Ende Wenn der Member der inneren Schleife dem der aeusseren entspricht, dann
        End If
    'Ende Innere Schleife ueber alle Eintraege
    Next
    'member-colection
    colMembers.Add colSubmit, Cells(iCnt1, 3) & "sm"
  'Ende Wenn Datum aelter als 183 Tage und Status submitted, dann
  End If
'Ende Schleife ueber alle Eintragungen
Next
'Fehlerbehandlung zuruecksetzen
On Error GoTo 0
'Outlook-Anwendungsobjekt setzen
Set olApp = Outlook.Application

'Schleife  bis zur letzten gefuellten Zelle der Spalte B
For iCnt1 = 1 To colMembers.Count
  'Subjektstring und Bodystring zuruecksetzen
  strSubject = "": strBody = ""
  'email-Objekt setzen
  Set objMail = olApp.CreateItem(olMailItem)
  'mit dem email
  With objMail
      'an, gesucht auf Tabelle contacts aus dem 1. Eintrag der Subject-Collection des Members
      .To = Sheets("contacts").Cells(Sheets("contacts").Columns(1).Find(Split(colMembers(iCnt1)(1), ";")(2)).Row, 2).Value
      'variablen Teil von Betreff und Body String zusammensetzen
      'Schleife ueber alle gesammelten Eintraege eines Members
      For iCnt2 = 1 To colMembers(iCnt1).Count
        'Betreffstring zusammensetzen aus Projektnamen
        strSubject = strSubject & Split(colMembers(iCnt1)(iCnt2), ";")(0) & ", "
        'Bodystring aus Projekt und Datum zusammensetzen, mit Zeilenwechsel
        strBody = strBody & "Projekt: " & Split(colMembers(iCnt1)(iCnt2), ";")(0) & _
                          " Termin: " & Split(colMembers(iCnt1)(iCnt2), ";")(1) & vbLf
      'Ende Schleife ueber alle gesammelten Eintraege eines Members
      Next
      .Subject = "Es wird Zeit ... Projekt: " & strSubject
      'Textkoerper
      .Body = "Der Termin ist schon über 6 Monate ueberschritten. " & vbLf & strBody & "Mit freundlichen Grüßen"
      'email anzeigen
      .Display
  'Ende mit dem email
  End With
  'email-Objekt zuruecksetzen
  Set objMail = Nothing
'Ende Schleife  bis zur letzten gefuellten Zelle der Spalte B
Next
'Outlook-Objekt zuruecksetzen
Set olApp = Nothing
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#16
top, vielen dank schonmal. muss es noch anpassen und ausprobieren...
Top
#17
Hallo schauan,

das makro läuft soweit super.. habe allerdings noch zwei fragen.
habe die mappe mit einer neuen spalte (sales assistant) aktualisiert. können wir die noch als email empfänger in das makro integrieren und ist es möglich statt den tagen ( date - 180 days ) ein genaues datum anzugeben bsp. vor dem 01.04.2014?

danke und gruß


Angehängte Dateien
.xlsm   Mappe.xlsm (Größe: 15,75 KB / Downloads: 1)
Top
#18
Hallöchen,

Cc wir analog dem To programmiert, nur dann eben eine andere Spalte genommen. Ich hab hier mal eine 3, 6 und 4 geschrieben - Deine Excel-Mappe hier ist wahrscheinlich nicht wie die "richtige" aufgebaut. Die Blattnamen gibt es schon mal nicht Sad Du musst also mal durchzählen, ob die Spalten stimmen.

Code:
'im Prinzip so:
            'an
            .To = Sheets("contacts").Cells(Sheets("contacts").Columns(1).Find(Sheets("Requests_Database").Cells(iCnt, 5).Value).Row, 2).Value
            'Cc
            .Cc = Sheets("contacts").Cells(Sheets("contacts").Columns(3).Find(Sheets("Requests_Database").Cells(iCnt, 6).Value).Row, 4).Value

Das Datum vergleichst Du hier:

If Sheets("Requests_Database").Cells(iCnt, 4).Value < CDate("01.04.2014")
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#19
klasse. läuft einwandfrei. besten dank.
Top


Gehe zu:


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