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
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
- Compartir respuesta