Enviar correo con adjunto desde access por Oultook

Y expertos

Acudo a tu ayuda para validar si es posible modificar la macro que realizaste en Excel para enviar correos con adjuntos por Oultook, requiero hacer este mismo proceso pero desde Acces, tengo un formulario que me permite imprimir un informe en pdf y deseo poder enviarlo de una vez por correo, para imprimir el informe el formulario toma los datos de una consulta en la cual también esta el campo correo y cree un campo calculado que arroja el nombre del informe.

Ya tengo armado la parte que abre el correo con el asunto, el cuerpo y que lo envía pero me falta la parte que llama al destinatario y le adjunta la ruta donde esta almacenado el archivo

De antemano mil gracias por toda la ayuda. Dejo tu código nuevamente el cual es una ayuda para muchos de nosotros que tenemos tareas muy operativas.

Sub Enviar_Correos()
'---
' Por.Dante Amor
'---
'***Macro Para enviar correos
col = Range("H1").Column
Columns("Z").Clear
For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
Set dam = CreateObject("Outlook.Application").CreateItem(0)
'
dam.To = Range("B" & i).Value 'Destinatarios
dam.Cc = Range("C" & i).Value 'Con copia
dam.Bcc = Range("D" & i).Value 'Con copia oculta
dam.Subject = Range("E" & i).Value '"Asunto"
dam.Body = Range("F" & i).Value '"Cuerpo del mensaje"
'
For j = col To Cells(i, Columns.Count).End(xlToLeft).Column
archivo = Cells(i, j).Value
If archivo <> "" Then dam.Attachments.Add archivo
Next
On Error Resume Next
dam.Send 'El correo se envía en automático
werr = Err.Number
If werr <> 0 Then
Range("Z" & i).Value = "Correo no enviado"
End If
Err.Number = 0
On Error GoTo 0
'dam.Display 'El correo se muestra
Next
MsgBox "Correos enviados", vbInformation, "

1

1 respuesta

Respuesta
1

Fabián: Ignoro la causa por la que me sale sugerida ésta pregunta, cuando al parecer va dirigida a Dante (mis saludos).

No obstante mira si te puede ser de utilidad éste ejemplo que tengo en Mediafire.

Un saludo >> Jacinto

Jacinto, muchas gracias este ejemplo esta de perlas, aunque todavía me cuesta adaptarlo al código que tengo, no se si me puedas dar una manito.

Este es el evento que me imprime todos los informes que necesito enviar, sin embargo como lo mencione antes no se como asociar el destinatario y su archivo respectivo.

Private Sub btnasignarhoras_Click()
If idprograma.Value > 0 Or idgrupo.Value > 0 Or horaslunes.Value > 0 Or horasmartes.Value > 0 Or horasmiercoles.Value > 0 Or horasjueves.Value > 0 Or horasviernes.Value > 0 Or horassabado.Value > 0 Or horasdomingo.Value > 0 Then
'Comando que actualiza los datos
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.RunCommand acCmdSaveRecord
DoCmd.RunCommand acCmdRefresh
Dim db As Database
Dim rs As Recordset
Dim rsl As Recordset
Dim strSQL As String
Dim DateFormat

DateFormat = Format(Now, "dd-m-yyyy")

Set db = CurrentDb
Set rs = db.OpenRecordset("ConsuCarne")

'Stop
Do Until rs.EOF
'strSQL = "idprograma=" & rs!idprograma & "and idgrupo=" & Me.idgrupo & " and id=" & Me.Id
DoCmd.OpenReport "Generar_Carnes", acViewReport, , "idprograma=" & rs!idprograma & "and idgrupo=" & Me.idgrupo & " and id=" & Me.Id & " AND Participante=" & rs!Participante
DoCmd.OutputTo acOutputReport, "Generar_Carnes", "PDFFormat(*.pdf)", CurrentProject.Path & _
"\Carné" & rs!Participante & " Programa " & idprograma & " " & DateFormat & ".pdf", False, , , acExportQualityPrint
DoCmd.Close acReport, "Generar_Carnes"
rs.MoveNext
Loop
rs.Close

Set rs = Nothing
'_______________________________________________________________________________________________________________________________________________________________________________________________________________
'Enviar el correo con el adjunto

Dim OutApp As Object 'Outlook.Application
Dim OutMail As Object 'Outlook.MailItem
Dim Asunto As String
Dim mensaje As String

'Abre Outlook
Set OutApp = CreateObject("Outlook.Application")
'Crea el mensaje
Set OutMail = OutApp.CreateItem(0)


Asunto = "Carné para el registro de asistencia al programa: " & Me.txtnombreprograma.Value & " ID: N° " & Me.idprograma.Value
mensaje = "Estimado(a) participante," & vbCrLf & vbCrLf & "En el archivo adjunto encontrará el carné que debe utilizar para registrar su asistencia a través de los lectores que se encuentran habilitados en los pisos 5° y 6°del Edificio Fernando Barón. El Certificado de asistencia será elaborado a partir del registro en los lectores, por lo tanto es importante realizar este proceso en cada una de las sesiones presenciales programadas." & vbCrLf & vbCrLf _
& "El registro de asistencia debe realizarse una vez por sesión; y lo puede realizar desde su celular o traer el carné impreso." & vbCrLf & vbCrLf _
& "Nota: Si su dispositivo electrónico cuenta con protector de pantalla como Vidrio Templado o Película Anti espía, se recomienda traer impreso el carné para evitar problemas de lectura sobre su dispositivo móvil." & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "Cordialmente, "

With OutMail
.To = "[email protected]"
.CC = ""
.BCC = ""
.Subject = Asunto
.Body = mensaje
'Se pueden adjuntar ficheros
'.Attachments.Add = [ConsuCarne]![Fichero] & ".pdf"
'.Display 'tambien se puede usar .Send y lo situa en la bandeja de salida
.Send
End With

Set OutMail = Nothing
Set OutApp = Nothing
Else
MsgBox "Completar los datos", vbInformation, "ADVERTENCIA"
End If
End Sub

Fabián: En un análisis superficial de tu código, lo que veo es que el código de envío lo tienes totalmente desconectado del que genera el informe. Si te fijas en el ejemplo, la llamada al "envío" esta después del >> DoCmd.Close... y antes del >> .MoveNext.

'Lo envío por email según lo seleccionado
EnviarMensajeOutlook StrAsunto:="Su Lista de Precios", StrMensaje:="Adjunto Lista de Precios", StrPara:=Rst!eMail, StrAdjuntos:=StrArchivo

Con eso te quiero decir, que puedes:

1.- Meter todo el código que tienes después de las líneas continuas entre tus dos >>

DoCmd.Close acReport, "Generar_Carnes"

'Aquí el Código
Rs. MoveNext

2.- Hacer un procedimiento aparte, y llamarlo >> Desdede donde pongo>> 'Aquí el Código

En cualquiera de los casos, el correo donde pones >> "[email protected]", debería de ser el valor de un Campo del recordset, recogido en una variable y poner >>

.To = El Correo

No he mirado en detalle tus líneas de código, pero si te funciona para 1 debe funcionarte para todos.

Espero que eso pueda ayudarte. Un saludo >> Jacinto

Buena noches jacinto, trate de seguir tus indicaciones sin embargo todavía soy muy novato y no logre enlazar la parte del envió de correo. :( Me podrías dar una manito más.

Fabián: Si puedo y se encantado con ayudarte.

La mejor solución sería que me enviases tu BD, si es que no tienes datos confidenciales, y si los tienes, que dejes varios, pero inventados.

Si decides ésta opción, puedes enviarme un fichero comprimido a [email protected]

Otra solución es que tome tu código e ir analizandolo y adaptandolo, pero me llevará más tiempo y ando escaso del mismo. Ya me comentarás. Un saludo >> Jacinto

Hola Jacinto, muchas gracias por tu ayuda revisando un poco el código, logre realizar lo de todas maneras mil gracias de pronto más adelante necesite nuevamente una consulta y espero poder contar con la ayuda de ustedes.

Nuevamente mil gracias.

Hola Jacinto, quiero hacerte una consulta

de primera mano gracias por los aportes que me has dado me han servido muchísimo.

En el proceso anterior funciona muy bien sin embargo me acaba de surgir un error y no se cual es la mejor forma de corregir, el error es el siguiente "no se pueden abrir más bases de datos. (error 3048)" esto es debido a que la consulta que se realiza para hacer el informe incluye muchas tablas, sin embargo alcanza a realizar 10 informes y enviarlos pero si seleccionamos mas destinatarios sale el error. que puedo hacer para que pueda enviar por lo menos 100 destinatarios y no surja ese error.

Fabián: Si te parece mejor partimos de cero, porque leer y analizar todo ese texto cosume bastante tiempo y todos andamos un poco escasos del mismo.

Genera por favor una nueva pregunta, exponiendo la situación actual.

Las tablas que intervienen, la SQL que usas, el error ese que citas, etc. De esa manera es posible que aparte de mi respuesta puedes recibir otras y eliges la que mejor se adapte a tus necesidades. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas