¿Cómo puedo mandar con un código VBA en access un solo registro de un formulario?

Actualmente envío por correo pero manda todos los registros que tengo en el correo pero no puedo hacer que solo envié el registro activo.

1 respuesta

Respuesta
2

Añade un botón a tu formulario, y en su evento "al hacer clic" ponle el siguiente código (estoy suponiendo los nombres de tus campos, deberá cambiarlos por los que tu tengas):

Me.Filter="NCotizacion=" & Me.NCotizacion
Me.FilterOn=True
DoCmd.SendObject acForm, Me.Name, "PDFFormat(*.pdf)", "[email protected]", , , "Aqui el asunto", "Aqui el mensaje", False  'Si quieres editar el mensaje antes de enviarlo, cambia el False por True
Me.FilterOn = False 

Ese código te enviará un correo con un pdf adjunto (puedes optar por otros formatos)  con un "pantallazo" del formulario en el registro actual. He supuesto que el campo que identifica a cada registro es NCotización, y que es un número. Si el campo fuera otro, simplemente cambia los nombres en la primera linea. Y si fuera de tipo texto, sería así: 

Me.Filter = "NCotizacion='" & Me.NCotizacion& "'"

Si lo que quieres es enviar los datos en el propio cuerpo del mensaje, en vez de enviarlo como adjunto, el código sería, por ejemplo:

On Error GoTo sol_err
Dim elMensaje As String
Me.Filter = "NCotizacion=" & Me.NCotizacion
Me.FilterOn = True
elMensaje = "Estimado Sr. " & Me.NombreCliente & "," & vbCrLf & "Nos ponemos en contacto con usted para comunicarle la cotización actual de su cartera de valores: " & vbCrLf
elMensaje = elMensaje & "Fecha: " & Date & vbCrLf
elMensaje = elMensaje & "Activo: " & Me.Activo & vbCrLf
elMensaje = elMensaje & "Cotizacion: " & Me.Cotizacion & vbCrLf
elMensaje = elMensaje & "Un saludo."
DoCmd. SendObject acSendNoObject,,, "[email protected]",,, "Información sobre su cartera de valores", elMensaje, True
Salida:
Me.FilterOn = False
Exit Sub
sol_err:
If Err.Number = 2501 Then
    'El usuario canceló el envío, no hacemos nada
Else
    MsgBox "Se ha producido el error " & Err.Number & ": " & Err.Description
End If
Resume Salida

En este código, he puesto que se muestre el correo antes de enviarlo y le he añadido un control de errores por si se cancela en envío cerrando el Outlook evitar que salte un error. 

El vbCrLf que va en la composición del mensaje es para indicar un cambio de linea.

Hola Rojo, buena tarde.

He realizado lo que me haz colocado y hay un tema que sucede cuando ya logro enviar un solo registro por correo, cuando le doy enviar y regreso al formulario el registro ha Sido quitado de la lista de registros, pero si está en la tabla de origen del formulario.

Mi fórmulario se llama Cotizacion y el campo donde tengo el identificador de cada una de las cotizaciones es de un Campo de texto con un valor predeterminado SFP20-100, después de este colocaré 01,02 pero ya en el formulario. Las direcciones de correo las tengo en una tabla que se llama Clientes y el campo se llama E-Mail

Me podrías ayudar a solucionar este nuevo tema por favor para que no desaparezcan mis registros en el formulario.

Saludos y de antemano muchas gracias por toda tu ayuda y sobre todo tu tiempo..

Los registros no desaparecen con el código propuesto, pero al filtrar el formulario por el registro activo para enviar el mail y luego quitar ese filtro (Línea Me.Filter=False) lo que ocurre es quede irá al primer registro del formulario. 

Para volver al registro que estabas puedes usar DoCmd.GotoRecord (https://www.google.com/url?sa=t&source=web&rct=j&url=https://docs.microsoft.com/es-es/office/vba/api/access.docmd.gotorecord&ved=2ahUKEwi2_OzgnMjpAhX9BGMBHbq0DOgQFjAAegQIAxAB&usg=AOvVaw1GNV4nrIsLTiPC-4c1RaiI) o usar marcadores (https://www.google.com/url?sa=t&source=web&rct=j&url=https://docs.microsoft.com/es-es/office/vba/api/access.form.bookmark&ved=2ahUKEwif4-uKncjpAhVdA2MBHZSBDAkQFjAAegQIAxAC&usg=AOvVaw2MSc8OrdFBnZFlYRn-wr1h)  

Inténtalo a ver si te sale.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas