Bagaimana cara membuat lampiran cetak Outlook 2010 secara otomatis?

2

Saya mencoba membuat Outlook 2010 untuk mencetak lampiran secara otomatis saat kedatangan.

Saya telah menemukan ini di internet. Kode VBA adalah

Sub LSPrint(Item As Outlook.MailItem)  
    On Error GoTo OError

    'detect Temp
    Dim oFS As FileSystemObject
    Dim sTempFolder As String
    Set oFS = New FileSystemObject
    'Temporary Folder Path
    sTempFolder = oFS.GetSpecialFolder(TemporaryFolder)

    'creates a special temp folder
    cTmpFld = sTempFolder & "\OETMP" & Format(Now, "yyyymmddhhmmss")
    MkDir (cTmpFld)

    'save & print
    Dim oAtt As Attachment
    For Each oAtt In Item.Attachments
      FileName = oAtt.FileName
      FullFile = cTmpFld & "\" & FileName

      'save attachment
      oAtt.SaveAsFile (FullFile)

      'prints attachment
      Set objShell = CreateObject("Shell.Application")
      Set objFolder = objShell.NameSpace(0)
      Set objFolderItem = objFolder.ParseName(FullFile)
      objFolderItem.InvokeVerbEx ("print")

    Next oAtt

    'Cleanup
    If Not oFS Is Nothing Then Set oFS = Nothing
    If Not objFolder Is Nothing Then Set objFolder = Nothing
    If Not objFolderItem Is Nothing Then Set objFolderItem = Nothing
    If Not objShell Is Nothing Then Set objShell = Nothing

  OError:
    If Err <> 0 Then
      MsgBox Err.Number & " - " & Err.Description
      Err.Clear
    End If
    Exit Sub

  End Sub

Saya membiarkan makro berjalan. Saya menempelkan kode ke ThisOutlookSession di editor VBA dan menambahkan referensi ke Microsoft Scripting Runtime. Saya membuat aturan memeriksa apakah pesan baru itu dari saya dan jika demikian menjalankan skrip. Saya mengirim pesan dengan lampiran .doc kepada diri saya sendiri, dan saya mendapat pesan kesalahan "424 - Objek diperlukan" setelah diterima.

Saya tidak memiliki printer di rumah (saya memerlukan kode untuk tempat yang berbeda), jadi saya telah menetapkan Microsoft XPS Writer sebagai printer default saya hanya untuk melihat apakah itu berfungsi. Apakah ini alasan kesalahan? Jika tidak, apa dan bagaimana cara memperbaikinya?

Dan yang paling penting, bagaimana saya menyelesaikan pekerjaan? Saya perlu menggunakan skrip VBA (bukan add-on), dan saya baru di VBA.

Saya menggunakan Windows XP sekarang, tetapi saya perlu bekerja di Windows 7.

Michał Masny
sumber
Jika Anda membuka editor VBA, Anda bisa mengatur break point ke awal makro Anda. Kemudian, ulangi pengujian Anda dengan mengirim surat. Editor akan muncul dan Anda dapat menjalankan garis makro demi baris dengan F8. Dengan cara ini, kami mendapatkan detail lebih lanjut, baris mana yang menyebabkan kesalahan.
nixda
Sudahkah Anda mencoba kode VBA ini terlalu? Atau mungkin ini solusi berbasis aturan ?
nixda
@nixda Adapun pertanyaan kedua, ya beberapa kali, sebagian besar masuk versi ini , dan sepertinya tidak ada yang terjadi. Tapi saya tidak menambahkan aturan apa pun di sini - saya hanya menjalankan skrip seperti yang disarankan Diane Poremsky di posnya.
Michał Masny
@nixda Pesan kesalahan muncul setelah saya menekan F8 dengan baris ini disorot: "MsgBox Err.Number & amp;" - "& amp; Err.Description".
Michał Masny
@nixda Solusi di tautan kedua adalah untuk masalah yang berbeda. Aturan saja tidak cukup untuk mencetak lampiran secara otomatis. Mereka hanya memungkinkan untuk mencetak pesan.
Michał Masny

Jawaban:

1

Rekatkan kode berikut ini ThisOutlookSession.

Edit kode sesuai kebutuhan lalu klik di Application_Startup() makro dan tekan tombol Run (F8). Ini memulai makro tanpa perlu me-restart Outlook.

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
    Dim olNameSpace As Outlook.NameSpace
    Dim Folder As Outlook.MAPIFolder

    Set olNameSpace = Application.GetNamespace("MAPI")
    Set Folder = olNameSpace.GetDefaultFolder(olFolderInbox)
    Set Items = Folder.Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.MailItem Then
        PrintAttachments Item
    End If
End Sub

Private Sub PrintAttachments(olItem As Outlook.MailItem)
    On Error Resume Next
    Dim colAtts As Outlook.Attachments
    Dim olAtt As Outlook.Attachment
    Dim sFile As String
    Dim sDirectory As String
    Dim sFileType As String

    sDirectory = "C:\Attachments"

    Set colAtts = olItem.Attachments

    If colAtts.Count Then
        For Each olAtt In colAtts
        '// List file types -
        sFileType = LCase$(Right$(olAtt.FileName, 4))

        Select Case sFileType
            Case ".xls", ".doc"
            sFile = ATTACHMENT_DIRECTORY & olAtt.FileName
            olAtt.SaveAsFile sFile
            ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0
            End Select
        Next
    End If
End Sub

Lihat Mencetak Lampiran Secara Otomatis

0m3r
sumber