naar meerdere adressen mailen

Status
Niet open voor verdere reacties.

jacw

Gebruiker
Lid geworden
23 sep 2006
Berichten
74
Geachte forum lezers,

Ik heb een macro gemaakt die die er voor zorgt dat ik een rapport kan verzenden via e-mail.
Hij pakt het juiste rapport zet deze ook goed in PDF formaat.
Maakt het onderwerp juist aan van een combinatie van meerdere velden.
=[naam] & " " & [id]
Hij verstuurt de E-mail naar één E-mail adres, dit mail adres staat in het rapport.
=[E-mail] & IIf(Nz([E-mail])<>"";" [" & [E-mail] & "]")

Nu wil ik dat hij een E-mail stuurt naar alle mail adressen die in het rapport staan en niet alleen het bovenste E-mail adres. Wie kan mij daarbij helpen?

Als het een stukje VBA is dan zou ik dat moeten kopiëren en plakken aangezien mijn kennis van VBA niet aanwezig is.

Alvast heel erg bedankt voor jullie hulp.

Met groet,

Jac
 
Een rapport mailen met een macro zal in dit geval niet meer helpen, want ik vermoed dat je de adressen met een macro niet in één string kunt ophangen. Je vraagstelling is een beetje vaag, want je geeft niet aan hoe je de verschillende email adressen kunt opvragen. Ze staan in het rapport, maar dat zegt mij niet zo veel... Met onderstaande VBA code, die je relatief simpel kunt aanpassen, kun je email adressen uit een tabel of een query halen, en daar het rapport naar toe mailen.

Code:
Dim appOutLook As Outlook.Application
Dim MailOutLook As Outlook.MailItem
Dim sEmail As String
Dim sVerzonden As String
Set appOutLook = CreateObject("Outlook.Application")
Set MailOutLook = appOutLook.CreateItem(olMailItem)
        
    sVerzonden = ""
    With CurrentDb.OpenRecordset("[B][COLOR="blue"]Tbl_Mailen[/COLOR][/B]")       [COLOR="green"]' Vervang de naam van de tabel door je eigen tabel/query[/COLOR]
        If Not .RecordCount = 0 Then
            Do While Not .EOF
                sEmail = .Fields("[B][COLOR="blue"]Aan[/COLOR][/B]").Value
                With MailOutLook
                    .BodyFormat = olFormatRichText
                    .To = sEmail
                    .Subject = Me.Mess_Subject
                    .HTMLBody = Me.mess_text
[COLOR="green"]        ''            .Display             ' Gebruik Display als je de mail wilt zien in Outlook[/COLOR]
                    .Send             [COLOR="green"]' Gebruik Send als je de mail gelijk wilt verzenden; Met ClickYes kun je de dialoogvensters automatisch weg laten klikken.[/COLOR]
                End With
                'MsgBox MailOutLook.Body
                sVerzonden = sVerzonden & sEmail & ", "
                .MoveNext
            Loop
        End If
    End With
    Do While Right(sVerzonden, 2) = ", "
        sVerzonden = Left(sVerzonden, Len(sVerzonden) - 2)
    Loop
    MsgBox "Er is een mail gestuurd naar " & sVerzonden & "."

    Exit Sub

email_error:
    MsgBox "Er was een foutje..." & vbCrLf & "En wel: " & Err.Description
 
Hallo OctaFish,

ik heb in 2010 een voorbeeld bestand gemaakt. inclusief de macro
zal in het kort uitleggen wat ik wil

Ik wil een database maken waarbij ik een rapport kan versturen naar verschillende personen. de inhoud van het rapport verschilt steeds, maar ook de personen naar wie het toe moet verschilt. in mijn voorbeeld bestand heb ik nog geen Query gemaakt die mij de keuze geeft wat ik wil versturen.
voorbeeldbestand

Ik hoop dat je mij verder op weg kan helpen zodat ik kan beginnen met het bouwen van de database

Met groet,

Jac
 
Octafish. De meeste mailprogramma's slikken het als je het TO veld opbouwt als

mailTO= "email1;email2;email3"

Valt te proberen
 
@Roger: Dat weet ik wel, maar je moet de string met email adressen toch opbouwen. Bovendien maak je dan geen persoonlijke mails aan, maar een algemene.
Overigens is de code natuurlijk heel simpel aan te passen, zodat hij eerst één string maakt met de emailadressen, en dan één keer mailt.
 
@OctaFish @Roger,
gaat mijn pet nu echt helemaal te boven.
Heb al een aantal leuke databases gebouwd die ook tot tevredenheid werken.
als het verschillende velden waren zou het geen probleem zijn, maar het is één veld met verschillende records die moeten samengevoegd worden, met daarbij het ";" teken. als dat lukt heb ik een nieuw veld en is het geen enkel probleem om dat veld te selecteren in de macro zodat gelijk naar een aantal mensen gelijk kan verzenden.
 
Nu praat je een beetje onder mijn pet door, vrees ik.... Je wilt, (dat snap ik dan nog wel) dus alle emailadressen in één keer mailen? De vraag is dan: waar staan je gegevens, en kun je die zelf verzamelen in een string? Want ik denk dat je daar met een macrootje niet meer uitkomt. Met VBA komt dit in de buurt:

Code:
Dim sEmail As String
Dim iAantal As Integer, i As Integer

    With CurrentDb.OpenRecordset("Tbl_Mailen")       ' Vervang de naam van de tabel door je eigen tabel/query
        If Not .RecordCount = 0 Then
            .MoveLast
            .MoveFirst
            iAantal = .RecordCount
            Do While Not .EOF
                sEmail = .Fields("Aan").Value
                If i < iAantal Then sEmail = sEmail & ";"
                i = i + 1
                .MoveNext
            Loop
        End If
    End With
    DoCmd.SendObject acSendReport, "RapportNaam", acFormatPDF, sEmail, , "Onderwerp", "De tekst in de body", True, """"

Ik heb geen 2007 om de exacte code aan te leveren, dus ik weet niet precies hoe het PDF commando er uit ziet (er vanuit gaande dat je een pdf wilt mailen) maar het verzamelen van de emailadressen gaat wel volgens bovenstaande methodiek.
 
Ben al een stapje verder gekomen. Hij geeft alleen 1 email adres weer en niet alle adressen, hoe krijg ik nu alle adressen in mijn to balk?
Private Sub Knop28_Click()

Dim sEmail As String
Dim iAantal As Integer, i As Integer

With CurrentDb.OpenRecordset("tabel1") ' Vervang de naam van de tabel door je eigen tabel/query
If Not .RecordCount = 0 Then
.MoveLast
.MoveFirst
iAantal = .RecordCount
Do While Not .EOF
sEmail = .Fields("E-mail Address").Value
If i < iAantal Then sEmail = sEmail & ";"
i = i + 1


.MoveNext
Loop
End If
End With
DoCmd.SendObject acReport, "Tabel1", "PDFFormat(*.pdf)", sEmail, "", "", True, ""


End Sub

hoop dat je me nog een stapje verder kan helpen.

Met groet,
Jac
 
Laatst bewerkt:
ik laat graag een klein detail weg; houdt de mensen scherp ;)

Code:
Dim sEmail As String
Dim iAantal As Integer, i As Integer
sEmail = ""

With CurrentDb.OpenRecordset("tabel1")
    If Not .RecordCount = 0 Then
        .MoveLast
        .MoveFirst
        iAantal = .RecordCount
        Do While Not .EOF
[B]            sEmail = sEmail & .Fields("E-mail Address").Value[/B]
            If i < iAantal Then sEmail = sEmail & ";"
            i = i + 1
            .MoveNext
        Loop
    End If
End With

Als je een string opbouwt, moet je de waarden toevoegen aan de string, en hem niet overschrijven. Vandaar: sEmail = sEmail & .Fields("E-mail Address").Value
Dat stukje stond er in beginsel wel, bij deze regel: If i < iAantal Then sEmail = sEmail & ";". Het scheidingsteken (de puntkomma) moet je ook toevoegen aan de bestaande string.
 
Hier ben ik super blij mee. Helemaal geweldig, bedankt voor jullie uitleg TOP
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan