Saltar al contenido

VBScript – Imprimir adjunto automáticamente al momento de recibir un correo en Outlook

El siguiente VBScript imprime adjuntos automáticamente al momento de recibir un correo en Outlook, se puede especificar las extensiones del tipo de archivo que se desea imprimir, de quien o que tipo de correos se van a imprimir los adjuntos.

Instrucciones

1.- Abrir el editor de Visual Basic (ALT+F11).

2.- Insertar un modulo nuevo (Insert > Module).

3.- Copiar el codigo VBScript.

4.- Para hacer uso de este debemos crear 2 directorios (Carpetas) el cual especificaremos la ruta en las lineas 12, 25 y 30 del código; debemos prestar cuidado cuando la ruta se escribe con \ al final o no.

5.- En la linea 14 debemos especificar la extensión de los archivos en el actual se especificaron DOC, DOCX, PDF y TXT; Si realizas cambios es importante poner en mayúsculas las extensiones, tambien se pueden agregar o quitar, para eliminar debes eliminar Or InStr(UCase(objAtt.DisplayName), “.DOCX”)  

6.- Si deseamos que se eliminen (O se tiene problema con archivos repetidos) los archivos que se imprimen debemos quitar el apostrofe de la linea 30.

Para mas información de configuración ver: Como utilizar el Editor VBA en Office (Utilizar Macros VBScript) y Outlook – Crear y configurar reglas

Proceso

El código realiza el siguiente proceso.

  1. Al recibir correo revisa si contiene adjuntos.
  2. Si contiene adjuntos revisa las extensiones de estos.
  3. Si alguno de los especificados se encuentra se extrae ruta y nombre del archivo.
  4. Lo guarda en el folder temporal C:\Imprimir (Este se puede modificar).
  5. Envia a imprimir el documento
  6. Mueve el archivo a la carpeta C:\Imprimir\Impresos\
  7. Hasta finalizar con los archivos adjuntos.

Código

Public Sub ToPrintAttachments(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim FullFileName As String
Dim objFSO As Object
Dim WScript As Object
Dim dteWait
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WScript = CreateObject("WScript.Shell")
Set objShell = CreateObject("Shell.Application")
 
saveFolder = "C:\Imprimir"
For Each objAtt In itm.Attachments
    If ((InStr(UCase(objAtt.DisplayName), ".DOC") Or InStr(UCase(objAtt.DisplayName), ".DOCX") Or InStr(UCase(objAtt.DisplayName), ".TXT") Or InStr(UCase(objAtt.DisplayName), ".PDF"))) Then
              FullFileName = saveFolder & "\" & objAtt.DisplayName
              objAtt.SaveAsFile (FullFileName)
              'printAttachments saveFolder
              Set objFolder = objShell.NameSpace(0)
              Set printItem = objFolder.ParseName(FullFileName)
              printItem.InvokeVerbEx ("Print")
                ' delay before move and delete
              dteWait = DateAdd("s", 5, Now())
              Do Until (Now() > dteWait)
              Loop
                objFSO.MoveFile "C:\Imprimir\*", "C:\Impresos\"
                ' delay before move and delete
              dteWait = DateAdd("s", 5, Now())
              Do Until (Now() > dteWait)
              Loop
                'Desmarcar la linea siguiente para eliminar los archivos temporales (quitar apostrofe)
                objFSO.DeleteFile ("C:\Impresos\*")
                ' delay before finish
              dteWait = DateAdd("s", 5, Now())
              Do Until (Now() > dteWait)
              Loop
    End If
Next
End Sub

Te recomendamos leer:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (60)

Hola, intentare con este script. Actualmente lo tengo configurado con una regla que comprueba cuando un correo entrante tiene un dato adjunto, marque como leido, categorize como impreso e imprima. Tengo la opcion habilitada de “imprimir datos adjuntos. Cuando llega el correo lo marca como leido y lo categoriza correctamente, pero solo imprime la caratula del correo y el adjunto no. Me sale un error en ACROBAT de que no se encuentra el archivo especificado.
Sabes por que?
Espero me puedas ayudar,saludos.

Responder

Buen dia

Si tienes Windows 7 en adelante te puede estar causando el error el User Account Control; desactivarlo y reinicia el equipo cuando lo pida, este causa problemas de acceso cuando son carpetas mappeadas y temporales.

Responder

Asi es, W7 X64 Outlook 2013 X64 y ACROBAT PRO. Hoy pruebo esa solucion y te comento en que resulto, aunque me suena muy logico porque trabajo en un entono muy controlado y de hecho no tengo permisos de administrador.

Te aviso, gracias

Responder

Hola:
Me parece interensante el codigo VBScript , pero me gustaria que saber como hacer para que imprima automaticamente 2 copias del archivo adjunto.

Responder

Buen dia Luis

Se tendría que modificar el Script para enviar 2 copias de cada documento, pero una solución “momentánea” es duplicar la linea 20 que es: printItem.InvokeVerbEx (“Print”).

Saludos.

Responder

Muchas Gracias Estimado:
Voy a probar y te cuento como resulta.

saludos,

Responder

Hola, estoy probando este script en un windows 10, con outlook pro 2010 y no me responde, no se donde está el error. He realizado pruebas sobre la misma regla y esta si se ejecuta, pero el script ni copia el adjunto ni lo imprime. He modificado el UAC como proponen más arriba.

Saludos y gracias!

Responder

Buen dia Alex

Que extensión son tus archivos?

Responder

Buenas Tardes

Las extensiones que necesito imprimir son *.pdf. *.doc, *.odt.
Las pruebas las realizo con un correo que tiene un documento pdf y un documento doc.
Tengo habilitadas las macros de outlook. He creado una regla sin lanzar script para comprobar que la regla se está ejecutando y se ejecuta.
Si lanzo manualmente la regla con el script solo me imprime el doc.
Si dejo que la regla con el script se ejecute automáticamente no imprime nada, ni lanza mensajes de error, ni nada de nada.

Saludos y gracias!

Responder

me olvidé, cuando ejecuto la regla manualmente y me imprime 1 de los 2 documentos no me mueve ninguno de los adjuntos a la carpeta especificada.

Saludos y gracias!

Responder

Buen dia Alex

Realice un pequeño cambio en el codigo ahora se tienen que crear 2 directorios por ejemplo: C:Por Imprimir y C:Impresos, si deseas eliminar los archivos temporales de la carpeta Impresos debes eliminar el apostrofe de la linea 30.

Comentas si ahora ya funciona.

Saludos.

Hola, primero de todo darte las gracias por tu desinteresada ayuda.

Si dejo outlook desatendido no imprime y no mueve los archivos. Si cambio la regla de script a imprimir por ejemplo, si funciona la regla y me imprime el cuerpo del mail.

Si fuerzo la regla manualmente, por ejemplo, para los no leidos, me imprime el documento DOC y lo copia a imprimir pero no lo mueve a impresos. El documento PDF ni lo imprime ni lo copia. Ambos están dentro del mismo mail.

¿hay alguna manera de saber que el script se está lanzando? no entiendo apenas VB, pero un ECHO o algún comando similar que muestre en pantalla que el script está corriendo, si más no para saber que pasa cuando outlook esta desatendido.

Saludos y gracias de nuevo!

Responder

Buen dia Alex

Claro, puedes añadir la siguiente linea después de declarar la funcion por ejemplo

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)

MsgBox \"Script se ha ejecutado\"

\' Demas CODIGO AQUI

End Sub

También debes asegurarte que ningún otro modulo tenga el mismo nombre ya que no se ejecutaran.

Saludos.

Responder

Solamente tengo tu código en el modulo01. Nada más.

Responder

Buen dia Alex

Agregaste la linea del mensaje para verificar que este ejecutándose el script? Me comentas el resultado.

Responder

Buen dia Alex

agregaste la linea MsgBox “Script se ha ejecutado”?

He probado nuevamente el Script en mi equipo y se ejecuta sin problemas.

Saludos.

Responder

Hola!, disculpa la tardanza.

He añadido la linea y si me muestra el “Script se ha ejecutado”.
Si hay más de un adjunto, (1doc + 1pdf) solo imprime el DOC y mueve ambos a la carpeta impresos.

saludos!

Buen dia Alex

Realice una prueba con dos documentos un .doc y otro .pdf el cual imprime ambos, aumente el tiempo de espera del delay para ver si es cuestion de la velocidad al momento de ejecutar el script, ya esta publicada la actualización del codigo.

Saludos.

Buem día! tengo un problema. Tengo mi cuenta personal de mi trabajo pero en ella tengo una cuenta compartida donde llegan las facturas y ese tipo de documentos. Y tengo que por medio de una macro todo los archivos xml y pdf se descarguen automaticamente. el detalle es que las macros que tengo solo realiza lo que quiero con mi cuenta personal con la que tengo compasrtida no realizada nada. Tengo Office 365. ya todo la informacion esta en la nube. Agradeceria mucho su ayuda. saludos

Responder

Buen dia Erik!

Te debe permitir seleccionar el Mailbox para la cual ejecutar la regla que estas creando, en este caso debes crear dos reglas asi como configuraste para tu cuenta personal solo que en la segunda seleccionas el mailbox compartido.

No te puedo dar mas detalles ya que no he utilizado Office 365.

Saludos.

Responder

Hola amigo ya pegue el codigo y lo guarde y no hace nada tengo que realizar otra serie de pasos?

Responder

Buen dia Alejandro

Deben estar los macros habilitados en outlook y crear una regla para ejecutar el script al momento de recibir el correo.
ver: Como utilizar el Editor VBA en Office (Utilizar Macros VBScript) y Outlook – Crear y configurar reglas

Que tengas excelente dia.

Responder

perfecto ya supe como, ahora fernando
crees que puedas ayudarme para que ahora en lugar de un archivo adjunto me descargue el body del correo?

Responder

Gracias Fer ya vi como funciona, otra duda podrias ayudarme a que en lugar de un archivo adjunto ahora me descargue el body del correo ?? gracias

Responder

Buen dia Alejandro

Prueba el siguiente código:

Sub AutomaticallyPrintEmail(Item As Outlook.MailItem)
Dim oApp As Outlook.Application
Dim oNameSpace As Outlook.NameSpace
Dim oTempMail As Outlook.MailItem
Dim oInbox As Outlook.MAPIFolder
Set oApp = Application
Set oNameSpace = oApp.GetNamespace(\"MAPI\")
Set oInbox = oNameSpace.GetDefaultFolder(olFolderInbox)
Set oTempMail = oApp.ActiveExplorer.CurrentFolder.Items.Add(olMailItem)

oTempMail.BodyFormat = Item.BodyFormat
oTempMail.Body = Item.Body
oTempMail.PrintOut
oTempMail.Delete
Item.UnRead = False
Set Item = Nothing
Set oTempMail = Nothing
Set oInbox = Nothing
Set oNameSpace = Nothing
Set oApp = Nothing
End Sub

Que tengas excelente dia.

Responder

Muy buenas Fernando tengo esto para poder imprimir varios XLS que llegan a un Correo, funciona todo perfecto pero a la hora de cerrarse me dice que si quiero guardar, tengo que darle manualmente a que NO y seguidamente se abre el siguiene Excel, se imprime pero vuelve a pedir si guardar SI o NO, como son muchos hay alguna forma de que se cierre Automaticamente solo se imprime la Hoja1, te pongo el Código que tengo puesto:

Public Sub PrintXLSEXCEL(itm As Outlook.mailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim FullFileName As String
Dim objFSO As Object
Dim WScript As Object
Dim dteWait
Dim wb As Workbook
Set objFSO = CreateObject(\"Scripting.FileSystemObject\")
Set WScript = CreateObject(\"WScript.Shell\")
Set objShell = CreateObject(\"Shell.Application\")
Set Inbox = GetNamespace(\"MAPI\").GetDefaultFolder(olFolderInbox).Parent.Folders.Item(\".EXCEL\")
saveFolder = \"C:EXCEL\"
For Each objAtt In itm.Attachments
If (InStr(UCase(objAtt.DisplayName), \".XLS\")) Then
FullFileName = saveFolder & \"\" & objAtt.DisplayName
objAtt.SaveAsFile (FullFileName)
\'printAttachments saveFolder
Set objFolder = objShell.NameSpace(0)
Set printItem = objFolder.ParseName(FullFileName)
printItem.InvokeVerbEx (\"Print\")
itm.Close olDiscard
\' delay before move and delete
dteWait = DateAdd(\"s\", 5, Now())
Do Until (Now() > dteWait)
Loop
For Each wb In Workbooks
wb.Save
Next
Application.Quit
End If
Next
End Sub

Responder

Buen dia Felipe

Estas indicando guardar el Workbook en las siguientes lineas:

For Each wb In Workbooks
wb.Save
Next

prueba eliminando o comentando estas lineas.

Excelente dia

Responder

Buen día Fernando, Cómo puedo hacer para imprimir el contenido del correo envés de los adjuntos y como puedo enviarlo a dos impresoras diferentes? Muchas gracias, Saludos

Responder

Buen dia Carlos

Para imprimir el cuerpo de correo revisa el siguiente código.
Sub AutomaticallyPrintEmail(Item As Outlook.MailItem)
Dim oApp As Outlook.Application
Dim oNameSpace As Outlook.NameSpace
Dim oTempMail As Outlook.MailItem
Dim oInbox As Outlook.MAPIFolder
Set oApp = Application
Set oNameSpace = oApp.GetNamespace(\"MAPI\")
Set oInbox = oNameSpace.GetDefaultFolder(olFolderInbox)
Set oTempMail = oApp.ActiveExplorer.CurrentFolder.Items.Add(olMailItem)

oTempMail.BodyFormat = Item.BodyFormat
oTempMail.Body = Item.Body
oTempMail.PrintOut
oTempMail.Delete
Item.UnRead = False
Set Item = Nothing
Set oTempMail = Nothing
Set oInbox = Nothing
Set oNameSpace = Nothing
Set oApp = Nothing
End Sub

Saludos.

Responder

Buenos días Fernando, con lo que puse de guardar no me funciona y al final lo que me hace es cerrar el Microsoft Outlook 2010, no se si tendrá que ver el Office2010, porque cuando le doy a imprimir directamente al EXCEL lo abre perfectamete e imprime perfectamente, pero me sale el Dialogo de guardar SI, NO y CANCELAR. Sin embargo todo lo que llega en PDF lo imprime y cierra perfectamente.

Gracias y Saludos.

Responder

Buen dia Felipe, Como tienes tu Script actual?

Prueba eliminando o comenta lo antes mencionado, quedaría así, me comentas como funciona.

Public Sub PrintXLSEXCEL(itm As Outlook.mailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim FullFileName As String
Dim objFSO As Object
Dim WScript As Object
Dim dteWait
Dim wb As Workbook
Set objFSO = CreateObject(\"Scripting.FileSystemObject\")
Set WScript = CreateObject(\"WScript.Shell\")
Set objShell = CreateObject(\"Shell.Application\")
Set Inbox = GetNamespace(\"MAPI\").GetDefaultFolder(olFolderInbox).Parent.Folders.Item(\".EXCEL\")
saveFolder = \"C:EXCEL\"
For Each objAtt In itm.Attachments
If (InStr(UCase(objAtt.DisplayName), \".XLS\")) Then
FullFileName = saveFolder & \"\" & objAtt.DisplayName
objAtt.SaveAsFile (FullFileName)
\'printAttachments saveFolder
Set objFolder = objShell.NameSpace(0)
Set printItem = objFolder.ParseName(FullFileName)
printItem.InvokeVerbEx (\"Print\")
itm.Close olDiscard
\' delay before move and delete
dteWait = DateAdd(\"s\", 5, Now())
Do Until (Now() > dteWait)
Loop
\'For Each wb In Workbooks
\'wb.Save
\'Next
\'Application.Quit
End If
Next
End Sub

Saludos.

Responder

Hola Fernando ante todo gracias por tu ayuda. He instalado el script para que me imprima los datos adjuntos PDF y funciona perfectamente pero cuando llega un correo con más de un archivo pdf sólo me imprime el primero. ¿puedes darme una solución? Gracias de nuevo.

Responder

Buen dia Pedro Bienvenido a PortalMasTips,

El script esta escrito para imprimir todos los adjuntos, Lo he revisado nuevamente con 4 archivos PDFs y se imprimen.

Puedes confirmar si te marca error? al igual de confirmar que en la carpeta Impresos.

También puedes ajustar los tiempos de espera en las lineas dteWait = DateAdd(“s”, 5, Now()) el numero 5 es el tiempo de espera antes de proceder, puedes poner 2, 3 o mas segundos.

Excelente dia

Responder

Me sale un cuadro y pone error 70 en tiempo de ejecución

Responder

Son privilegios sobre la carpeta o los archivos estan abiertos al momento de eliminar el folder temporal, dale debug y confirma que linea es donde marca el error.

Responder

Como seria el script para imprimir desde una carpeta archivos que se guarden alli, ya sean PDF, TXT? y despues de impresos que sean borrados

Responder

Buen día Ricardo

La parte que realiza el proceso de impresión seria el siguiente.

saveFolder = \"C:Imprimir\"
Set objFolder = objShell.NameSpace(0)
Set printItem = objFolder.ParseName(FullFileName)
printItem.InvokeVerbEx (\"Print\")

En base a eso puedes generar el VBScript que requieras.

Saludos.

Responder

Buenas tardes Fernando,
Muchas gracias por el script. pero me veo en la necessidad de imprimir por una impresora mapeada en el codigo y no por la predeterminada.
adjunto script
Public Sub Imprim_adjunto(itm As Outlook.MailItem)
‘ Declaramos las variables
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim FullFileName As String
Dim objFSO As Object
Dim WScript As Object
Dim dteWait
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set WScript = CreateObject(“WScript.Shell”)
Set objShell = CreateObject(“Shell.Application”)
‘ Directorio donde Guardar los archivos
saveFolder = “C:Imprimir”
‘ Empezamos el bucle
For Each objAtt In itm.Attachments
If ((InStr(UCase(objAtt.DisplayName), “.DOC”) Or InStr(UCase(objAtt.DisplayName), “.DOCX”) Or InStr(UCase(objAtt.DisplayName), “.TXT”) Or InStr(UCase(objAtt.DisplayName), “.PDF”) Or InStr(UCase(objAtt.DisplayName), “.XLS”) Or InStr(UCase(objAtt.DisplayName), “.XlSX”))) Then
FullFileName = saveFolder & “” & objAtt.DisplayName
objAtt.SaveAsFile (FullFileName)

‘ Definimos el nombre del documento adjunto a guardar y imprimimos
Set objFolder = objShell.NameSpace(0)
Set printItem = objFolder.ParseName(FullFileName)
printItem.InvokeVerbEx (“Print”)

‘ delay before move and delete
dteWait = DateAdd(“s”, 5, Now())
Do Until (Now() > dteWait)
Loop

End If
Next
End Sub

Un Saludo y muchas gracias

Responder

Buen dia Carles

Forma que conozca para envía a una impresora no predeterminada especificando en el código no conozco, lo que se realiza es cambiar la impresora predeterminada temporalmente y al finalizar el proceso regresar nuevamente la predeterminada, el código para realizar el cambio de impresora es:

Dim strPrinterName
Dim objWMI
Dim colPrinters
Dim WshNetwork

strPrinterName = \"Nombre exacto de impresora\"

Set WshNetwork = CreateObject(\"Wscript.Network\")
set objWMI = GetObject(\"winmgmts:\\.rootcimv2\")

set Printers = objWMI.ExecQuery(\"Select * From Win32_Printer\")

Dim Printer
For Each Printer In Printers
If Printer.Name = strPrinterName Then
WshNetwork.SetDefaultPrinter strPrinterName
End If
Next

Debes ingresar el nombre exacto de la impresora de lo contrario no realizara el cambio al no encontrarla.

Excelente dia.

Responder

Fernando Perfecto el script para cambiar la impresora predeterminada.
Ya para rizar el rizo desde el script comentado en el post para imprimir adjuntos se podria añadir una linea para que imprima la cabecera del correo? lo tengo configurado desde Outlook pero lo imprime por la impresora predeterminada.
Un Saludos y Gracias por tu respuesta!

Responder

Buen dia Carles

No comprendo que es lo que quieres imprimir, el asunto del correo?

Responder

Buenos dias Fernado, Si el Asunto del correo.

Buenas Fernando. Si el Asunto i el curpo del mensaje.
Saludos

Buen dia Carles

Puedes agregar el siguiente código el cual imprime el correo lo puedes poner despues de cambiar la impresora predeterminada.

Dim oTempMail As Outlook.MailItem
Dim oApp As Outlook.Application
Dim oNameSpace As Outlook.NameSpace
Dim oInbox As Outlook.MAPIFolder
Set oApp = Application
Set oNameSpace = oApp.GetNamespace(\"MAPI\")
Set oInbox = oNameSpace.GetDefaultFolder(olFolderInbox)
Set oTempMail = oApp.ActiveExplorer.CurrentFolder.Items.Add(olMailItem)

oTempMail.BodyFormat = itm.BodyFormat
oTempMail.Body = itm.Body
itm.PrintOut

Saludos.

Muy buenas Fernado parece ser que el problema que tengo de que no cierre la Impresión del EXCEL2010 es que tiene activado algo del autoguardado, aunque lo he desactivado al cerrarse salen estas opciones de guardado:

GUARDAR, NO GUDARDAR, CANCELAR

Lo que me gustaría ahora es poder cambiar la ruta de la Carpeta donde se guarda el correo que imprimimos, lo tengo en el raíz del Correo y me gustaría ponerlo dentro de Bandeja de Entrada, por ejemplo:

VARIOS.IMPRIMIDOS

Este es el Script que tengo, al tener varios quiero ponerlos todos dentro de una misma Carpeta.

Public Sub PrintPDF(itm As Outlook.mailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim FullFileName As String
Dim objFSO As Object
Dim WScript As Object
Dim dteWait
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set WScript = CreateObject(“WScript.Shell”)
Set objShell = CreateObject(“Shell.Application”)
Set Inbox = GetNamespace(“MAPI”).GetDefaultFolder(olFolderInbox).Parent.Folders.Item(“.IMPRIMIDOS”)
saveFolder = “C:DOCUMENTOSIMPRIMIDOS”
For Each objAtt In itm.Attachments
If (InStr(UCase(objAtt.DisplayName), “.PDF”)) Then
FullFileName = saveFolder & “” & objAtt.DisplayName
objAtt.SaveAsFile (FullFileName)
‘printAttachments saveFolder
Set objFolder = objShell.NameSpace(0)
Set printItem = objFolder.ParseName(FullFileName)
printItem.InvokeVerbEx (“Print”)
itm.Close olDiscard
‘ delay before move and delete
dteWait = DateAdd(“s”, 5, Now())
Do Until (Now() > dteWait)
Loop
End If
Next

End Sub
Sub PrintAttachment()

End Sub

Responder

Buen dia Felipe

Seria de la siguiente forma: Set Inbox = GetNamespace(“MAPI”).GetDefaultFolder(olFolderInbox).Folders(“Varios”).Folders(“Imprimidos”)

Excelente dia

Responder

Muchas gracias Fernando, me ha funcionado perfectamente, pero si lo que hago es meterlo dentro de una Carpeta que esta creada en la Bandeja de Entrada me mueve perfectamente el Correo, pero no me hace la impresión, ni lo guarda en el Disco Duro.

Por Ejemplo Bandeja de Entrada –> DOCUMENTOS EMPRESASIMPRIMIDOS1
Bandeja de Entrada –> DOCUMENTOS EMPRESASIMPRIMIDOS2….

Gracias y Saludos.

Responder

Buen dia Felipe

Cual es el orden en el que se ejecuta la regla para mover los correos y el guardado e impresión?

En mi proceso lo que realizaría es:
1.- Ejecutar el script de Guardado e impresión (Sin cambios en el script) con Regla 1.
2.- Mover los correos con Regla 2.

Excelente dia

Responder

Buenos días o tardes Fernando, esto es lo que tengo puesto en varios Scripts que tengo para varias Empresas, lo que me gustaría sería que funcionase igual que esta ahora, pero que en vez de estar en Bandeja de EntradazLUCAS, estuviera en Bandeja de EntradaIMPRESIÓN EMPRESASzLUCAS:

Public Sub PrintPDFLucas(itm As Outlook.mailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim FullFileName As String
Dim objFSO As Object
Dim WScript As Object
Dim dteWait
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set WScript = CreateObject(“WScript.Shell”)
Set objShell = CreateObject(“Shell.Application”)
Set Inbox = GetNamespace(“MAPI”).GetDefaultFolder(olFolderInbox).Folders.Item(“zLUCAS”)
saveFolder = “C:DOCUMENTOSLUCAS”
For Each objAtt In itm.Attachments
If (InStr(UCase(objAtt.DisplayName), “.PDF”)) Then
FullFileName = saveFolder & “” & objAtt.DisplayName
objAtt.SaveAsFile (FullFileName)
‘printAttachments saveFolder
Set objFolder = objShell.NameSpace(0)
Set printItem = objFolder.ParseName(FullFileName)
printItem.InvokeVerbEx (“Print”)
itm.Close olDiscard
‘ delay before move and delete
dteWait = DateAdd(“s”, 5, Now())
Do Until (Now() > dteWait)
Loop
End If
Next

End Sub
Sub PrintAttachment()

End Sub

Muchas Gracias Fernando por la ayuda,

Responder

Buen dia Felipe,

La instrucción comentada anteriormente es lo que realiza, apuntar el folder principal a otro, solo debes cambiar el nombre de las carpetas.

GetNamespace(\"MAPI\").GetDefaultFolder(olFolderInbox).Folders(\"IMPRESION EMPRESAS\").Folders(“zLUCAS”)

Excelente dia.

Responder

hola. estoy intentando usar el macro, pero al copiarlo no lo detecta como un Macro. Ya no se que probar. Puedes echarme una mano? gracias

Responder

Buen dia Ruben

Se debe ejecutar desde una regla, no te lo va a ejecutar desde el editor de Visual; Revisa la siguiente documentación.

Para mas información de configuración ver:
* Como utilizar el Editor VBA en Office (Utilizar Macros VBScript)
* Outlook – Crear y configurar reglas
* Outlook – Opción ejecutar un script (run a script) no aparece en las reglas

Si lo quieres ejecutar directamente debes eliminar itm As Outlook.MailItem de la función y lo adaptas para que obtenga la selección.

Excelente dia.

Responder

Buenas tardes Fernando,

Esta macro es muy buena, ayuda muchísimo. Solo tengo un problema cada vez que se ejecuta me da un error en la ruta de las carpetas Imprimir y Impresos (ambas carpetas están en la unidad C). Me podrías Ayudar.

Gracias,

Responder

Buen dia ekaitz

Puedes jugar un poco con el temporizador dteWait = DateAdd(\"s\", 5, Now()) puedes aumentarlo a 10, te va a marcar error si el archivo aun esta en proceso de envio a impresion.

Me comentas si es otro tipo de error.

Excelente dia.

Responder

Buenaa de nuevo Fernando. Me da un error 70 en tiempo de ejecución. Hay alguna forma de quitar ese error?

Responder

Buen dia Ekaitz

Para ignorar los errores en VBScript puedes poner antes de For Each objAtt In itm.Attachments la linea On Error Resume Next

Debe ser por privilegios también puedes intentar cambiar la ruta a otro folder en tus documentos o escritorio

Excelente dia.

Responder

Hola Fernando, gran trabajo el tuyo ayudando a la gente!
Necesito crear un script que imprima sólo parte de un email en Outlook 365 y despues lo mueva a la carpeta PEDIDOS, ahora mismo lo hago mediante una regla, pero ésta no me permite especificar qué parte del pedido imprimir, por lo que lo imprime completo.
Te explico, tengo una tienda online y cuando recibo un pedido me mandan un email -siempre mismo titulo y formato- con el pedido que el cliente ha realizado. Mi problema es que yo necesito imprimir dicho email en una impresora de tickets (8cm de ancho) y el formato del email esta pensado para imprimir en A4 (2 hojas para un pedido normal).
La cuestion es que yo solo necesito imprimir parte de ese email (datos cliente, la parte del pedido, forma de pago…) en la impresora de tickets, puesto que si los imprimo en el formato en el que me llegan necesito 5 metros de papel y sale todo desordenado.
Si necesitas que te envie uno de los emails que recibo para que veas como son dímelo y te lo enviaría.
Muchas gracias con antelacion por tu ayuda!

Responder

Buen dia Guillermo

Estuve revisando tu requerimiento, como mencionas el inconveniente esta en el formato de la hoja del correo, en Outlook se puede cambiar el formato de hoja en el mismo script y delimitar a una hoja x hoja. Me puedes enviar a contacto(ARROBA)portalmastips.com un correo ejemplo para ver si se puede aplicar.

Excelente dia.

Responder

Holaaa Fernando! Ayer te envié una petición, pero no veo que se haya publicado. Escribo esto para ver si te llega.

Responder

Buen dia Guillermo

Claro que si lo recibi, mas cuando son solicitudes en el cual no cuento con algo ya hecho los voy aprobando cuando las voy respondiendo para que no se me pase en responder ningún comentario (El tiempo de respuesta puede variar en base al tipo de solicitud, cantidad de solicitudes en cola y mi tiempo disponible).

Te debe llegar un correo electrónico cuando responda tu solicitud.

Excelente dia

Responder
Compartir1
Twittear
Compartir
Pin
Más en Outlook VBScript
VBScript – Guardar archivos adjuntos de los correos seleccionados Outlook

VBScript – Guardar Archivos Adjuntos de Correos .MSG Ya Guardados en el Disco Duro

VBScript – Guardar Archivos Adjuntos de Correos .MSG Automaticamente (Guardar adjuntos de correos adjuntos)

Cerrar