Anzeige
Archiv - Navigation
1232to1236
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

nach kriterien email senden

nach kriterien email senden
amintire
Hallo liebe Excel Freunde,
habe hier eine Beispieldatei, da soll folgendes passieren:
https://www.herber.de/bbs/user/76943.xls
Bei Übersicht werden Daten eingetragen, Spalte E - G kommt ein x rein welcher Text als Email gesendet werden soll.
Spalte E = Tabelle Text 1
Spalte F = Tabelle Text 2
Spalte G = Tabelle Text 3
Die E-Mail Adresse des Empfängers steht in der Spalte D.
(Vielleicht wäre es noch möglich die Anrede automatisch zu erstellen, also wenn Herr dann Sehr geehrter Herr *** oder eben Sehr geehrte Frau *** als Begrüßung im Text (beim versenden der E-Mail)
Wenn die E-Mail per Makro gesendet wurde soll in Spalte H in der entsprechenden Zeile das Datum reingeschrieben werden (wann das Makro ausgeführt wurde) - wenn bei wem keine E-Mail Adresse vorhanden ist soll die Zella H* frei bleiben.
Bis jetzt habe ich nur das Makro für die E-Mail senden per LotusNotes.
Funktioniert auch wunderbar, allerdings eben nur das die ganze Mappe geschickt wird und nicht der entsprechende Text.
Vieleicht hat einer von euch eine Idee für ein paar Anpassungen.
Würde mir jedenfalls viel helfen, anstatt ca. 400 Personen eine E-Mail zu schicken, jedesmal die Anrede zu ändern und Text1 oder Text2 / Text3 zu schicken.
Vielleicht klappt es ja auch einfacher.
Lieben Gruß
Amina

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: nach kriterien email senden
10.10.2011 20:29:16
Josef

Hallo Amina,
in ermangelung von Lotus Notes, ungetestet!

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Const cstrMyAddress As String = "deine.mail@adresse.com"

Sub SendNotesMail()
  'Variablendeklaration gehört immer an den Anfang!
  Dim Maildb As Object, MailDoc As Object, Session As Object, EmbedObj As Object, AttachME As Object
  Dim MailDbName As String, strRecipient As String, strMsg As String, strSubj As String
  Dim rng As Range
  Dim lngCol As Long
  
  
  On Error GoTo ErrExit
  tranquilize
  
  ActiveWorkbook.Save
  ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  
  Set Session = CreateObject("Notes.NotesSession")
  Set Maildb = Session.CURRENTDATABASE
  
  With Sheets("Übersicht")
    For Each rng In .Range("A3:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
      If rng <> "" Then
        strRecipient = ""
        If IsValidMailAddress(rng.Offset(0, 3).Text) Then
          For lngCol = 5 To 7
            If rng.Offset(0, lngCol) = "x" Then
              strRecipient = rng.Offset(0, 3).Text
              strMsg = "Sehr geehrte" & IIf(rng = "Herr", "r ", " ") & rng.Text & " " & _
                rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text & "!" & _
                vbCrLf & vbCrLf & Sheets("Text " & CStr(lngCol - 4)).Range("A2").Text
              strSubj = Sheets("Text " & CStr(lngCol - 4)).Range("A2").Text & _
                " - " & rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text
              Exit For
            End If
          Next
          If strRecipient <> "" Then
            Set MailDoc = Maildb.CREATEDOCUMENT
            MailDoc.Form = "Memo"
            MailDoc.sendto = strRecipient
            MailDoc.CopyTo = cstrMyAddress
            MailDoc.Subject = strSubj
            MailDoc.PostedDate = Now
            MailDoc.SEND 0, strRecipient
            rng.Offset(0, 7) = Now
          End If
        End If
        rng.Offset(0, 7) = "ungültige Mailaddresse!"
      End If
    Next
  End With
  
  ErrExit:
  tranquilize True
  
  Set Maildb = Nothing
  Set MailDoc = Nothing
  Set AttachME = Nothing
  Set Session = Nothing
  Set EmbedObj = Nothing
End Sub


Public Function IsValidMailAddress(ByVal strAddress As String) As Boolean
  Dim oRegExp As Object
  Set oRegExp = CreateObject("vbscript.regexp")
  With oRegExp
    .Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|" & _
      "}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:" & _
      "[a-z0-9-]*[a-z0-9])?"
    .IgnoreCase = True
    IsValidMailAddress = .test(strAddress)
  End With
  Set oRegExp = Nothing
End Function


Public Sub tranquilize(Optional ByVal Modus As Boolean = False)
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
  End With
  
  If Modus Then
    With Err
      If .Number <> 0 Then
        MsgBox IIf(Erl, vbLf & "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
          "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbLf & _
          .Description, vbExclamation, "Fehler"
      End If
      .Clear
    End With
  End If
End Sub



« Gruß Sepp »

Anzeige
AW: teste es morgen...
10.10.2011 20:37:22
amintire
Hallo Sepp,
ich kann leider den Code erst morgen testen und sage dann Bescheid ob es funktioniert.
Vielen Dank erstmal und einen schönen Abend.
Lieben Gruß
Amina
Korrigierter Code,
10.10.2011 21:37:48
Josef

Hallo nochmal,
nach Franz' Hinweis, habe ich den Fehler behoben.

' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Const cstrMyAddress As String = "deine.mail@adresse.com"

Sub SendNotesMail()
  'Variablendeklaration gehört immer an den Anfang!
  Dim Maildb As Object, MailDoc As Object, Session As Object, EmbedObj As Object, AttachME As Object
  Dim MailDbName As String, strRecipient As String, strMsg As String, strSubj As String
  Dim rng As Range
  Dim lngCol As Long
  
  
  On Error GoTo ErrExit
  tranquilize
  
  ActiveWorkbook.Save
  ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  
  Set Session = CreateObject("Notes.NotesSession")
  Set Maildb = Session.CURRENTDATABASE
  
  With Sheets("Übersicht")
    For Each rng In .Range("A3:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
      If rng <> "" Then
        strRecipient = ""
        If IsValidMailAddress(rng.Offset(0, 3).Text) Then
          For lngCol = 5 To 7
            If rng.Offset(0, lngCol) = "x" Then
              strRecipient = rng.Offset(0, 3).Text
              strMsg = "Sehr geehrte" & IIf(rng = "Herr", "r ", " ") & rng.Text & " " & _
                rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text & "!" & _
                vbCrLf & vbCrLf & Sheets("Text " & CStr(lngCol - 4)).Range("A2").Text
              strSubj = Sheets("Text " & CStr(lngCol - 4)).Range("A2").Text & _
                " - " & rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text
              Exit For
            End If
          Next
          If strRecipient <> "" Then
            Set MailDoc = Maildb.CREATEDOCUMENT
            MailDoc.Form = "Memo"
            MailDoc.sendto = strRecipient
            MailDoc.CopyTo = cstrMyAddress
            MailDoc.Subject = strSubj
            MailDoc.Body = strMsg
            MailDoc.PostedDate = Now
            MailDoc.SEND 0, strRecipient
            rng.Offset(0, 7) = Now
          End If
        End If
        rng.Offset(0, 7) = "ungültige Mailaddresse!"
      End If
    Next
  End With
  
  ErrExit:
  tranquilize True
  
  Set Maildb = Nothing
  Set MailDoc = Nothing
  Set AttachME = Nothing
  Set Session = Nothing
  Set EmbedObj = Nothing
End Sub



Public Function IsValidMailAddress(ByVal strAddress As String) As Boolean
  Dim oRegExp As Object
  Set oRegExp = CreateObject("vbscript.regexp")
  With oRegExp
    .Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|" & _
      "}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:" & _
      "[a-z0-9-]*[a-z0-9])?"
    .IgnoreCase = True
    IsValidMailAddress = .test(strAddress)
  End With
  Set oRegExp = Nothing
End Function



Public Sub tranquilize(Optional ByVal Modus As Boolean = False)
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
  End With
  
  If Modus Then
    With Err
      If .Number <> 0 Then
        MsgBox IIf(Erl, vbLf & "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
          "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbLf & _
          .Description, vbExclamation, "Fehler"
      End If
      .Clear
    End With
  End If
End Sub



« Gruß Sepp »

Anzeige
AW: Ist noch ein Fehler drinnen ;(
11.10.2011 09:41:14
amintire
Hallo Sepp,
hallo Franz,
vielen Dank erst mal für eure Unterstützung. Habe den Code vom Sepp genommen, dieser funktioniert soweit ganz gut - kleine Fehler waren noch drinnen (habe ich angepasst - da wurde bei x Text2 z.B. Tabelle Text3 gesendet)
Leider funktioniert die E-mail versendung nicht wenn bei Text1 ein x steht. Leider weiß ich nicht genau wo ich es anpassen muss, also bei Spalte F und G wenn x ist wird gesendet, aber wenn bei Spalte E ein x steht wird die Mail nicht gesendet.
Hoffe ihr könnt mir nochmal helfen. Vielen Dank.
Anbei der Code den ich angepasst habe:
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Const cstrMyAddress As String = "max.mustermann@web.de"

Sub SendNotesMail()
'Variablendeklaration gehört immer an den Anfang!
Dim Maildb As Object, MailDoc As Object, Session As Object, EmbedObj As Object, AttachME As  _
Object
Dim MailDbName As String, strRecipient As String, strMsg As String, strSubj As String
Dim rng As Range
Dim lngCol As Long
On Error GoTo ErrExit
tranquilize
ActiveWorkbook.Save
' Drucken wird nicht benötigt ;))
' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Set Session = CreateObject("Notes.NotesSession")
Set Maildb = Session.CURRENTDATABASE
With Sheets("Übersicht")
For Each rng In .Range("A3:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
If rng  "" Then
strRecipient = ""
If IsValidMailAddress(rng.Offset(0, 3).Text) Then
For lngCol = 5 To 7
If rng.Offset(0, lngCol) = "x" Then
strRecipient = rng.Offset(0, 3).Text
'Anrede im Text
strMsg = "Sehr geehrte" & IIf(rng = "Herr", "r ", " ") & rng.Text & " " & _
rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text & "," & _
vbCrLf & vbCrLf & Sheets("Text " & CStr(lngCol - 3)).Range("A2").Text
'Thema
strSubj = Sheets("Text " & CStr(lngCol - 3)).Range("A1").Text & _
" - " & rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text
Exit For
End If
Next
If strRecipient  "" Then
Set MailDoc = Maildb.CREATEDOCUMENT
MailDoc.Form = "Memo"
MailDoc.sendto = strRecipient
MailDoc.CopyTo = cstrMyAddress
MailDoc.Subject = strSubj  '=Thema
MailDoc.Body = strMsg
MailDoc.PostedDate = Now
MailDoc.SEND 0, strRecipient
rng.Offset(0, 7) = Now
End If
End If
'rng.Offset(0, 7) = "ungültige Mailaddresse!"
End If
Next
End With
ErrExit:
tranquilize True
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set Session = Nothing
Set EmbedObj = Nothing
End Sub

Lieben Gruß
Amina
Anzeige
AW: Ist noch ein Fehler drinnen ;(
11.10.2011 09:54:00
Josef

Hallo Amina,
anstatt

For lngCol = 5 To 7

muss es wohl

For lngCol = 4 To 6

heißen.

« Gruß Sepp »

AW: Danke ;))
11.10.2011 10:04:31
amintire
Hallo Sepp,
danke für deine Hilfe.
Lieben Gruß
Amina
AW: noch eine Frage
11.10.2011 14:33:39
amintire
Hallo Sepp,
hallo Franz,
was muss ich im Code ändern bzw. Anpassen wenn ich meine Tabellenblätter umbenennen will,
also möchte das was in E2 oder F2 oder G2 steht auch als Tabellenblatt Name steht,
nur änder ich die Tabellennamen kommt ein Fehler - kann nicht gesendet werden.
Lieben Gruß
Amina
Anzeige
AW: noch einige Fragen ;))
11.10.2011 15:16:20
amintire
Hallo Sepp,
hallo Franz,
was muss ich im Code ändern bzw. Anpassen wenn ich meine Tabellenblätter umbenennen will,
also möchte das was in E2 oder F2 oder G2 steht auch als Tabellenblatt Name steht,
nur änder ich die Tabellennamen kommt ein Fehler - kann nicht gesendet werden.
Ist es auch möglich, erst zu überprüfen ob schon ein Datum draufsteht in Spalte H, und wenn nicht dann erst die E-Mails senden, und bei denen wo ein Datum schon drauf steht da keine EMail zu senden ?
Lieben Gruß
Amina
AW: noch einige Fragen ;))
11.10.2011 15:30:57
Josef

Hallo Amina,
Die Überschriften in E2:G2 müssen exakt den Blattnamen entsprechen!

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Const cstrMyAddress As String = "deine.mail@adresse.com"

Sub SendNotesMail()
  'Variablendeklaration gehört immer an den Anfang!
  Dim Maildb As Object, MailDoc As Object, Session As Object, EmbedObj As Object, AttachME As Object
  Dim MailDbName As String, strRecipient As String, strMsg As String, strSubj As String
  Dim rng As Range
  Dim lngCol As Long
  
  
  On Error GoTo ErrExit
  tranquilize
  
  ActiveWorkbook.Save
  ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  
  Set Session = CreateObject("Notes.NotesSession")
  Set Maildb = Session.CURRENTDATABASE
  
  With Sheets("Übersicht")
    For Each rng In .Range("A3:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
      If rng <> "" Then
        strRecipient = ""
        If IsValidMailAddress(rng.Offset(0, 3).Text) Then
          If Not IsDate(rng.Offset(0, 7)) Then
            For lngCol = 4 To 6
              If rng.Offset(0, lngCol) = "x" Then
                strRecipient = rng.Offset(0, 3).Text
                strMsg = "Sehr geehrte" & IIf(rng = "Herr", "r ", " ") & rng.Text & " " & _
                  rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text & "!" & _
                  vbCrLf & vbCrLf & Sheets(.Cells(2, lngCol + 1).Text).Range("A2").Text
                strSubj = Sheets(.Cells(2, lngCol + 1).Text).Range("A1").Text & _
                  " - " & rng.Offset(0, 1).Text & " " & rng.Offset(0, 2).Text
                Exit For
              End If
            Next
          End If
          If strRecipient <> "" Then
            Set MailDoc = Maildb.CREATEDOCUMENT
            MailDoc.Form = "Memo"
            MailDoc.sendto = strRecipient
            MailDoc.CopyTo = cstrMyAddress
            MailDoc.Subject = strSubj
            MailDoc.Body = strMsg
            MailDoc.PostedDate = Now
            MailDoc.SEND 0, strRecipient
            rng.Offset(0, 7) = Now
          End If
        Else
          rng.Offset(0, 7) = "ungültige Mailaddresse!"
        End If
      End If
    Next
  End With
  
  ErrExit:
  tranquilize True
  
  Set Maildb = Nothing
  Set MailDoc = Nothing
  Set AttachME = Nothing
  Set Session = Nothing
  Set EmbedObj = Nothing
End Sub


Public Function IsValidMailAddress(ByVal strAddress As String) As Boolean
  Dim oRegExp As Object
  Set oRegExp = CreateObject("vbscript.regexp")
  With oRegExp
    .Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|" & _
      "}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:" & _
      "[a-z0-9-]*[a-z0-9])?"
    .IgnoreCase = True
    IsValidMailAddress = .test(strAddress)
  End With
  Set oRegExp = Nothing
End Function


Public Sub tranquilize(Optional ByVal Modus As Boolean = False)
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
  End With
  
  If Modus Then
    With Err
      If .Number <> 0 Then
        MsgBox IIf(Erl, vbLf & "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
          "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbLf & _
          .Description, vbExclamation, "Fehler"
      End If
      .Clear
    End With
  End If
End Sub



« Gruß Sepp »

Anzeige
AW: noch einige Fragen ;))
11.10.2011 20:14:57
amintire
Hallo Sepp,
kann den Code erst wieder ab morgen früh testen, sage dir dann Bescheid.
Ist bei dem Code auch dabei wenn schon ein Datum in Spalte H steht das keine EMail gesendet wird ?
Lieben Gruß
Amina
dazu eine Bemerkung
11.10.2011 20:27:11
Rudi
Hallo,
Ist bei dem Code auch dabei wenn schon ein Datum in Spalte H steht das keine EMail gesendet wird ?
Wenn ich das richtig sehe, beschäftigst du dich jetzt seit über 2 Jahren mit VBA. Da sollte man diesen Code doch wenigstens sinnentnehmend lesen/ interpretieren können.
Nicht böse gemeint.
Gruß
Rudi
AW: dazu eine Bemerkung
11.10.2011 20:43:10
amintire
Hallo Rudi, hatte ja nur gefragt weil es eben nicht dabei ist ;) kann es ja irgendwie mit If / then / else hinbekommen ;)) hoffe ich zumindest, vielleicht nicht so Elegant aber bestimmt auf etlichen Umwegen. (wenn die Zelle leer ist Code ausführen ansonsten keinen Code ausführen)
Außerdem, VBA ist kompliziert, habe es ja nicht gelernt oder so, genauso wie bei den Formel Möglichkeiten in den Tabellen - da muss man erst mal einen Durchblick bekommen und so gesehen lerne ich ja durch EUCH ja auch mit. Ich frage ja auch nicht aus Faulheit, probiere es ja immer aus oder versuche es ja Stundenlang selbst auf die Antwort oder Formel / Code zu kommen, bevor ich die Nerven verliere und nachfrage.
Bitte lass das Thema noch offen.
Gruß Amina
Anzeige
AW:
11.10.2011 20:49:50
amintire
Evtl so einen Text noch im Code mit einfügen
For Each rng1 In .Range("H3:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
If rng1 "" Then
next
(anstatt A eben H hinschreiben und anstatt rng neue Bezeichnung usw...)
Keine Ahnung ob ich richtig liege, kann eben alles erst ab morgen früh weiter testen ;)
Gruß und schönen Abend
Amina
AW:
11.10.2011 20:51:31
Josef

