Перейти до основного матеріалу

Як автоматично друкувати вкладення, коли листи надходять в Outlook?

У цьому підручнику демонструється метод поєднання сценарію VBA і правила Outlook, щоб допомогти вам автоматично друкувати вкладення певних листів, коли вони надходять в Outlook.


Автоматично друкувати вкладені файли, коли надходять певні листи

Припустимо, ви хочете автоматично роздрукувати вкладення вхідних листів від певного відправника. Ви можете зробити наступне, щоб це зробити.

Крок 1. Створіть сценарій в Outlook

По-перше, вам потрібно створити сценарій VBA в Outlook.

1. Запустіть Outlook, натисніть інший + F11 клавіші одночасно, щоб відкрити Microsoft Visual Basic для додатків вікна.

2 В Microsoft Visual Basic для додатків вікно, двічі клацніть на Project1 > Об'єкти Microsoft Outlook > ThisOutlookSession відкрити ThisOutlookSession (Код) вікно, а потім скопіюйте наступний код у це вікно коду.

Код VBA 1: автоматично друкувати вкладені файли (всі типи вкладень), коли надходять електронні листи

Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20230223
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileName As String
  On Error GoTo xError
  If Item.Attachments.Count = 0 Then Exit Sub
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Item.ReceivedTime, "yyyymmddhhmmss")
  If Not xFS.FolderExists(xTempFolder) Then
    MkDir (xTempFolder)
  End If
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    If IsEmbeddedAttachment(xAtt) = False Then
      xFileName = xTempFolder & "\" & xAtt.FileName
      xAtt.SaveAsFile (xFileName)
      Set xFolderItem = xFolder.ParseName(xFileName)
      xFolderItem.InvokeVerbEx ("print")
    End If
  Next xAtt
  Set xFS = Nothing
  Set xFolder = Nothing
  Set xFolderItem = Nothing
  Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
Exit Sub
End Sub

Function IsEmbeddedAttachment(Attach As Attachment)
Dim xItem As MailItem
Dim xCid As String
Dim xID As String
Dim xHtml As String
On Error Resume Next
IsEmbeddedAttachment = False
Set xItem = Attach.Parent
If xItem.BodyFormat <> olFormatHTML Then Exit Function
xCid = ""
xCid = Attach.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F")
If xCid <> "" Then
    xHtml = xItem.HTMLBody
    xID = "cid:" & xCid
    If InStr(xHtml, xID) > 0 Then
        IsEmbeddedAttachment = True
    End If
End If
End Function

Примітка: Цей код підтримує друк усіх типів вкладень, отриманих в електронних листах. Якщо ви хочете надрукувати лише вказаний тип вкладення, наприклад файли pdf, застосуйте наступний код VBA.

Код VBA 2: автоматично друкувати вказаний тип вкладень, коли надходять електронні листи

Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20230223
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileType As String, xFileName As String
  On Error GoTo xError
  If Item.Attachments.Count = 0 Then Exit Sub
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Item.ReceivedTime, "yyyymmddhhmmss")
  If Not xFS.FolderExists(xTempFolder) Then
    MkDir (xTempFolder)
  End If
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    If IsEmbeddedAttachment(xAtt) = False Then
      xFileName = xAtt.FileName
      xFileType = LCase$(Right$(xFileName, VBA.Len(xFileName) - VBA.InStrRev(xFileName, ".")))
      xFileName = xTempFolder & "\" & xFileName
      Select Case xFileType
        Case "pdf"   'change "pdf" to the file extension you want to print
          xAtt.SaveAsFile (xFileName)
          Set xFolderItem = xFolder.ParseName(xFileName)
          xFolderItem.InvokeVerbEx ("print")
      End Select
    End If
  Next xAtt
  Set xFS = Nothing
  Set xFolder = Nothing
  Set xFolderItem = Nothing
  Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
  Exit Sub
End Sub

Function IsEmbeddedAttachment(Attach As Attachment)
Dim xItem As MailItem
Dim xCid As String
Dim xID As String
Dim xHtml As String
On Error Resume Next
IsEmbeddedAttachment = False
Set xItem = Attach.Parent
If xItem.BodyFormat <> olFormatHTML Then Exit Function
xCid = ""
xCid = Attach.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F")
If xCid <> "" Then
    xHtml = xItem.HTMLBody
    xID = "cid:" & xCid
    If InStr(xHtml, xID) > 0 Then
        IsEmbeddedAttachment = True
    End If
End If
End Function

примітки:

1. Перш ніж застосувати цей код VBA для друку лише PDF-файлу у вхідних електронних листах, спочатку потрібно завантажити та встановити Adobe Acrobat Reader і встановіть його як програму читання PDF-файлів за замовчуванням на вашому комп’ютері.
2. У рядку Кейс "pdf", будь ласка, змініть "pdf" до розширення файлу, який потрібно надрукувати.

3. Далі клацніть Tools > Список літератури. У спливаючому Список літератури – Проект1 діалогове вікно, перевірте Виконання сценаріїв Microsoft , а потім клацніть на OK кнопки.

4. Збережіть код і натисніть клавішу інший + Q клавіші, щоб закрити Microsoft Visual Basic для додатків вікна.

Примітка: Будь ласка, переконайтеся, що Увімкнути всі макроси параметр увімкнено у вашому Outlook. Ви можете перевірити цю опцію, виконавши наведені нижче дії.

Крок 2. Створіть правило для використання сценарію

Після додавання сценарію VBA в Outlook вам потрібно створити правило для використання сценарію на основі певних умов.

1. Перейдіть на вкладку «Головна», клацніть Правила > Керування правилами та сповіщеннями.

2 В Правила та попередження у діалоговому вікні натисніть Нове правило кнопку, щоб створити правило.

Порада: Якщо ви додали кілька облікових записів електронної пошти до свого Outlook, вкажіть обліковий запис у Застосувати зміни до цієї папки розкривний список, у якому потрібно застосувати правило. В іншому випадку він буде застосовано до вхідної скриньки поточного вибраного облікового запису електронної пошти.

3. У першій Майстер правил діалогове вікно, виберіть Застосувати правило щодо отриманих повідомлень в крок 1 поле, а потім натисніть кнопку Далі.

4 У другому Майстер правил у діалоговому вікні потрібно:

4.1) Вкажіть одну або кілька умов у крок 1 коробка відповідно до ваших потреб;
У цьому випадку я хочу роздрукувати лише вкладення у вхідних електронних листах від зазначеного відправника. Ось я перевіряю від людей або громадської групи коробка
4.2) Клацніть підкреслене значення в крок 2 поле для редагування умови;
4.3) Клацніть Далі. Дивіться знімок екрана:

5. У третьому Майстер правил діалогове вікно, вам потрібно налаштувати наступним чином.

5.1) У Крок 1. Виберіть розділ дій, перевірте запустити скрипт коробка;
5.2) У крок 2 розділі клацніть підкреслений текст «скрипт»;
5.3) На відкритті Виберіть Сценарій діалоговому вікні клацніть назву коду VBA, який ви додали вище, а потім клацніть ГАРАЗД;
5.4) Клацніть на МАЙБУТНІ кнопку. Дивіться знімок екрана:

Порада: Якщо "запустити скрипт” відсутня у вашому Майстер правил, ви можете відобразити його, дотримуючись методу, згаданого в цій статті: відновити відсутній пункт Run A Script у правилі Outlook.

6. Потім інший Майстер правил з'являється запит на виключення. Ви можете вибрати винятки, якщо це необхідно, інакше натисніть кнопку МАЙБУТНІ кнопка без вибору.

7. В останній Майстер правил, потрібно вказати ім’я правила, а потім натиснути кнопку обробка кнопки.

8. Потім він повертається до Правила та попередження діалоговому вікні, ви можете побачити створене вами правило, перелічене всередині, натисніть кнопку OK , щоб закінчити всі налаштування.

Відтепер, коли буде отримано електронний лист від вказаної особи, вкладені файли будуть роздруковані автоматично.


Статті по темі

Друкувати лише вкладення з одного електронного листа або вибраних листів у Outlook
У Outlook ви можете роздрукувати електронні листи, але ви надрукували вкладення лише з однієї електронної пошти чи з вибраних листів у Outlook? У цій статті представлені прийоми вирішення цієї роботи.

Друкувати лише заголовок повідомлення електронної пошти в Outlook
Під час друку повідомлення електронної пошти в Outlook буде надруковано як заголовок, так і тіло повідомлення в електронному листі. Однак у деяких особливих випадках вам може знадобитися просто роздрукувати заголовок повідомлення з темою, відправником, одержувачами тощо. У цій статті буде представлено два рішення, як це зробити.

Роздрукуйте календар у визначеному/користувацькому діапазоні дат у Outlook
Зазвичай під час друку календаря в режимі перегляду місяця в Outlook він автоматично вибирає місяць, що містить поточну вибрану дату. Але вам може знадобитися надрукувати календар у межах спеціального діапазону дат, наприклад 3 місяці, півроку тощо. Ця стаття представить рішення для вас.

Роздрукуйте контакт із зображенням у Outlook
Зазвичай зображення контакту не роздруковується під час друку контакту в Outlook. Але іноді буде більш вражаючим надрукувати контакт із його зображенням. Ця стаття запропонує кілька обхідних шляхів, щоб це зробити.

Роздрукуйте вибране повідомлення електронної пошти в Outlook
Якщо ви отримали повідомлення електронної пошти та виявили, що є вибір вмісту електронної пошти, потрібно роздрукувати замість того, щоб друкувати ціле повідомлення, що б ви зробили? Насправді Outlook може допомогти вам досягти цієї операції за допомогою Інтернет-браузерів, таких як Firefox та Internet Explorer. Тут я візьму, наприклад, Інтернет-браузери. Будь ласка, перегляньте наступні підручники.

Більше статей про "друк в Outlook"...


Найкращі інструменти продуктивності офісу

Kutools для Outlook - Понад 100 потужних функцій, які покращать ваш Outlook

🤖 AI Mail Assistant: Миттєві професійні електронні листи з магією штучного інтелекту – геніальні відповіді одним клацанням, ідеальний тон, багатомовна майстерність. Трансформуйте електронну пошту без зусиль! ...

???? Автоматизація електронної пошти: Поза офісом (доступно для POP та IMAP)  /  Розклад надсилання електронних листів  /  Автоматична копія/прихована копія за правилами під час надсилання електронної пошти  /  Автоматичне пересилання (розширені правила)   /  Автоматично додавати привітання   /  Автоматично розділяйте електронні листи кількох одержувачів на окремі повідомлення ...

📨 Управління електронною поштою: Легко відкликайте електронні листи  /  Блокуйте шахрайські електронні листи за темами та іншими  /  Видалити повторювані електронні листи  /  розширений пошук  /  Консолідація папок ...

📁 Вкладення ProПакетне збереження  /  Пакетне від'єднання  /  Пакетний компрес  /  Автозавантаження   /  Автоматичне від'єднання  /  Автокомпресія ...

???? Магія інтерфейсу: 😊Більше красивих і класних смайликів   /  Підвищте продуктивність Outlook за допомогою вкладок  /  Згорніть Outlook замість того, щоб закривати ...

👍 Дива в один клік: Відповісти всім із вхідними вкладеннями  /   Антифішингові електронні листи  /  🕘Показувати часовий пояс відправника ...

👩🏼‍🤝‍👩🏻 Контакти та календар: Пакетне додавання контактів із вибраних електронних листів  /  Розділіть групу контактів на окремі групи  /  Видаліть нагадування про день народження ...

більше Особливості 100 Чекайте на ваше дослідження! Натисніть тут, щоб дізнатися більше.

 

 

Comments (22)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
Kan deze script ook gemaakt worden voor het verzenden van emails, dat je dan automatisch de bijlage kan laten afdrukken ?
This comment was minimized by the moderator on the site
Hello, thank you very much for the scripts, very useful indeed!
What if we wanted to print all attachments in an email in Outlook 365 web instead? Are there ways to try this?
This comment was minimized by the moderator on the site
Hi is there a way to print the email body including sender details and subject line in the script please. I pretty much need email and attachment printed out please.
This comment was minimized by the moderator on the site
Hi Mani,

If you want to print an email body including sender details and subject line, I suggest you try the Advanced Print feature of Kutools for Outlook. It can help you solve the problem easily.
https://www.extendoffice.com/images/stories/comments/comment-picture-zxm/advanced-print.png?1696644946
This comment was minimized by the moderator on the site
First of all, thanks a lot for these useful VBA scripts!
My situation is as follows: I usually receive a number of emails with 2 pdf files each. One pdf file, let's call it example1.pdf, needs to be printed only once, but the second pdf file, let's call it example2.pdf, needs to be printed 3 times. The example2.pdf does not necessarily always have the same name, but there are only around 2-4 name variants, so if it were possible to tell the script to look out for a few keywords I think it would work. Is this possible?
Oh, and would it be possible to also tell the script to print the example1.pdf file as duplex?
Thanks for your help.
This comment was minimized by the moderator on the site
Hi There, thanks for publishing this

I have followed the instructions above and are running the script to print all attachments delivered.

we typically receive these in batches of 5-8 and when testing i am getting 4 out of 5 prints with one failing with error 75. All PDF's have different names and are on separate emails/ the attachements can be opened manually fine so i assume theres an issue when it tries to copy this to the temp directory. Do you have any idea how we can resolve this?
This comment was minimized by the moderator on the site
Same problem here. After a couple of emails received during a short time, it can print 3-4 pdf, but after the error 75 appear, nothing print in the same batch of mails.
This comment was minimized by the moderator on the site
Hi Gabriel,
After testing, we have reproduced the problem you encountered. the VBA scripts have been updated in the post. Please give them a try. Thanks for your feedback.
This comment was minimized by the moderator on the site
Love this script! How about if I get an email with multiple pdfs and want one copy of each. Currently when I get 3 pdf's attached, it prints the final one, 3 times, and the other 2 do not get printed. Thanks for any help!
This comment was minimized by the moderator on the site
Hi val,

Sorry for the inconvenience.
Which VBA code are you applying? VBA code 1 or VBA code 2? Do the three PDF attachments have the same name? And which Outlook version are you using?
I have tested the codes and they worked well in my case. I need to know more specific about your issue.
This comment was minimized by the moderator on the site
Is it possible to specify the printer that should be used (not the system default printer)?
I need to print 2 types of documents on 2 different printers....
Thanks for your help!
This comment was minimized by the moderator on the site
Hi Simon,
Thank you for your comment. After trying with various methods, I can't seem to get this to work. Sorry for the inconvenience.
This comment was minimized by the moderator on the site
Hello, kindly I need help, I can't integrate the script for printing pdf only.
I activated everything, the first script for generic printing works perfectly (or almost: printing pdf attachments once printed acrobat reader remains open in the background), but the specific script for pdf does not work. Thanks for posting the scripts and for any help.
Good day
This comment was minimized by the moderator on the site
Hi Marco041,
There was something wrong with the code and it has been updated. Please give it a try.
Note: we have no way to prevent Acrobat Reader from being opened because we need to use it to open the pdf document for the next print job.
Thank you for your feedback.
Sub AttachementAutoPrint(Item As Outlook.MailItem)
'Updated by Extendoffice 20220920
  Dim xFS As FileSystemObject
  Dim xTempFolder As String
  Dim xAtt As Attachment
  Dim xShell As Object
  Dim xFolder As Object, xFolderItem As Object
  Dim xFileType As String, xFileName As String
  On Error GoTo xError
  Set xFS = New FileSystemObject
  xTempFolder = xFS.GetSpecialFolder(TemporaryFolder)
  xTempFolder = xTempFolder & "\ATMP" & Format(Now, "yyyymmddhhmmss")
  MkDir (xTempFolder)
  'Set Item = Application.ActiveExplorer.Selection.Item(1)
  Set xShell = CreateObject("Shell.Application")
  Set xFolder = xShell.NameSpace(0)
  For Each xAtt In Item.Attachments
    xFileName = xAtt.FileName
    xFileType = LCase$(Right$(xFileName, VBA.Len(xFileName) - VBA.InStrRev(xFileName, ".")))
    xFileName = xTempFolder & "\" & xFileName
    xAtt.SaveAsFile (xFileName)
    Select Case xFileType
      Case "pdf"   'change "pdf" to the file extension you want to print
        Set xFolderItem = xFolder.ParseName(xFileName)
        xFolderItem.InvokeVerbEx ("print")
    End Select
  Next xAtt
'xFS.DeleteFolder (xTempFolder)
Set xFS = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
Set xShell = Nothing
xError:
  If Err <> 0 Then
    MsgBox Err.Number & " - " & Err.Description, , "Kutools for Outlook"
    Err.Clear
  End If
Exit Sub
End Sub
This comment was minimized by the moderator on the site
Bonjour question pour vous j'ai fait les étapes pour cela mais dans les règle de message de mon outlook je ne voit pas que je peux utilisé un script
This comment was minimized by the moderator on the site
Hi STEPHANE CADORETTE,
If the “run a script” option is missing in your Rules Wizard, you can display it by following the method mentioned in this article: restore missing Run A Script pption in Outlook rule.
This comment was minimized by the moderator on the site
Bonjour moi j'ai un petit soucie lorsque j'ai fait et refait les étapes mais lorsque je créer ma règle je n'Ai pas l'option run a script.
This comment was minimized by the moderator on the site
Hi Stéphane,
If the “run a script” option is missing in your Rules Wizard, you can display it by following the method mentioned in this article: restore missing Run A Script pption in Outlook rule.
There are no comments posted here yet
Load More
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations