【VBA】Outlook「高度な検索」の検索範囲を変えて一瞬で表示するマクロ
タイトル通り、ニッチなネタですが紹介します。
Outlookの「高度な検索」ダイアログというのは、こんなヤツです。
送受信したメールを検索したいときに使います。
初期値では検索範囲が十分ではないので、私は2つの操作を加えて使っています。
操作①:検索フォルダを「受信トレイ」「送信済みトレイ」の両方に設定
操作②:検索対象を「件名とメッセージ本文」に設定。
これをやらないと十分な検索が出来ません。
ただ、毎回「高度な検索」を呼出して操作①②を行うのは手間なので、自動化するマクロを作りました。
これをOutlookのクイックアクセスツールバーに登録してアイコン化しておき、そこからマクロ実行する運用とします。
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
'「高度な検索」ダイアログの検索範囲を変えて、一瞬で表示するマクロ
Public Sub Advanced_Search()
'起動中のOutlookアプリケーションを取得し、受信トレイを選択
Dim OutlookApp As Object
Dim OutlookNamespace As Object
Dim InboxFolder As Object
On Error Resume Next
Set OutlookApp = GetObject(, "Outlook.Application")
If OutlookApp Is Nothing Then
Set OutlookApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set InboxFolder = OutlookNamespace.GetDefaultFolder(6) '6は受信フォルダを示す定数
OutlookApp.ActiveExplorer.SelectFolder InboxFolder
Set OutlookApp = Nothing '以降不要なのでインスタンス破棄
Set OutlookNamespace = Nothing
Set InboxFolder = Nothing
'Ctrl+Shift+Fキーを送信する(「高度な検索」ダイアログを表示)
Const VK_F = &H46
Const VK_SHIFT = &H10
Const VK_CONTROL = &H11
Const KEYEVENTF_KEYUP = &H2
keybd_event VK_CONTROL, 0, 0, 0 'Ctrlを押す
keybd_event VK_SHIFT, 0, 0, 0 'Shiftを押す
keybd_event VK_F, 0, 0, 0 'Fキーを押す
keybd_event VK_F, 0, KEYEVENTF_KEYUP, 0 'Fキーを離す
keybd_event VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 'SHIFTを離す
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 'Ctrlを離す
Sleep 500
'Alt+Bキーを送信する(「フォルダの選択」ダイアログを表示)
Const VK_B = &H42
Const VK_LMENU = &HA4
keybd_event VK_LMENU, 0, 0, 0 'Altを押す
keybd_event VK_B, 0, 0, 0 'Bキーを押す
keybd_event VK_B, 0, KEYEVENTF_KEYUP, 0 'Bキーを離す
keybd_event VK_LMENU, 0, KEYEVENTF_KEYUP, 0 'Altを離す
Sleep 300
'↑↓キーとスペースキーを送信する(システムツリー内のフォルダを選択)
Const VK_DOWN = &H28
Const VK_UP = &H26
Const VK_SPACE = &H20
Const VK_RETURN = &HD
keybd_event VK_DOWN, 0, 0, 0 'DOWNを押す
keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0 'DOWNを離す
keybd_event VK_DOWN, 0, 0, 0 'DOWNを押す
keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0 'DOWNを離す
keybd_event VK_DOWN, 0, 0, 0 'DOWNを押す
keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0 'DOWNを離す
keybd_event VK_SPACE, 0, 0, 0 'SPACEを押す
keybd_event VK_SPACE, 0, KEYEVENTF_KEYUP, 0 'SPACEを離す
keybd_event VK_RETURN, 0, 0, 0 'エンターを押す
keybd_event VK_RETURN, 0, KEYEVENTF_KEYUP, 0 'エンターを離す
Sleep 300 '調整用
'Alt+Iキーを送信する(「検索対象」を設定)
Const VK_I = &H49
keybd_event VK_LMENU, 0, 0, 0 'Altを押す
keybd_event VK_I, 0, 0, 0 'Iキーを押す
keybd_event VK_I, 0, KEYEVENTF_KEYUP, 0 'Iキーを離す
keybd_event VK_LMENU, 0, KEYEVENTF_KEYUP, 0 'Altを離す
keybd_event VK_DOWN, 0, 0, 0 'DOWNを押す
keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0 'DOWNを離す
Sleep 100 '調整用
'Alt+Cキーを送信する(「検索する文字列」をフォーカス)
Const VK_C = &H43
keybd_event VK_LMENU, 0, 0, 0 'Altを押す
keybd_event VK_C, 0, 0, 0 'Cキーを押す
keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0 'Cキーを離す
keybd_event VK_LMENU, 0, KEYEVENTF_KEYUP, 0 'Altを離す
End Sub
キーボードのキー入力を自動化(指定したキーを順番に送信)しています。
・Ctrl+Shift+Fで「高度な検索」を表示
・Alt+Bキーで「フォルダの選択」を表示
・↑↓キーとスペースキーでフォルダを選択
・Alt+Iキーで「検索対象」を選択
・Alt+Cキーで「検索する文字列」をフォーカス
処理内容としては、これを1つのマクロに纏めただけ。
本来キー入力を自動化する場合は意図しない誤動作(画面切替に伴う事故)が怖いのですが、今回はOutlookのメインウィンドウのクイックアクセスツールバーから起動するという運用前提なので、事故に関して心配無用。
クイックアクセスツールバーへの登録方法は、こちらの記事を見てください。
本記事のマクロはOutlookメインウィンドウのクイックアクセスツールバーに登録してください。
この記事が気に入ったらサポートをしてみませんか?