Hallo Amina,
der Teil

If Not IsDate(rng.Offset(0, 7)) Then

erledigt das.

« Gruß Sepp »

Anzeige
AW: Danke Sepp für die Info ;)
11.10.2011 21:07:03
amintire
Gruß Amina
OT dazu eine Bemerkung
11.10.2011 20:55:04
Rudi
Hallo,
hatte ja nur gefragt weil es eben nicht dabei ist ;)
warum fragst du dann, ob es dabei ist?
Das hat mich doch zu meiner kritischen Anmerkung veranlasst.
VBA ist kompliziert, habe es ja nicht gelernt oder so,
Ich auch nicht. Zumindest nicht durch Kurse oder Bücher. Mittlerweile hab ich's aber doch halbwegs drauf. Vieles ist einfach Neugier und Routine.
probiere es ja immer aus oder versuche es ja Stundenlang selbst
Das ehrt dich und ist der richtige Weg.
Gruß
Rudi
AW: OT dazu eine Bemerkung
11.10.2011 21:06:23
amintire
Hallo Rudi,
uups, das hätte ich evtl spätestens morgen bemerkt das es doch dabei steht - kann es ja hier nicht wirklich testen - wer hat schon Lotus Notes am Rechner ;))
Mache es ja teilweise mit F8 und gehe den Code dann durch um zu verstehen wo wie was geschieht.
Danke aber... ;-)
Gruß Amina
Anzeige
AW: nach kriterien email senden
10.10.2011 20:54:49
fcs
Hallo Amina,
hier mein Vorschlag. Habe aber auch keine LotusNotes zum Testen.
Bei Sepp's Vorschlag fehlt nach noch eine Zeile
MailDoc.Body = strMsg
vor dem Versenden der Mail.
Gruß
Franz
https://www.herber.de/bbs/user/76947.xls

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige