Seleccionar todos los correos de un formulario de Clientes

A tod@s a ver si podéis darme alguna ayuda.

Tengo un formulario desde el cual quiero mandar el mismo correo a todos los Clientes relacionados en el mismo Form.

Nombre de la Tabla: MAESTROCLIENTES

Campo Email: CORREO

Necesito que a través de un botón seleccionar todos los correos de los clientes y colocarlos en un campo llamado TOTALCORREOS que pinchando sobre el me mande todos las direcciones a Outlook para enviar el mismo correo a los Clientes.

Me interesaría que pasases directamente a CCO con el fin de que no se viese el resto de correos que se ahn mandado.

1 Respuesta

Respuesta
2

Luis: En la Web de Neckkito >>

http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/todos 

En el apartado de CÓDIGO, verás desde varias perspectivas el envío de eMails.

Y una de mail... Y dos ... Y tres...

Un saludo >> Jacinto

He estado viendo los ejemplos de Neckkito y la verdad es que no me aclaro mucho con las rutinas que explica y creo que todos realizan más cosas de las que que necesito.

Lo único que necesito es que me una todos los correos separados entre ellos por un (;) y en un campo llamado TOTALCORREOS.

Este campo lo tengo declarado como Hipervínculo y al pinchar sobre el me abra el Outlook colocándome todas las direcciones para en el envío, sin mensajes adjuntos ya que estos los colocare manualmente yo.

Luis: Puedes concatenar en una Variable de tipo cadena (String), todos tus eMails, y esa será la lista que después puedes usar donde quieras.

Mira por favor una respuesta en la que hace un par de dís le comentaba a un usuario como solucionarlo.

Unir varios campos para crear uno solo para envío de emails múltiples

Mis saludos >> Jacinto

Hola de nuevo Jacinto.

He seguido el ejemplo que me has recomendado y he intentado acoplarlo a mis datos, pero mira que me esta ocuriendo me duplica los correos y me coloca el separador (#) y  que por mucho que mire no se donde pueda estar el error:

Y esta es la rutina que estoy utilizando:

Dim StrSQL As String, LaListaEMails As String
Dim Rst As DAO.Recordset
LaListaEMails = ""
StrSQL = "SELECT Correo FROM MAESTROCLIENTESCORREOS;"
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)
If Not Rst.EOF And Not Rst.BOF Then
Rst.MoveLast
Rst.MoveFirst
Do While Not Rst.EOF
LaListaEMails = LaListaEMails & Rst!Correo & ";"
Rst.MoveNext
Loop
LaListaEMails = Left(LaListaEMails, Len(LaListaEMails) - 1)
Else
MsgBox "Este Recordset está vacío", vbCritical, "RECORDSET SIN DATOS"
End If
Me.TotalCorreos = LaListaEMails
Me.Refresh

Un saludo

Luis: Me parece bastante raro ese fenómeno, a no ser que tengas espacios en blanco en las direcciones de correo y Access, en ésta instrucción las rellene con "#".

Haz lo siguiente, porque ahora no puedo probarlo yo, y me comentas.

Para limpiar el TextBox y que no haya nada en él:

Debajo de : LaListaEMails = ""

Me.TotalCorreos = ""

Y la línea: LaListaEMails = LaListaEMails & Rst!Correo & ";" >> La sustituyes por>>

LaListaEMails = LaListaEMails & Trim(Rst!Correo) & ";"

Luego hay una línea que no le veo razón de ser >> Me. Refresh

Un saludo >> Jacinto

Hola de nuevo Jacinto, te explico lo que ocurre.

He modificado lo que me has indicado y hace lo mismo:

Si el campo TotalCorreos lo declaro como hipervínculo:

Me.TotalCorreos.IsHyperlink = True

En ese momento solo me recoge el primer correo del formulario con la obsevacion que no me mete el (;)

Si no lo declaro es cuando me aparecen todos los correos duplicados como te he indicado antes colocándome en unnombre el (;) y en el otro el (#)

Esto es lo que tengo ahora colocado:

Dim StrSQL As String, LaListaEMails As String
Dim Rst As DAO.Recordset
LaListaEMails = ""
Me.TotalCorreos = ""
StrSQL = "SELECT Correo FROM MAESTROCLIENTES;"
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)
If Not Rst.EOF And Not Rst.BOF Then
Rst.MoveLast
Rst.MoveFirst
Do While Not Rst.EOF
LaListaEMails = LaListaEMails & Trim(Rst!Correo) & ";"
Rst.MoveNext
Loop
LaListaEMails = Left(LaListaEMails, Len(LaListaEMails) - 1)
Else
MsgBox "Este Recordset está vacío", vbCritical, "RECORDSET SIN DATOS"
End If
Me.TotalCorreos = LaListaEMails

No se si el declarar como hipervinculo el campo Me.TotalCorreos = "", es donde pueda estar el error.

El motivo de declarar el Campo TotalCorreos como hipervínculo es para después pinchando sobre este campo poder abrir directamente el Outlook

Luis: La verdad es que no sé de donde pueda venir el problema.

Ese código no lo había probado, y lo he hecho después de mi última contestación.

El resultado es el que esperaba, según la figura que te adjunto.

Se ve bastante mal, pero se puden apreciar los separadores del ";" y el final sin ninguno.

Este es el código que he utilizado. Cambia el Nombre de la Tabla y el del cuadro de texto.

Private Sub BtnCadenaTo_Click()
'Código Jacinto Trillo Jareño, para probar una respuesta que dí en Todoexpertos en Fecha 14/01/2017, y otra el 16/01/2017
'http://www.todoexpertos.com/preguntas/7ji3dl7wet3ipxjc/unir-varios-campos-para-crear-uno-solo-para-envio-de-emails-multiples
'http://www.todoexpertos.com/preguntas/7jnwmnhhgmek7sw5/seleccionar-todos-los-correos-de-un-formulario-de-clientes?selectedanswerid=7jnxges76v69ok9x&nid=9ou9rtugggoq9t6fgstplg4qh3w6dhkqgcrprg4ohovpntmi9su9xx6fabr3&utm_source=todoexpertos&utm_medium=EmailNotification&utm_campaign=ExpertAnswer_AskerMessageAdded
Dim StrSQL As String, LaListaEMails As String
Dim NumMails As Integer
Dim Rst As DAO.Recordset
LaListaEMails = ""
Me.TxtTo = ""
NumMails = 0
Me.TxtNumMails = 0
StrSQL = "SELECT Correo, Enviar FROM TblClientes WHERE Enviar = True"
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)
If Not Rst.EOF And Not Rst.BOF Then
        Rst.MoveLast
        Rst.MoveFirst
        Do While Not Rst.EOF
                LaListaEMails = LaListaEMails & Trim(Rst!Correo) & ";"
                NumMails = NumMails + 1
                Rst.MoveNext
        Loop
        LaListaEMails = Left(LaListaEMails, Len(LaListaEMails) - 1)
        Me.TxtTo = LaListaEMails
        Me.TxtNumMails = NumMails
Else
        MsgBox "Este Recordset está vacío", vbCritical, "RECORDSET SIN DATOS"
End If
Rst.Close
Set Rst = Nothing
End Sub

Si quieres que te indique el Número de eMails seleccionados has de añadir un TextBox con el Nombre de TxtNumMails. Mis saludos >> Jacinto

He adaptado este código:

'Código Jacinto Trillo Jareño, para probar una respuesta que dí en Todoexpertos en Fecha 14/01/2017, y otra el 16/01/2017
'http://www.todoexpertos.com/preguntas/7ji3dl7wet3ipxjc/unir-varios-campos-para-crear-uno-solo-para-envio-de-emails-multiples
'http://www.todoexpertos.com/preguntas/7jnwmnhhgmek7sw5/seleccionar-todos-los-correos-de-un-formulario-de-clientes?selectedanswerid=7jnxges76v69ok9x&nid=9ou9rtugggoq9t6fgstplg4qh3w6dhkqgcrprg4ohovpntmi9su9xx6fabr3&utm_source=todoexpertos&utm_medium=EmailNotification&utm_campaign=ExpertAnswer_AskerMessageAdded
Dim StrSQL As String, LaListaEMails As String
Dim NumMails As Integer
Dim Rst As DAO.Recordset
LaListaEMails = ""
Me.TotalCorreos = ""
NumMails = 0
Me.TxtNumMails = 0
StrSQL = "SELECT Correo, Enviar FROM RECORDATORIOS WHERE Enviar = True"

Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)

If Not Rst.EOF And Not Rst.BOF Then
Rst.MoveLast
Rst.MoveFirst
Do While Not Rst.EOF
LaListaEMails = LaListaEMails & Trim(Rst!Correo) & ";"
NumMails = NumMails + 1
Rst.MoveNext
Loop
LaListaEMails = Left(LaListaEMails, Len(LaListaEMails) - 1)
Me.TotalCorreos = LaListaEMails
Me.TxtNumMails = NumMails
Else
MsgBox "Este Recordset está vacío", vbCritical, "RECORDSET SIN DATOS"
End If
Rst.Close

y me da este error en esta Linea:

Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)


Set Rst = Nothing

Luis: Ciertamente hay una línea en la que yo he usado un Filtro, para seleccionar de entre todos los eMails, solo unos cuantos que tienen el CheckBox marcado.

La línea: StrSQL = "SELECT Correo, Enviar FROM RECORDATORIOS WHERE Enviar = True"

En tu caso debería ser:

StrSQL = "SELECT Correo FROM RECORDATORIOS;"

Mis saludos >> Jacinto

Hola de nuevo Jacinto. He rectificado el error que había, pero solo inserta el primer correo que encuentra y el resto no están.

Tampoco mete el (;) junto al correo insertado.

He probado dejar a todos los clientes del formulario sin correo y en ese momento mete varios (;;;;) en el campo Me.TotalCorreos, pero no lo añade al único correo mostrado.

El contador de números de correos leídos me funciona bien.

He probado con otra tabla por si esta estuviese mal y también me hace lo mismo solo coloca el primer correo encontrado.

Luis: Creo que lo mejor sería que me envíes esa parte de tu BD, con datos ficticios.

Deja 15 o 20 registros. Formulario, Tabla, ... etc.

Me lo envías a [email protected] y veré mejor dónde está el problema. Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas