¿Cómo podría enviar un mailing según las casillas de verificación seleccionadas?

Tengo un formulario continuo con casillas de verificación "mailing" en cada registro y un botón "comando32" para enviar un mail:

Private Sub Comando32_Click()
On Error Resume Next
DoCmd.SendObject , , , , , [email1] & ";" & [email2], , "Don/Dña. " & [Nombre] & " " & [apellidos] & ",", , True
End Sub

Esto sería suficiente para enviar un mail a la persona de un registro concreto.

He añadido en el encabezado del formulario un botón "Comando31" para poder marcar todas las casillas de verificación de cada registro y otro "Comando33" con el cual me gustaría enviar el mismo correo únicamente a las personas de los registros cuyas casillas de verificación están seleccionadas. En cada registro tengo los campos email1 y email2 ¿Cómo podría hacerlo?

Respuesta
1

La solución es prácticamente idéntica a la que te di esta mañana para marcar/desmarcar casillas: tienes que recorrer todo el recordset, ver si la casilla está marcada y ejecutar esa línea para mandar el mail, algo así:

Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
Do Until rst.EOF
If rst("mailing") = True Then DoCmd.SendObject , , , , , rst("email1") & ";" & rst("email2"), , "Don/Dña. " & rst("Nombre") & " " & rst("apellidos") & ",", , True
rst.MoveNext
Loop
Rst. Close

Gracias. Tengo una duda. Al ser un formulario continuo y tener varios registros, esto enviará un correo por cada registro que tenga la casilla de verificación marcada o un solo correo a todos los destinatarios?

gracias

A los que la tengan marcada, que era lo que pedías ( fíjate en la condición del If)

¿Funciona o no funciona mi propuesta?

Hola de nuevo, me he explicado mal. Quería preguntar si al hacer click en el comando, el sistema abrirá varios correos (uno por cada registro seleccionado con copia oculta los email1 y email2)  o abrirá un solo correo con todas las direcciones de correos de todos los registros seleccionados?

gracias

Todavía no funciona pero necesito saber cual debe de ser el resultado.

Gracias

Tal como está, si la casilla está marcada, envía un correo por cada registro a las direcciones que tenga en email1 y email2.

Si quieres que envíe un único correo, tendrás que recoger todas las direcciones (en una variable de texto, por ejemplo) y ejecutar el SendObject fuera del bucle, pero no le veo sentido tal como configuras el mensaje (con el nombre y apellidos de cada registro).

Sería una cosa así:

Dim rst As DAO.Recordset

Dim losCorreos As String
Set rst = Me.RecordsetClone
Do Until rst.EOF
If rst("mailing") = True Then losCorreos =losCorreos  & rst("email1") & ";" & rst("email2") & ";"
rst.MoveNext
Loop

losCorreos=Left(rst("email1") & ";" & rst("email2"),Len(rst("email1") & ";" & rst("email2"))-1)

DoCmd.SendObject , , , , , losCorreos, , "xxxxxxxxx", , True
Rst. Close

No he revisado si los correos van en copia, copia oculta... pues doy por supuesto que la sentencia SendObject de la pregunta (que es la que utilizo) te funciona correctamente.

Del formulario he marcado 2 registros y le he dado al botón Comando33 para el envío de 1 correo a las direcciones de email de los 2 registros. Me sale un mensaje de error "no hay ningún registro activo" y si le doy a depurar me sale en amarillo la línea:

losCorreos = Left(rst("email1") & ";" & rst("email2"), Len(rst("email1") & ";" & rst("email2")) - 1).

Así quedó el código pegado:

Private Sub Comando33_Click()
Dim rst As DAO.Recordset
Dim losCorreos As String
Set rst = Me.RecordsetClone
Do Until rst.EOF
If rst("mailing") = True Then losCorreos = losCorreos & rst("email1") & ";" & rst("email2") & ";"
rst.MoveNext
Loop
losCorreos = Left(rst("email1") & ";" & rst("email2"), Len(rst("email1") & ";" & rst("email2")) - 1)
DoCmd.SendObject , , , , , losCorreos, , "xxxxxxxxx", , True
rst.Close
End Sub

Al final he optado por 1 solo correo, con todos los email1 e email2 de los registros seleccionados, sin personalizarlo.

Al código le falta un rst.movefirst antes del do until rst. Eof, para asegurar que el recordset empieza desde el primer registro

Lo he añadido pero me sigo marcando el mismo mensaje.

También he notado que cuando marco 2 registros, le doy a marcar todos y luego desmarcar todos, se queda marcado alguno de los registros que marque al principio.

Pues no sé lo que haces, porque a mí sí me envía los correos a los registros marcados...

Te dejo la BD con la que hice la prueba: http://www.filebig.net/files/yGUykMZc7v 

Fíjate que los correos no se envían automáticamente, porque lo tienes puesto para que lo puedas editar antes. Al hacerlo así, primero te muestra el correo del primer registro marcado, y una vez que lo envías (o lo cancelas), muestra el correo del siguiente registro, y así...

En cuanto a lo de que te queden casillas marcadas/desmarcadas, lo solucionas añadiendo como primera linea del botón "Marcar/desmarcar" la instrucción DoCmd. RunCommand acCmdSaveRecord. El motivo de que pasara eso es que el último registro que marcas no se actualiza en la tabla hasta que sales de él o cierras el formulario, y mientras eso no pasa queda "bloqueado" y por eso no te lo actualiza la SQL.

No se porque no funcionaba. He copiado tu código y funciona perfectamente. Muchas gracias!!!

A saber por qué no iba... Pero si ahora te funciona, genial!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas