** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Envío correo con botón desde Formulario
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoEnvío correo con botón desde Formulario

 Responder Responder
Autor
Mensaje
crowler Ver desplegable
Nuevo
Nuevo


Unido: 25/Junio/2024
Localización: España
Estado: Sin conexión
Puntos: 10
Enlace directo a este mensaje Tema: Envío correo con botón desde Formulario
    Enviado: 26/Junio/2024 a las 11:27
Buenas tardes. Tengo un Access ensamblado donde se cargan Registros.
Estoy intentando automatizar el envío de un correo mediante un botón.

Este correo tiene: mails de destino fijos, asunto fijo y un cuerpo de mail fijo, al cual se le deben agregar dos valores de dos campos del formulario (DNI Y NOMBRE)
Creé una tabla extra donde cargué los Mails, el Asunto y el Cuerpo del mail. También tengo el codigo VBA para el envío del mail, pero lo que no logré resolver es cómo indicar al código que, antes de enviar el correo, tome los dos registros y los cargue al cuerpo del mail, ya que debe informarse el DNI y NOMBRE del registro activo. Tener en cuenta que cada mail tendrá sólo estos dos registros, no deberá tomar varios registros ni nada por el estilo, seria un mail con DNI y NOMBRE (además del cuerpo de mensaje fijo).

No puedo adjuntar capturas porque me arroja error, pero espero haber sido claro.
Muchas gracias!!
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 26/Junio/2024 a las 16:38
Aquí sabemos de Access en mayor o menor medida, pero en lo de adivinar somos una panda de negados.

O pones el código que usas o nadie te va a poder responder.

Además de poner el código, describe en detalle el proceso que realizas, cuantos más datos des más posibilidades tienes de recibir ayuda.





Editado por Mihura - 26/Junio/2024 a las 16:39
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
crowler Ver desplegable
Nuevo
Nuevo


Unido: 25/Junio/2024
Localización: España
Estado: Sin conexión
Puntos: 10
Enlace directo a este mensaje Enviado: 27/Junio/2024 a las 08:09
Hola! Vale, disculpas!
Ayer comencé a investigar y en el Generador de macros encontré una acción llamada EnviarPorCorreoObjetoDeBaseDeDatos.
Me venía perfecto para lo que deseo hacer, incluso la testeé y pude enviar un correo, el problema que estoy teniendo ahora es enviar el correo sin que obligatoriamente envíe un objeto adjunto (txt, tabla, form, etc.). 
Googleé y me topé con este tema del foro de Microsoft. Tengo exactamente el mismo problema que el usuario y por lo que veo nadie supo darle respuesta:
https://answers.microsoft.com/en-us/msoffice/forum/all/microsoft-access-macro/ac9aa453-08ba-46e5-92e9-6bfa8b93b4fd

En mi escritorio local tengo la versión 2208 de Access 365 y en el entorno donde trabajo la v2308. En el escritorio local puedo ejecutar la macro y no me obliga a enviar adjunto, es decir, funciona ok, en cambio en la del entorno (más nueva entiendo, ya que es 2308) me pasa exactamente lo mismo que al usuario del foro de Microsoft, me obliga a enviar un adjunto cuando incluso en la Ayuda el mismo Access te dice que dejando vacíos los campos de objeto debería enviar un mail sin adjunto.

Sabes si puede ser un bug sin solución o podrá haber alguna solución?
Por otra parte, si no encuentro solución a resolverlo mediante el Generador de macros, el código que tengo es el siguiente:

Private Sub btnEnvio_Click()
   If EnvioEmail Then
        MsgBox "MENSAJE ENVIADO", vbInformation, "Aviso"
        Call Limpiar
   End If
End Sub


Private Function EnvioEmail() As Boolean
On Error GoTo ManipulaError
Dim oApp As Outlook.Application
Dim oMail As Outlook.MailItem
    
    If Me.TxtDireccion <> "" Then
        Set oApp = CreateObject("Outlook.Application")
        Set oMail = oApp.CreateItem(olMailItem)
        With oMail
            .To = Me.TxtDireccion
            .Subject = Nz(Me.TxtAsunto, "")
            .Body = Nz(Me.TxtMensaje, "")
            .Importance = olImportanceHigh
            .Send
        End With
        Set oApp = Nothing
        EnvioEmail = True
    Else
        MsgBox "ESPECIFIQUE UNA DIRECCION DE CORREO ELECTRONICO", vbExclamation, "Aviso"
        Me.Lista.SetFocus
    End If
Salir:
    Exit Function
ManipulaError:
    MsgBox Err.Number & " : " & Err.Description
End Function

Private Sub Limpiar()
    Me.Lista = Null
    Me.TxtAsunto = Null
    Me.TxtDireccion = Null
    Me.TxtMensaje = Null
End Sub

Este codigo es para enviar usando un formulario aparte que genere el correo, mi idea es colocar el boton de envio directamente en el formulario donde cargo los Registros, tomando los datos "fijos" (mail de envio, asunto y parte del Cuerpo del mensaje) de una tabla y los "variables" desde el último registro que se carga en el form de Registros.

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 27/Junio/2024 a las 10:16
De macros no te puedo decir nada ... no las uso LOL.

El código tiene pinta de que te funcionará bien.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
crowler Ver desplegable
Nuevo
Nuevo


Unido: 25/Junio/2024
Localización: España
Estado: Sin conexión
Puntos: 10
Enlace directo a este mensaje Enviado: 27/Junio/2024 a las 11:28
Si, debería funcionar, pero me falta agregar lo que pongo en el primer mensaje del tema: que el cuerpo del mensaje tome el valor de estos dos registros del formulario, ya que el mail debe decir, por ejemplo:
"buenos dias solicito informar el siguiente DNI "Campo1" y nombre "Campo2"".

¿Sabes como puedo lograr eso?
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 27/Junio/2024 a las 15:12
¿Desde dónde lanzas ese comando? ... ¿tienes los campos que necesitas en el formulario?, si no los tienes puedes acceder a ellos mediante un recordset o un dlookup.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
crowler Ver desplegable
Nuevo
Nuevo


Unido: 25/Junio/2024
Localización: España
Estado: Sin conexión
Puntos: 10
Enlace directo a este mensaje Enviado: 27/Junio/2024 a las 15:14
Ya pude solucionarlo, la macro me quedó de la siguiente forma. Pueden cerrar el tema. Gracias!

     Private Sub btnEnvio_Click()
    If EnvioEmail Then
        MsgBox "MENSAJE ENVIADO", vbInformation, "Aviso"
    End If
End Sub

Private Function EnvioEmail() As Boolean
On Error GoTo ManipulaError
Dim oApp As Outlook.Application
Dim oMail As Outlook.MailItem

    ' Verifica que la dirección de correo no esté vacía
    If Me.TxtDireccion <> "" Then
        ' Crea una instancia de la aplicación Outlook
        Set oApp = CreateObject("Outlook.Application")
        Set oMail = oApp.CreateItem(olMailItem)

        ' Construye el cuerpo del mensaje concatenando el mensaje fijo con DNI y NOMBRE
        Dim cuerpoMensaje As String
        cuerpoMensaje = Nz(Me.TxtMensaje, "") & vbCrLf & _
                        "DNI: " & Nz(Me.DNI, "") & vbCrLf & _
                        "NOMBRE: " & Nz(Me.NOMBRE, "")

        ' Configura el correo
        With oMail
            .To = Me.TxtDireccion
            .Subject = Nz(Me.TxtAsunto, "")
            .Body = cuerpoMensaje
            .Importance = olImportanceHigh
            .Send
        End With

        ' Libera la instancia de la aplicación Outlook
        Set oApp = Nothing
        EnvioEmail = True
    Else
        MsgBox "ESPECIFIQUE UNA DIRECCION DE CORREO ELECTRONICO", vbExclamation, "Aviso"
        Me.Lista.SetFocus
    End If

Salir:
    Exit Function

ManipulaError:
    MsgBox Err.Number & " : " & Err.Description
End Function
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable