Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
804to808
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
804to808
804to808
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
e-mail automatisch versenden bei Bedingung
26.09.2006 15:51:38
frank
Hallo Leute,
ich habe im Forum ein tolles makro gefunden welches mir bei meinem Problem sehr helfen könnte. Dieses schaut in C4 und weiter mit E4, F4... -> habe es mal so gelassen wegen den Urheberrechten!!
Ich brauche nun Hilfe um dieses etwas umzustricken. Habe von VBA außer Makrorecorder noch nicht viel Ahnung. Es sind mehr oder weniger Wenn abfragen.
Ich habe eine Tabelle welche Zeilenweise abgearbeitet werden soll.
Ich probiere mal dies zu veranschaulichen.
Das Programm soll folgendes machen:
Es soll Zeile für Zeile durchgegangen und nur eine mail abgeschickt werden wenn folgende Bedingungen erfüllt sind. Beginn in Zeile 1:
Wenn in Zelle F1 ein x steht und L1 leer ist und das heutige datum plus 7 Tage kleiner oder gleich dem datum in K1 dann Kopiere email Adresse von Zelle J1 nach L1 und sende eine mail an die Adresse welche in Zelle J1 steht.
Ich hoffe mir kann jemand auf die Sprünge helfen.
Gruß Frank

Sub Mail()
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Dim strFile As String, strRecipient As String, strSubject As String
Dim bolStatusBar
bolStatusBar = Application.DisplayStatusBar
Range("C4").Select
Do While ActiveCell <> ""
If ActiveCell > 0 Then
ActiveCell.Offset(-2, 0) = ""
End If
If ActiveCell <= 0 And ActiveCell.Offset(-2, 0) = "" Then
ActiveCell.Offset(-2, 0) = "ja"
' betrag = Format(ActiveCell, "0.00")' brauche ich nicht
Set objOutlook = CreateObject("Outlook.Application")
strRecipient = ActiveCell.Offset(-3, 0)
strSubject = "Erinnerung!"
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.Add(strRecipient)
objOutlookRecip.Type = olTo
.Subject = strSubject
.Body = "Hallo, " & vbLf & vbLf & _
"Denkt bitte an ... " & vbLf & vbLf & vbLf & _
"Mit freundlichen Grüßen" & vbLf & vbLf & vbLf & _
Application.UserName
weiter:
objOutlookRecip.Resolve
End With
Set objOutlook = Nothing
'objOutlookMsg.Display ' wird jede Mail vorher angeigt
objOutlookMsg.Send ' wird jede Mail gleich abgeschickt
Application.StatusBar = False
Application.DisplayStatusBar = bolStatusBar
End If
ActiveCell.Offset(0, 1).Select
Loop
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 17:01:59
Anton
Hallo Frank,
ich habe das Problem modular gelöst:
Du schreibst Deine Bedingungen:
If Range("F1").value = "x" then 'erste Prüfung ob "x" da ist
If Range("L1").value = "" then 'zweite Prüfung ob die Zelle leer ist
If Range ("K1").value Range("L1") = Range("J1").value 'der Kopiervorgang
Call Makro_Email_senden 'Aufruf eines zweiten Makros (siehe Unten)
End If
End if
End If
Hier Das Makro zum E-Mail versenden:
Du mußt Dir nur die Zellen ändern bzw. die Einträge direkt im Makro ändern.

Sub Excel_Serienmail_mit_mehreren_Anlagen_via_Outlook_Senden()
'Variablendefinition
Dim fs As Object            'Das ist eine Datei
Dim F As Object             '  ?
Dim OutApp As Object        'Das E-Mail-Programm
Dim Mail As Object          'Die für sich
Dim i As Integer            'Die abzuarbeitenden Zeilen
Dim y As Integer            'Die Zeilen der Dateien
Dim Msg As Integer          ' ? Rückgabewert der MSG-Box ?
Dim Nachricht As Variant    'Definition der E-Mail-Dtails
Dim AWS As String           'Übergabe der Datei/Pfad-Namen
Dim AnzEmpfänger As Integer 'Anzahl der Schleifenwiederholungen
Dim Auswahldatum As String  'Datum der Auswertungen eingeben (für die Datei-Auswahl)
Dim AnzDateien As Integer 'Anzahl der Schleifenwiederholungen
'Auswertungsdatum setzen
Auswahldatum = InputBox("Bitte geben Sie das Datum" & Chr(10) & "der Auswertung ein:" & Chr(10) & "(JJJJ-MM-TT) oder" & Chr(10) & "(JJJJ-'KW'-Wochennummer) oder" & Chr(10) & "(JJJJ-'Monat'-Monatnummer)", "Dateneingabe:")
Range("J1").Value = Auswahldatum
'Variablen füllen
'Filesystemobjekt erstellen
Set fs = CreateObject("Scripting.FileSystemObject")
'Hier die Anzahl Empfänger definieren
'Kann auch ein Range auf der Tabelle sein
AnzEmpfänger = Range("G1") + 1    '"+1" wegen der in der ersten Zeile stehenden Überschriften
AnzDateien = Range("H1")
'1. Fehlerprüfung
'Prüfen ob alle Inhalte vorhanden sind
'Wenn nicht wird das Makro abgebrochen
'In Spalte A steht der (Original)Empfänger
'In Spalte B steht der Kopie-Empfänger
'In Spalte C steht der Blindkopie-Empänger
'In Spalte D steht der Betreff
'In Spalte E steht der Text
For i = 2 To AnzEmpfänger       '2 wegen der in der ersten Zeile stehenden Überschriften
If Cells(i, 1) = "" Or Cells(i, 2) = "" Then
Msg = MsgBox("Unvollständige Angaben beim Empfänger in Zeile " & i, vbCritical + vbOKOnly, "Abbruch")
Exit Sub
End If
Next i
'2. Fehlerprüfung
'Mit dem FilesystemObjekt wird zuerst die Existenz
'der Dateien geprüft. Wenn eine nicht existiert
'wird das Makro abgebrochen
'Die Links auf deine Anlagen liegen im
'Bereich F2 : F3
For y = 2 To (AnzDateien + 1) 'Zahl der Dateien plus Überschriftenzeile
'Wenn eine Zelle leer ist, wird aus der Schleife ausgestiegen
'ohne weitere Fehlerprüfung
If Cells(y, 9) = "" Then Exit For
If fs.fileexists(Cells(y, 9)) = False Then
Msg = MsgBox("Die Datei: " & Cells(y, 9) & " in F" & y & " exitstiert nicht !" & vbCrLf & "Der Sendevorgang an; " & Cells(i, 1) & " wird abgebrochen!", vbCritical + vbOKOnly, "Dateifehler")
Exit Sub
End If
Next y
'Sendevorgang einleiten
For i = 2 To AnzEmpfänger       '2 wegen der in der ersten Zeile stehenden Überschriften
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)        'Initial-Stoß für Outlook
With Nachricht
.To = Cells(i, 1) 'irgendwer@irgendein-provider.de
'vielleicht per: .Recipients:=Array(Lyck.Lack@t-online.de,hausmeister@de.stabilus.com)
'oder per semikolon getrennt (als Formel-Code)
.cc = Cells(i, 2) 'irgendwerZweites@nochein-provider.de
'            .bcc = Cells(i, 3) 'irgendwerdrittes@blind-provider.de
.Subject = Cells(i, 4) 'Betreffzeile
.Body = Cells(i, 5) 'Sendetext"
For y = 2 To (AnzDateien + 1) 'Zahl der Dateien plus Überschriftenzeile
AWS = Cells(y, 9)
'Wenn die Zelle / Variable leer ist
'wird diese Schleife für die Attachments abgebrochen
If AWS = "" Then Exit For
.attachments.Add AWS
Next y
'Hier wird die Mail zuerst angezeigt
.Display
'Hier wird die Mail gleich in den Postausgang gelegt
'.Send
End With
'Variablen zurücksetzen
Set OutApp = Nothing
Set Nachricht = Nothing
'Warten auf Outlook :-))
Application.Wait (Now + TimeValue("0:00:05"))
Next i
End Sub

Servus,
Anton
Anzeige
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 17:55:01
frank
Hallo Anton,
vielen Dank für Deine Bemühungen.
Wenn ich das richtig interpretiere sind die ersten Zeilen mit der If Abfrage für das makro welches ich angegeben hatte und der professionelle Teil Deine Vorgehensweise.
Werde beide gleich ausprobieren.
Melde mich wenn ich es hinbekommen habe.
Danke Frank
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 18:50:11
frank
Hallo Anton
jetzt kommen schon meine ersten Probleme. Die IF Bedingungen kommen doch in meinem Makro an die stelle wo ich die erste Zellenauswahl starte, oder?
Wie stelle ich es denn an, dass wenn ich die drei Bedingungen abgefragt habe diese zur nächsten Zeile springt. Sind immerhin 100 Zeilen.
Sobald eine Bedingung nicht erfüllt ist soll keine Mail geschrieben werden sondern sofort zur nächsten Zeile und erneut die Bedingungen abgefragt.
Frank
Anzeige
AW: e-mail automatisch versenden bei Bedingung
26.09.2006 22:22:28
frank
Hallo,
irgendwie komme ich nicht klar. Habe mal meine Datei in Kurzform eingehängt. Vielleicht kannst du oder jemand anderes doch noch helfen.
Komme mit der schleife nicht zurecht Momentan hängt sich das makro dort auf, dass es keine e-mailadresse für AN: findet. Das blöde ist, dass wenn die zelle j2 nach l2 kopiert werden soll j2 leer ist. Tue mich mit cells und ranges verennen.
https://www.herber.de/bbs/user/37032.xls

Sub Mail()
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Dim strFile As String, strRecipient As String, strSubject As String
Dim bolStatusBar
Dim i
bolStatusBar = Application.DisplayStatusBar
For i = 2 To 1000
If Cells(i, 6).Value = "x" Then 'erste Prüfung ob "x" da ist
If Cells(i, 12).Value = "" Then 'zweite Prüfung ob die Zelle leer ist
If Cells(i, 11).Value <= DateValue(Date + 7) Then 'dritte Prüfung ob das Datum das erforderliche Alter hat
Cells(i, 10) = Cells(i, 12).Value 'der Kopiervorgang
Set objOutlook = CreateObject("Outlook.Application")
strRecipient = Cells(i, 10)
strSubject = "Erinnerung!"
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.Add(strRecipient)
objOutlookRecip.Type = olTo
.Subject = strSubject
.Body = "Hallo, " & vbLf & vbLf & _
"Denkt bitte an ...  (cells(i,2))" & vbLf & vbLf & vbLf & _
"Mit freundlichen Grüßen" & vbLf & vbLf & vbLf & _
Application.UserName
weiter:
objOutlookRecip.Resolve
End With
Set objOutlook = Nothing
objOutlookMsg.Display ' wird jede Mail vorher angeigt
'objOutlookMsg.Send ' wird jede Mail gleich abgeschickt
Application.StatusBar = False
Application.DisplayStatusBar = bolStatusBar
End If
End If
End If
Next i
End Sub

Anzeige
AW: e-mail automatisch versenden bei Bedingung
27.09.2006 01:30:37
frank
Hei,
habe es hinbekommen
Gruß Frank

127 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige