Avatar billede omello Nybegynder
13. januar 2005 - 23:29 Der er 28 kommentarer og
1 løsning

mailrundsending fra access

Kære experter (det er I!)

Jeg har en access2002 database med bl.a. tabel over kunder. Jeg har et JA/NEJ felt i kundetabellen. Det jeg er på udkig efter er funktion, der kan hjælpe med at afsende mail til alle JA-markerede kunder. Mailen skal være personlig ved at tage navnet fra felt i tabellen, og skrive eks. "Kære Dorthe". Emne og tekst og evt. vedhæftede filer er ens for alle mails.

Nogen der har lavet noget lignende?

TAK!
13. januar 2005 - 23:39 #1
Prøv denne funktion i et modul:

Public Sub SendMails(Qry As String, Emne As String, Brødtekst As String, Optional Vedhæftet As String)
Dim OutL As Outlook.Application
Dim Item As MailItem
Dim Receiver As Recipient
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
   
    Set cn = CurrentProject.Connection
    rs.Open Qry, cn, adOpenStatic, , adCmdTable

    Set OutL = New Outlook.Application

    Do Until rs.EOF
        Set Item = OutL.CreateItem(olMailItem)
       
        With Item
            .Subject = Emne
            .Body = "Kære " & rs!Fornavn & vbnewline & vbnewline & Brødtekst
            .FlagStatus = olFlagMarked
            If Len(Vedhæftet) > 0 Then
                .Attachments.Add Vedhæftet
            End If
            .Recipients.Add rs!EMail
            .Send
        End With
        Set Item = Nothing
        rs.MoveNext
    Loop
End Sub


Herefter kræves en forespørgsel, som kun indeholder de relevante poster og som har et felt, som hedder "Email" og et felt, som hedder "Fornavn"


Når du skal køre funktionen, skal du kalde den således:
SendMails "Din forespørgsel","Dit emne", "din brødtekst", "C:\DinFil.txt"
13. januar 2005 - 23:40 #2
Metoden kræver at du laver en reference til "Microsoft Outlook x.0 object Library".
Du sætter referencer i VBA-editoren via menuen Tools->references
Avatar billede omello Nybegynder
13. januar 2005 - 23:55 #3
et simpelt spørgsmål: jeg vil gerne køre funktionen (jeeg har lagt koden ind i et nyt modil "Modul1"), hvordan kan jeg få en knap til at aktivire koden? Tak
13. januar 2005 - 23:57 #4
højreklik på knappen og vælg "Generer hændelsesprocedure" (og herefter kodegenerator).

Så er det bare, at indsætte denne sætning (tilpasset med dine egne værdier):

SendMails "Din forespørgsel","Dit emne", "din brødtekst", "C:\DinFil.txt"
Avatar billede martin-h Nybegynder
18. januar 2005 - 16:16 #5
Hej
Jeg har prøvet at lave den sendmails function men programmet kommer med en fejl ved .send commandoen Run-time error 287 "Application-defined or object-defined error"

Er der nogen der kan hjælpe mig med dette ?
Avatar billede omello Nybegynder
28. januar 2005 - 21:38 #6
Hej thomasjeppesen
Jeg har ændret lidt i min database:
Mailfunktionen skal køres fra en formular, der er åben (formularen hedder: "x_breve").
I formularen er der:
Et felt til emnefeltet i mailen (feltet i formularen hedder "Vedr").
Et felt til tekst i mailen (feltet i formularen hedder "Brødtekst").
Et felt til afsender i mailen, skal fremgå efter brødtekst (feltet i formularen  hedder "oprettet af").
Et felt, der angiver sti på fil der skal vedhæftes (feltet i formularen hedder "Stiforvedhæftetfil"). Hvis dette felt er tomt, skal der ikke vedhæftes fil.

Modtagerne findes i en forespørgsel, der hedder "x_email-query". I denne forespørgsel er der 2 felter:
"Kontaktperson", der bruges i mailens tekstfelt (før Brødtekst, skal der står "Kære " & kontaktperson).
"e-mail" er den adresse, mailen skal sendes til.

MEN:
I stedet for at der sendes en masse mails, kan de så oprettes i Kladder i Outlook, så man kan redigere/tjekke og derefter selv sende manuelt fra Outlook?

Hvis du kan hjælpe mig med dette er du en helt!!!
Avatar billede omello Nybegynder
28. januar 2005 - 21:38 #7
200 points på vej til vedkommende, der kan bringe en løsning på ovenstående :) :)
28. januar 2005 - 22:12 #8
Hej Omello,

Du kan ikke gemme mails'ne direkte som kladde. Men du kan åbne dem på skærmen i stedet for at sende dem ud med det samme.

Jeg har rettet funktionen til:

Public Sub SendMails(Qry As String, Emne As String, Brødtekst As String, Afsender as string, Optional Vedhæftet As String)
Dim OutL As Outlook.Application
Dim Item As MailItem
Dim Receiver As Recipient
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
   
    Set cn = CurrentProject.Connection
    rs.Open Qry, cn, adOpenStatic, , adCmdTable

    Set OutL = New Outlook.Application

    Do Until rs.EOF
        Set Item = OutL.CreateItem(olMailItem)
       
        With Item
            .Subject = Emne
            .Body = "Kære " & rs!Kontaktperson & vbnewline & vbnewline & Brødtekst & vbnewline & vbnewline & "Med venlig hilsen" & vbnewline & Afsender
            .FlagStatus = olFlagMarked
            If Len(Vedhæftet) > 0 Then
                .Attachments.Add Vedhæftet
            End If
            .Recipients.Add rs![e-mail]
            .Display
        End With
        Set Item = Nothing
        rs.MoveNext
    Loop
End Sub


Fra din formular kalder du den således (f.eks. fra en knap):
SendMails "x_email-query", Me!Vedr, Me!Brødtekst, Me![Oprettet af], nz(Me!Stiforvedhæftetfil, "")

NB: Koden er kun rettet ud fra hovedet, så jeg håber ikke, at der er nogle "dumme-fejl"
Avatar billede terry Ekspert
29. januar 2005 - 10:32 #9
change

.Display

to

.Save
29. januar 2005 - 10:56 #10
fint, den kendte jeg ikke :o)
Avatar billede terry Ekspert
29. januar 2005 - 11:28 #11
neither did I until I looked :o)
Avatar billede terry Ekspert
29. januar 2005 - 11:28 #12
og god weekend Thomas
29. januar 2005 - 11:29 #13
i lige måde, tak :o)
Avatar billede omello Nybegynder
29. januar 2005 - 23:33 #14
I couldnt make it work, tried this:

Function SendMails()
Dim OutL As Outlook.Application
Dim Item As MailItem
Dim Receiver As Recipient
Dim cn As ADODB.Connection
Dim rs As New ADODB.Recordset
   
    Set cn = CurrentProject.Connection
    rs.Open "x_email-query", cn, adOpenStatic, , adCmdTable

    Set OutL = New Outlook.Application

    Do Until rs.EOF
        Set Item = OutL.CreateItem(olMailItem)
       
        With Item
            .Subject = Forms![breve]![Emne]
            .Body = "Kære " & rs!Kontaktperson & vbNewLine & vbNewLine & Forms![breve]![Brødtekst] & vbNewLine & vbNewLine & "Med venlig hilsen" & vbNewLine & Forms![breve]![Afsender]
            .FlagStatus = olFlagMarked
            If Len(Forms![breve]![Stiforvedhæftetfil]) > 0 Then
                .Attachments.Add Forms![breve]![Stiforvedhæftetfil]
            End If
            .Recipients.Add rs![e-mail]
            .Display
        End With
        Set Item = Nothing
        rs.MoveNext
    Loop
End Function

but it says:
Compile error: User defines type not defined. and it highlights the line:
Dim cn As ADODB.Connection

PS. I changed the kode above to functio, because I couldnt run the public Sub.

Do You know, whats wrong?

THANKS!
30. januar 2005 - 01:45 #15
Du behøver skam ikke skrive på engelsk hverken for Terry's eller min skyld :o)

Jeg tror at du får fejlen fordi du mangler en reference til "Microsoft ActiveX Data Objects 2.x library" (ligesom med Outlook-referencen)

Hvilken version af Access bruger du?
30. januar 2005 - 01:52 #16
Hvis du bruger Access 97, kan du bruge denne kode i stedet (og undlade den sidste reference):

Public Function SendMails()
Dim OutL As Outlook.Application
Dim Item As MailItem
Dim Receiver As Recipient
Dim db as database
Dim rs As Recordset
   
    Set db = currentdb
    Set rs = db.opendatabase("x_email-query", dbopensnapshot)
    Set OutL = New Outlook.Application

    Do Until rs.EOF
        Set Item = OutL.CreateItem(olMailItem)
       
        With Item
            .Subject = Forms![breve]![Emne]
            .Body = "Kære " & rs!Kontaktperson & vbNewLine & vbNewLine & Forms![breve]![Brødtekst] & vbNewLine & vbNewLine & "Med venlig hilsen" & vbNewLine & Forms![breve]![Afsender]
            .FlagStatus = olFlagMarked
            If Len(Forms![breve]![Stiforvedhæftetfil]) > 0 Then
                .Attachments.Add Forms![breve]![Stiforvedhæftetfil]
            End If
            .Recipients.Add rs![e-mail]
            .Display  'eller .Save
        End With
        Set Item = Nothing
        rs.MoveNext
    Loop
End Function
Avatar billede omello Nybegynder
30. januar 2005 - 08:45 #17
TAK, det hjalp (jeg manglede referencen...)


Nu skriver den dog Run-time error '-2147217900 (80040e14)':
Der er en syntaksfejl i FROM-delsætningen
og så highlighter den:
rs.Open "x_email-query", cn, adOpenStatic, , adCmdTable

Tak for Jeres hjælp.
30. januar 2005 - 08:49 #18
Det lyder som om, det er din forespørgsel, der er noget i vejen med...?

Hvordan ser SQL'en ud?
Avatar billede omello Nybegynder
30. januar 2005 - 17:09 #19
Det kan ikke være forespørgslen, for det er en helt almindelig forespørgsel uden nogen finesser...

Jeg er ikke vant til at skrive kode, så måske har jeg skrevet forkert, der hvor jeg har rettet i dit. Håber du kan hjælpe, for jeg har været det igennem 15 gange og kan ikke finde fejlen...
Avatar billede terry Ekspert
30. januar 2005 - 17:17 #20
if you dont get a reply from Thomas then I can take a look if you like.
eksperten@NOSPAMsanthell.dk

remove NOSPAM
Avatar billede terry Ekspert
30. januar 2005 - 17:19 #21
you could also try altering the name of the query to for example

x_email_query or qryemail

the - may be giving problems
Avatar billede omello Nybegynder
30. januar 2005 - 17:38 #22
TAK Terry, jeg har mailet dig.
Avatar billede terry Ekspert
30. januar 2005 - 17:48 #23
received, back soon!
Avatar billede terry Ekspert
30. januar 2005 - 18:09 #24
I’ve made the SQL directly in code. I thing the problem is that ADO is unable to convert the parameters which are in the query so doing it in code gets around this.

I’ve also altered a couple of the field names on the form because they were not the same as in the code.
01. februar 2005 - 23:09 #25
okay...!?
Avatar billede terry Ekspert
02. februar 2005 - 08:10 #26
Thomas, if you want some of these points then let me know, not too many your close enough as it is :o)
02. februar 2005 - 08:39 #27
nej, det er okay :-)

Det plejer bare, at være god skik, at man giver point til alle som har bidraget til løsningen. Men jeg så, at Omello er ny på Eksperten, så han/hun skal selvfølgelig lige lære de uskrevne regler :o)

Så behold du bare dine point, Terry. Du får brug for dem, hehe ;o)
Avatar billede omello Nybegynder
02. februar 2005 - 08:41 #28
sorry, thomas det var jeg ikke klar over. Terry skrev en del kode for mig uden om denne side. Så snart jeg har fået flere points overfører jeg dem til dig. Det var ikke min mening at bryde etiketten.
02. februar 2005 - 08:53 #29
Hej Omello,

Som jeg skrev, så er det helt ok. Du skal ikke give flere point (man må også kun give maks 200 point for et spørgsmål, så der ville bare komme 33 "politifolk" rendende, hvis du gav mig ekstra point ;o)

Og det er heller ikke fordi, at jeg "behøver" flere point (i hvert fald ikke, hvis du spørger Terry ;)

Så tænk ikke mere på det :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester