Outlookで特定フォルダおよびそのサブフォルダ内の特定キーワードを含む添付ファイルを削除するVBA
概要
Outlookには、添付ファイルを管理する機能がありません。jpg,pdf,doc,excelなど日々いろいろなファイルが添付され送られてくることでしょう。この添付ファイル、ハードディスクに保存することは出来ても、なんとOutlook上から消すことは出来ません。また、気づくとOutlookのデータファイルであるpstファイルがとんでもなく肥大化していることもザラです。
そこで、いろいろと添付ファイルを削除するファイルを検索してみたのですが、そういった日本製のツールも見つかりませんでした。そこで、Outlook VBAで自作することにしました。
VBAコード
Option Compare Text
Sub SetFolder()
Dim olApp As Outlook.Application
Dim nspNameSpace As NameSpace
Dim fldFolder As MAPIFolder
Dim strAttachFileName As String
Dim intDelCount As Integer
Dim lngDelFileSize As Long
Set olApp = New Outlook.Application ' Application オブジェクト
Set nspNameSpace = olApp.GetNamespace("MAPI") ' Namespace オブジェクト
Set fldFolder = nspNameSpace.PickFolder
Dim blDelSubFolder As Boolean
If fldFolder Is Nothing Then
Exit Sub
End If
strAttachFileName = InputBox("検索する添付ファイル名の名前の一部を入れてください")
If StrPtr(strAttachFileName) = 0 Then
Exit Sub
End If
If MsgBox("サブフォルダの削除も行いますか?", vbYesNo) = vbYes Then
blDelSubFolder = True
Else
blDelSubFolder = False
End If
Call DelAttachments(fldFolder, blDelSubFolder, strAttachFileName, _
intDelCount, lngDelFileSize)
MsgBox (intDelCount & "件," & Format(lngDelFileSize / 1024, 0) & _
"KBの添付ファイルを削除しました")
End Sub
Sub DelAttachments(fldFolder As Outlook.MAPIFolder, _
ByVal blDelSubFolder As Boolean, _
ByVal strAttachFileName As String, _
ByRef intDelCount As Integer, _
ByRef lngDelFileSize As Long)
Dim objItem As Object
Dim dteCreateDate As Date
Dim strSubject As String
Dim strItemType As String
Dim intCounter As Integer
Dim objAttachment As Attachments
Dim strOutputMessage As String
On Error Resume Next
'フォルダ内のすべてのアイテムに再帰関数
If blDelSubFolder And fldFolder.Folders.Count > 0 Then
For Each objItem In fldFolder.Folders
Call DelAttachments(objItem, blDelSubFolder, strAttachFileName, intDelCount, lngDelFileSize)
Next objItem
End If
'フォルダにアイテムがあり、それがメールであるか確認
If fldFolder.Items.Count > 0 And fldFolder.Items(1).Class = olMail Then
'フォルダ内のアイテムを削除するか確認する
' If MsgBox("Folder '" & fldFolder.Name & "' (Contains " & fldFolder.Items.Count & _
" items) の添付ファイルを削除しますか?", vbYesNo, 添付ファイルの削除) = vbYes Then
For Each objItem In fldFolder.Items
With objItem
intCounter = .Attachments.Count
Do While intCounter > 0
If .Attachments(intCounter).FileName Like ("*" & strAttachFileName & "*") Then
lngDelFileSize = lngDelFileSize + .Size
.Attachments.Remove intCounter
.Save
lngDelFileSize = lngDelFileSize - .Size
intDelCount = intDelCount + 1
End If
intCounter = intCounter - 1
Loop
End With
Next objItem
' End If
End If
End Sub
導入方法
まず、[ツール]-[マクロ]-[Visual Basic Editor]から、
Visual Basic Editorを起動します。上のVBAコードをコピーして、適当なモジュールファイルか、
ThisOutlookSessionに貼り付けてください。
さらに、[ツール]-[マクロ]-[セキュリティ]から、マクロのセキュリティレベルを『中』にする必要があります(要再起動)。ただ、マクロの実行を許可することで、マクロウィルスへの感染の危険性も高まりますので、気をつけてください。
使い方
[ツール]-[マクロ]-[マクロ]から、
SetFolderを実行します。対象フォルダを選択し、添付ファイル名の一部を入力することで、対象ファイルを削除します。
おすすめは、拡張子での指定です。部分一致ですので、ワイルドカードは必要ありません。また、大文字・小文字の区別もしません。『.pdf』などを指定するとよいでしょう。
サブフォルダも対象にするか聞いてきますので、必要に応じて選んでください。
補足事項
VBA実行後は、Outlookデータファイルの圧縮(最適化)を忘れずに!!データファイルが小さくなります
posted by うずまき at 21:24
|
Comment(6)
|
TrackBack(0)
|
VBA