Outlookの添付ファイルを自動的に印刷する VBAマクロ を見つけました。ルールがマクロをトリガーします。
ただし、マクロが機能するには、Microsoft Scripting Runtime
への参照が必要です。コードをThisOutlookSessionに保存しましたが、ツール"参照を介してライブラリを参照すると正常に機能します。
ただし、プログラムを開くたびに参照を追加する必要があります。マクロは起動後に存在しますが、参照は存在しません。システムの起動時に追加のクリックを必要とせずに、マクロを継続的に実行したいと思います。
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早期バインディング"と "VBA遅延バインディング"。 をご覧ください。
次の行でイアリングバインディングを使用しています:Set oFS = New FileSystemObject
。 「新規」は、早期バインディングが使用されていることを示す良い指標です。そのため、マクロが実行されるすべてのマシンで参照を有効にする必要があります。
遅延バインディングを使用する場合、参照を有効にする必要はありません。マクロはすべてのマシンで機能します。
アーリーバインディングを変換できます
Dim oFS As FileSystemObject
Set oFS = New FileSystemObject
遅延バインディングへ
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
注意:遅延バインディングを使用する場合、名前付き変数の基になる数値はシステムに認識されません。これらの名前付き変数を対応する数値に変換する必要があります。
数値を取得するには、ライブラリを一時的に再度有効にし(例:Microsoft Scripting Runtime)、VBAエディターに移動してイミディエイトウィンドウを開きます(CTRL+G)。たとえば?TemporaryFolder
を直接ウィンドウに表示し、Enterキーを押します。スクリーンショットにあるように2
は、名前付き変数TemporaryFolder
の値です。
他のすべての問題のある変数について手順を繰り返し、それらをそれらの値に置き換えます。最後に、ライブラリ参照のチェックを外すと、ライブラリが有効かどうかに関係なく、すべてのマシンでコードが実行されます。
oFS.GetSpecialFolder(TemporaryFolder) 'with Early Binding
oFS.GetSpecialFolder(2) 'with Late Binding
知っておくと良いです
アーリー/レイトバインディングの高速切り替えを有利に使用します。
EarlyBinding = 1
に設定しました。EarlyBinding = 0
に切り替えます。プロジェクトは、最終的な遅延バインディングテストのために早期バインディングから遅延バインディングに変わります。FileSystemObject TemporaryFolderの例では、次のように説明できます。
Sub EarlyVsLateBindingtest()
#If Earlybinding Then
Dim oFS As Scripting.FileSystemObject
Set oFS = New Scripting.FileSystemObject
#Else
Const TemporaryFolder = 2
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
#End If
oFS.GetSpecialFolder (TemporaryFolder)
End Sub