Botón para enviar pdf guardado en carpeta externa y que su nombre coincida con un campo

Utilizo un botón para abrir un pdf guardado en una carpeta externa, que su código es el siguiente;

Private Sub pdfvp_Click()
If Nz(Me.Vale_de_pedido, "") = "" Then Exit Sub
Dim RutaArchivo As String
RutaArchivo = CurrentProject.Path & "\VP_entregado\" & Me.Vale_de_pedido & ".pdf"
If Dir$(RutaArchivo) = "" Then
MsgBox "Vale de pedido entregado no escaneado", vbInformation, "Aviso"
Else
Application.FollowHyperlink RutaArchivo
End If
End Sub

Ahora necesitaría que ese pdf se enviara por correo "outlook".

La dirección de correo está en un campo que se llama email.

La Carpeta de donde toma el pdf se llama VP_entregado.

El nombre del pdf es el del campo Vale_de_pedido.

1 Respuesta

Respuesta
2

Primero déjame decirte que no entiendo lo de

If Nz(Me.Vale_de_pedido, "") = "" Then Exit Sub

Es decir, si vale_de_pedido es nulo transfórmalo en cadena vacía y si es igual a cadena vacía. Pues claro que es igual, si tu mismo lo has transformado en cadena vacía.

¿No sería más razonable poner

If isnull([vale_de_pedido]) then

Y créeme, jamás he utilizado el Outlook. Cuando pulso el botónDicho esto, si tengo en una carpeta un pdf llamado 111

Y en un formulario tengo un control Vale_de_pedido y un control Email

Cuando pulso el botón

Me lo pasa a la bandeja de salida con ese archivo 111.pdf

El código del botón es

Private Sub Comando226_Click()
Dim pola As Outlook.Application
    Dim pTaskItem, ptaskitemasig As Outlook.TaskItem
    Const olCreateTasks = 3
    Const olDialog = 1
    Const olSound = 8
    Set pola = CreateObject("Outlook.Application")
    sSubject = "Remitiendo algo en PDF"
    sBody = "Muy señor mío, le remito lo que me ha pedido"
    dDue = Now()
    dStart = Now()
    sSoundFile = "alarm3"
    bReminderSet = True
    Set pTaskItem = pola.CreateItem(olCreateTasks)
        pTaskItem.Subject = sSubject
        pTaskItem.Body = sBody
        pTaskItem.DueDate = dDue
        pTaskItem.StartDate = dStart
        pTaskItem.ReminderSet = bReminderSet
        If bReminderSet Then
              pTaskItem.ReminderSoundFile = sSoundFile
              pTaskItem.ReminderTime = Now()
        End If
        pTaskItem.Recipients.Add ("" & Me.Email & "")
        pTaskItem.Attachments.Add ("C:\users\gonza\documents\documentos juani\" & "" & "" & Me.Vale_de_pedido & "" & ".pdf")
        pTaskItem.Save
        pTaskItem.Assign
        pTaskItem.Send
        Set pTaskItem = Nothing
        Set pola = Nothing
        Kill "C:\users\gonza\documents\documentos Juani\" & "" & "" & Me.Vale_de_pedido & "" & ".pdf"
End Sub

Lógicamente tienes que cambiar mi ruta por la tuya

La última línea, lo de kill... es para que elimine ese archivo de la carpeta. Si no quieres eliminarlo basta con borrarla.

IMPORTANTE. Si vas a trasladar a tu base la instrucción, acuérdate de abrir el edito de VB y pulsa Herramientas-Referencias y activa la casilla Microsoft Outlook XX.X Object Library

lo de XX. X es por la versión de Office que tengas instalado.

¡Gracias! 

Gracias Julián.

Me gustaría no tener que abrir el outlook de office, pero no se de otra forma. 

He probado el código y me da el siguiente error. Por que puede ser

Donde te puse Importante, es lo que tienes que hacer, activar la referencia

¡Gracias!

Correcto lo busque pero no lo activé.

Funciona correctamente.

Si quisiera que apareciera el outlook antes de enviar el correo por si cambio ha añado algún destinatario que tendría que modificar del código.

Gracias por todo nuevamente Julián.

Disculpa otra vez Julián.

Los correos enviados no aparecen en la bandeja de salida, se puede hacer que apareaca. Y podría eliminar lo que está en el recuadro rojo?

En Outlook, lo que ves es que hay un mensaje en la bandeja de salida y hasta que no le digas que lo envíe se queda ahí( al menos eso creo). Lo que pasa es que yo lo abrí, para que vieras que le adjuntaba el archivo. Con respecto a lo que señalas, de que no se vea, como te dije, usé el Outlook esporádicamente allá por el año 92 y 93, desde entonces dejé de usarlo, por eso creía que era así como debía enviarlo. Cuando empecé con email usaba el servidor de correo de ONO, que era infinitamente mejor que Outlook. Hasta hace dos años en que ONO fué comprada por Vodafone y cerraron el servidor de correo. Desde entonces uso Gmail.

Lo único que se me ocurre es que "cuelgues" la pregunta en Todoexpertos en el apartado de Outlook.

De todas formas ese archivo, por ejemplo, Vale_de_Pedido = 111( por poner un número) ¿No será generado en el propio Access, como un informe de factura o un formulario que luego guardas en una carpeta? Es que si fuera así podrías usar el propio Outlook de Office y entonces si sería sencillo, con por ejemplo

Docmd.openreport"Vale_de_pedido",acpreview,,"Vale_de_pedido=" & me.vale_de_Pedido & ""

DoCmd.OutputTo acOutputReport "Vale_de:pedido"....

Docmd.sendobject acsendreport,"Vale_de_pedido",........

Me explico, si fuera por ejemplo un informe, le estarías diciendo

Abre el informe Vale_de_Pedido en aquel registro en que el control Vale_de_pedido sea igual al que figura en ese momento en el formulario

Luego, mándalo a la carpeta... en formato Pdf

Luego mándalo por correo a...

Si fuera así es mucho más sencillo.

¡Gracias! 
vale. Gracias por todo. Seguiré buscando. 
a mi me gustaría usar gmail pero no se como hacerlo. 
en este caso son unos justificantes de entrega que firma el que retira el material y después los escaneo y guardo  en una carpeta con el nombre del vale. Y después desde el formulario acces lo envío a su encargado y quería que se abriera el correo antes de que se envíe automáticamente para añadir el email del que lo retira para que lo reciba también 

Desde Gmail lo tienes en

https://www.youtube.com/watch?v=hfDL8tRIprs 

Muy bien explicado por Antonio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas