Envío de informes a correos electrónicos

La cuestión es que tengo la necesidad de enviar un informe por correo a un grupo de personas, por un lado tengo una tabla llamada T_Trabajador que contiene Id, nombre, correo y F3 y el nombre del informe es I_Fecha_Limite y quisiera crear en un formulario un botón que me permita enviar por correo el informe I_Fecha_Limite a todos los trabajadores que tenga la condición del campo F3 que sea verdadero o -

2 Respuestas

Respuesta
1

Le dejo este código

Sub EnviarCorreoConInformeAdjunto()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim oApp As Object 'Aplicación Outlook
    Dim oMail As Object 'Correo electrónico
    Dim strSQL As String
    Dim strTempPath As String
    Dim strReportName As String
    'Ruta temporal para guardar el informe exportado
    strTempPath = "C:\Ruta\Temporal\"
    'Nombre del informe a exportar
    strReportName = "I_Fecha_Limite"
    'Inicializar la aplicación de Outlook
    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0) 'Crear un nuevo correo electrónico
    'Definir la consulta SQL
    strSQL = "SELECT * FROM I_Fecha_Limite WHERE F3=True;"
    'Abrir la base de datos y ejecutar la consulta
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSQL)
    'Recorrer los registros y enviar el correo electrónico
    Do While Not rs.EOF
        'Aquí puede construir el cuerpo del correo utilizando los datos del registro actual
        'Puede acceder a los campos de la tabla utilizando rs("NombreCampo")
        'Por ejemplo: rs("NombreCampo1"), rs("NombreCampo2"), etc.
        'Exportar el informe a un formato compatible (por ejemplo, PDF)
        DoCmd.OutputTo acOutputReport, strReportName, acFormatPDF, strTempPath & strReportName & ".pdf"
        'Configurar el destinatario, asunto y cuerpo del correo electrónico
        oMail.To = "[email protected]"
        oMail.Subject = "Asunto del correo"
        oMail.Body = "Cuerpo del correo electrónico"
        'Adjuntar el informe al correo electrónico
        oMail.Attachments.Add strTempPath & strReportName & ".pdf"
        'Enviar el correo electrónico
        oMail.Send
        'Mover al siguiente registro
        rs.MoveNext
    Loop
    'Cerrar el recordset y la base de datos
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    'Cerrar la aplicación de Outlook
    Set oMail = Nothing
    Set oApp = Nothing
End Sub

Cambie la ruta "C:\Ruta\Temporal\" por la de su aplicación, configurare el destinatario, asunto y cuerpo del correo electrónico de acuerdo con los campos de su tabla.

Javier si el contenido del informe es igual para todos pruebe con este código

Sub EnviarCorreoConInformeAdjunto()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim oApp As Object 'Aplicación Outlook
    Dim oMail As Object 'Correo electrónico
    Dim strSQL As String
    Dim strTempPath As String
    Dim strReportName As String
    Dim strRecipients As String ' Variable para almacenar los destinatarios
    'Ruta temporal para guardar el informe exportado
    strTempPath = "C:\Ruta\Temporal\"
    'Nombre del informe a exportar
    strReportName = "I_Fecha_Limite"
    'Inicializar la aplicación de Outlook
    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0) 'Crear un nuevo correo electrónico
    'Definir la consulta SQL
    strSQL = "SELECT * FROM I_Fecha_Limite WHERE F3=True;"
    'Abrir la base de datos y ejecutar la consulta
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSQL)
    'Recorrer los registros y construir la cadena de correos electrónicos
    Do While Not rs.EOF
        'Aquí puede  construir el cuerpo del correo utilizando los datos del registro actual
        'Puedes acceder a los campos de la tabla utilizando rs("NombreCampo")
        'Por ejemplo: rs("NombreCampo1"), rs("NombreCampo2"), etc.
        'Agregar el correo electrónico actual a la cadena de destinatarios
        strRecipients = strRecipients & rs("Email") & ";"
        'Exportar el informe a un formato compatible (por ejemplo, PDF)
        'Si es el mismo reporte para todos puede pasar la siguiente línea después del LOOP
        DoCmd.OutputTo acOutputReport, strReportName, acFormatPDF, strTempPath & strReportName & ".pdf"
        'Mover al siguiente registro
        rs.MoveNext
    Loop
    'Quitar el último punto y coma (;) de la cadena de destinatarios
    strRecipients = Left(strRecipients, Len(strRecipients) - 1)
    'Configurar el destinatario, asunto y cuerpo del correo electrónico
    oMail.To = strRecipients ' Asignar la cadena de destinatarios al campo "To"
    oMail.Subject = "Asunto del correo"
    oMail.Body = "Cuerpo del correo electrónico"
    'Adjuntar el informe al correo electrónico
    oMail.Attachments.Add strTempPath & strReportName & ".pdf"
    'Enviar el correo electrónico
    oMail.Send
    'Cerrar el recordset y la base de datos
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    'Cerrar la aplicación de Outlook
    Set oMail = Nothing
    Set oApp = Nothing
