Outlook 2010で添付ファイルを自動的に印刷するにはどうすればよいですか?


2

Outlook 2010で到着時に自動的に添付ファイルを印刷しようとしています。

私はこれをインターネットで見つけました。VBAコードは

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

マクロの実行を許可しました。VBAエディターでThisOutlookSessionにコードを貼り付け、Microsoft Scripting Runtimeへの参照を追加しました。新しいメッセージが自分からのものかどうかを確認し、そうであればスクリプトを実行するルールを作成しました。.doc添付ファイル付きのメッセージを自分に送信しましたが、受信時に「424-オブジェクトが必要です」というエラーメッセージが表示されました。

自宅にプリンターがありません(別の場所にコードが必要です)ので、Microsoft XPS Writerを既定のプリンターとして設定し、機能するかどうかを確認しました。これがエラーの理由ですか?そうでない場合、何であり、どのように修正しますか?

そして最も重要なことは、どのように仕事を成し遂げるのですか?(アドオンではなく)VBAスクリプトを使用する必要がありますが、VBAは初めてです。

現在Windows XPを使用していますが、Windows 7で動作するものが必要です。


VBAエディターを開くと、マクロの先頭にブレークポイントを設定できます。次に、メールを送信してテストを繰り返します。エディターがポップアップ表示され、マクロを行ごとにF8で実行できます。このようにして、エラーの原因となっている行を詳細に取得します。
nixda

このVBAコードも試しましたか?それとも、このルールベースのソリューションですか?
nixda

@nixda 2番目の質問に関しては、はい、数回、主にこのバージョンで、何も起こらなかったようです。ただし、ここにはルールを追加しませんでした。DianePoremskyが彼女の投稿でアドバイスしているように、スクリプトを実行しただけです。
ミチャウマスニー

@nixda「MsgBox Err.Number& "-"&Err.Description」という行を強調表示してF8キーを押すと、エラーメッセージが表示されます。
ミチャウマスニー

@nixda 2番目のリンクの解決策は、別の問題に対するものです。添付ファイルを自動的に印刷するには、ルールだけでは不十分です。メッセージの印刷のみが許可されます。
ミチャウマスニー

回答:


1

次のコードをに貼り付けますThisOutlookSession

必要に応じてコードを編集し、Application_Startup()マクロをクリックして[ 実行]ボタン(F8)を押します。これにより、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

添付ファイルを自動的に印刷するをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.