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