Com el seu títol indica, aquesta funció serveix per generar un correu per cada registre de la nostra base de dades personificat amb alguna de les dades de la nostra base de dades, un assumpte, missatge i adjunt comú.
Partint de la base tenim:
– Base de dades –> Taula: PreclientesIdentifica
– Consulta : ConsultaIdentifica
– Formulari amb un boto el qual te nom intern (per el programa, no el que es mostra) EnviarCorreu2
I Outlook amb el compte en el que vulguem enviar el primer de la llista (no sé el perquè però es posen a la Safata de sortida del PRIMER correu configurat, dona igual que no sigui el predeterminat)
En marxa!
Click dreta sobre el botó –> «Generar Evento…» –> «Generador de código» i ens obrirà això
Private Sub EnviarCorreu2_Click() End Sub
Dins d’això enganxarem el següent codi
On Error GoTo Err_EnviarCorreu2_Click Dim BD As Database Dim NovaQRY As QueryDef Dim RegistresTemporals As DAO.Recordset Dim CadenaSQL As String Dim Correu As String Dim Nom As String Dim Fitxa As String Dim identificador As Long Set BD = CurrentDb CadenaSQL = "SELECT * FROM PreclientesIdentifica" 'Selecciona tot (*) de la TAULA PreclientesIdentifica Set RegistresTemporals = CurrentDb.OpenRecordset(CadenaSQL, dbOpenDynaset) 'obre un registre temporal (Recordset) If RegistresTemporals.EOF = False Then 'La funció EOF (end of) retorna un valor Boleà que indica si està al final del 'temporal de registres. Existeix tambe la BOF (beginning of) que indica si està 'just al principi del registre RegistresTemporals.MoveLast RegistresTemporals.MoveFirst Do Until RegistresTemporals.EOF BD.QueryDefs.Delete ("ConsultaIdentifica") 'Borra el temporal de la consulta identificador = RegistresTemporals!NUM_FICHA Set NovaQRY = BD.CreateQueryDef("ConsultaIdentifica", _ "SELECT * FROM PreclientesIdentifica WHERE PreclientesIdentifica.NUM_FICHA = " & identificador) 'Crea temporal consulta de la taula PreclientesIdentifica i 'relaciona el NUM_FICHA amb el nº de registre de la taula Correu = RegistresTemporals!E_MAILS 'Li diu que el "Correu" que es un String es igual al RecordSet columna Email Nom = RegistresTemporals!ENTIDAD 'Li diu que el "Nombre" que es un String es igual al RecordSet columna Nombre Fitxa = RegistresTemporals!NUM_FICHA 'Li diu que el "Ficha" que es un String es igual al RecordSet columna Ficha SendMessages Correu, "", "Carnestoltes Planning 2012 - " & Fitxa & " " & Nom, _ "Amics," & Chr(13) & Chr(13) & "Us adjuntem un seguit d'espectacles, activitats i serveis que podrien ser adients per les vostres festes i programacions. Naturalment, sols es una petita part dels continguts de la nostra base de dades." & Chr(13) & "Si ens doneu dates i el vostre criteri de programació us enviarem un seguit de propostes amb els millors preus que puguem aconseguir." & Chr(13) & "No dubteu en trucar-nos per telèfon de 9 a 15 h. i de 16 a 20 h." & Chr(13) & Chr(13) & "Cordialment," & Chr(13) & "Mar Torres" & Chr(13) & Chr(13) & "Planning General d'Espectacles" & Chr(13) & "Tordera, 5 08012 - Barcelona" & Chr(13) & "Tel. 93-284 80 80 Fax 93-284 59 35" & Chr(13) & "E-mail: gestio@planning.cat", _ "C:BOOK PLANNING2012 ESPECTACLES I PREUS.pdf" 'La funció SendMessages la tenim al "Modulo 1" RegistresTemporals.MoveNext 'Si tot ha anat be ens movem al seguent registre Loop 'Fes-ho fins que acabi la llista End If BD.Close RegistresTemporals.Close 'Tanquem els temporals Exit_EnviarCorreu2_Click: Exit Sub Err_EnviarCorreu2_Click: MsgBox Err.Description Resume Exit_EnviarCorreu2_Click
Com podeu veure, poso l’explicació de cada cosa, segons el que tinc entès jo clar.., i amb les funcions sense abreviar, per estalviar pes (bytes) normalment en lloc de Recordset posem rst, això ja va a gust del programador per entendre’t desprès.
La funció SendMessages està explicada en aquest post.