End Sub
Sub EnviarCorreoConInformeAdjunto()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim oApp As Object 'Aplicación Outlook
    Dim oMail As Object 'Correo electrónico
    Dim strSQL As String
    Dim strTempPath As String
    Dim strReportName As String
    'Ruta temporal para guardar el informe exportado
    strTempPath = "C:\Ruta\Temporal\"
    'Nombre del informe a exportar
    strReportName = "I_Fecha_Limite"
    'Inicializar la aplicación de Outlook
    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0) 'Crear un nuevo correo electrónico
    'Definir la consulta SQL
    strSQL = "SELECT * FROM I_Fecha_Limite WHERE F3=True;"
    'Abrir la base de datos y ejecutar la consulta
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSQL)
    'Recorrer los registros y enviar el correo electrónico
    Do While Not rs.EOF
        'Aquí puede construir el cuerpo del correo utilizando los datos del registro actual
        'Puede acceder a los campos de la tabla utilizando rs("NombreCampo")
        'Por ejemplo: rs("NombreCampo1"), rs("NombreCampo2"), etc.
        'Exportar el informe a un formato compatible (por ejemplo, PDF)
        DoCmd.OutputTo acOutputReport, strReportName, acFormatPDF, strTempPath & strReportName & ".pdf"
        'Configurar el destinatario, asunto y cuerpo del correo electrónico
        oMail.To = "[email protected]"
        oMail.Subject = "Asunto del correo"
        oMail.Body = "Cuerpo del correo electrónico"
        'Adjuntar el informe al correo electrónico
        oMail.Attachments.Add strTempPath & strReportName & ".pdf"
        'Enviar el correo electrónico
        oMail.Send
        'Mover al siguiente registro
        rs.MoveNext
    Loop
    'Cerrar el recordset y la base de datos
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    'Cerrar la aplicación de Outlook
    Set oMail = Nothing
    Set oApp = Nothing
End Sub

Disculpe repetí el código

Gracias Eduardo lo he probado y también es genial, gracias por atender mi duda.

Me alegro no olvide valorar la respuesta

Respuesta
1

Si es el mismo informe para todos (sin personalizar) bastara con crear una lista con las direcciones-e y adjudicársela a un único correo, todos recibirán el mismo mensaje.

Un método para conservar la privacidad y no publicar correos ajenos consiste en enviarse el mensaje a uno mismo y poner la lista de destinatarios en el apartado de correo oculto.

Hay mensajes recientes sobre enviar correos (y salvo detalles nimios) son todos equivalentes, si tienes alguna duda publícala (o utiliza una macro que te guiara paso a paso).

Gracias Enrique,  pero es que la lista de trabajadores va cambiando continuamente y no siempre son los mismos  correos, pueden añadirse o eliminarse

La lista a la que hacia referencia se crea en base a los contactos que (estando en la base de datos) se les selecciona, algo que se puede hacer marcándolos o bien por grupos o,,, el método que se esta utilizando.

Eso se logra con una función que recorre la tabla y concatena los campos con el separador de listas, formato que aceptan los programas de correo.

Disculpa mi ignorancia Enrique pero desconozco como hacerlo

En el formulario en que se ponga el botón (lo más probable que sea el que permite seleccionar destinatarios, esto es: activar/desactivar el campo F3).

Con este procedimiento en el evento click del botón, se envía el mismo correo a todos los de la lista (que ira en CCO).

Notas:
"[email protected]" ===> dirección de correo-e de quien envía los correos
"Notificacion" ==> Titulo del correo
"Adjunto: notificacion en formato pdf" ===> cuerpo del mensaje

Cambia los dato es por los que corresponda y envíate a ti mismo el mensaje, este es el código del botón (al que yo denomine Notificar

Private Sub Notificar_Click()
Dim Tbl_Temp As DAO.Recordset, Destinos$
Set Tbl_Temp = CurrentDb.OpenRecordset("SELECT correo FROM T_Trabajador WHERE F3 <> 0;", , dbReadOnly)
With Tbl_Temp
If Tbl_Temp.RecordCount = 0 Then MsgBox "No hay destinatarios": Exit Sub
Do Until .EOF
    If Len(Destinos) <> 0 Then Destinos = Destinos & ";"
    Destinos = Destinos & !Correo
    .MoveNext
    Loop
.Close
End With
Set Tbl_Temp = Nothing
DoCmd. SendObject acReport, "I_Fecha_Limite", "PDFFormat(*.pdf)", "[email protected]", "", Destinos, "Notificacion", "Adjunto: notificacion en formato pdf", False, ""
End Sub

Por cierto no lo envía, lo deposita en la bandeja de salida y se gestionara en cuanto sea posible (cuando se abra el gestor de correo).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas