帯

VBA Outlook PSTを開くメニュー化

前回、Outlook データファイルを開く(閉じる)簡単なプログラムを作成しました。今回はその機能を拡張して、もう少し汎用性のあるものに仕上げていこうと思います。

ツールの使用イメージ

Outlookウィンドウで、クイックアクセスツールバーのコマンド(Project1.PSTMenu)ボタンを押すと、「PST Menu」が表示されます。
このメニューのボタン表示名は、PSTファイルのフルパスOpen/Closeの操作を加えたものを表示します。Open/Closeの操作は、現在がClose状態であればOpenを、Open状態であればCloseを表示します。
また、全て開く(ALL Open)と全て閉じる(ALL Close)も固定的に表示します。

PST Menu」で、ひとつボタンを選択して押すと、その処理が行われます。

モジュール構成

このツールプログラムは次の3つのモジュールで構成されます。
ModulePSTMenu.bas メインモジュール(104行)
MenuForm.frm (.frx) メニューのユーザーフォーム(57行)
ClassMenuButton.cls メニューボタンのクラスモジュール(12行)

モジュールファイルの添付

Outlookにそのままインポートできるモジュールファイルを以下に添付します。ファイルをダウンロードして解凍したら、VBEを開いてファイルインポートします。(※メニュー関係のモジュールは「VBA Outlookメール宛名書きメニュー化」と全く同じものです。すでに組み込み済であれば、インポートは不要です)
VBEの基本的な操作は「VBA Outlook開発環境の整備」を参考ください。

プログラム組込み後のVBEイメージです。

※なお、添付したプログラムは動作確認済ですが、環境などにより不安定動作する可能性もあります。ご使用にあたっては自己責任でお願いします。

クイックアクセスツールバーにコマンド追加

Outlookウィンドウで、クイックアクセスツールバーにコマンド(Project1.PSTMenu)ボタンを追加します。ボタンアイコンはお好みで適当なものに変更してもよいでしょう。

PSTファイルリストの作成

対象とするPSTファイルのフルパスを記載した「PST.txt」ファイルを作成して、「C:\PST」フォルダに格納しておきます。

今回のサンプルでは、次の内容を「PST.txt」ファイルに記載しました。

C:\PST\2017.pst
C:\PST\2018.pst
C:\PST\2019.pst

プログラムの動作確認

それでは組み込んだプログラムの動作を確認します。
Outlookウィンドウで、クイックアクセスツールバーのコマンド(Project1.PSTMenu)ボタンを押すと、「PST Menu」が表示されます。
メニューから「C:\PST\2017.pst Open」ボタンを押します。

Outlookデータファイル「2017」が開かれました。

PST Menu」から、他のボタンも押して動作確認してみましょう。

プログラムの解説

プログラムの主な内容を説明します。

PSTファイルリストのファイル名を定数宣言しています。この内容を変更して任意のファイル名をつけることもできます。

Private Const PST_FILE_LIST = "C:\PST\PST.txt"  'PST(Personal Storage Table)

PSTMenuは、メイン関数でコマンドボタンから呼び出されます。

Public Sub PSTMenu()
    :
End Sub

全て開く、全て閉じるボタンの名前を定数宣言しています。

    Const ALL_OPEN = "<< ALL Open >>"
    Const ALL_CLOSE = "<< ALL Close >>"

PST Menu」メニューを作成して表示します。

    Dim sFilePath As Variant
    For Each sFilePath In oFileList
        If IsOpenedPST(sFilePath) Then
            Call MenuForm.AddButton(CStr(sFilePath), sFilePath & " Close")
        Else
            Call MenuForm.AddButton(CStr(sFilePath), sFilePath & " Open")
        End If
    Next sFilePath
    Call MenuForm.AddButton(ALL_OPEN, ALL_OPEN)
    Call MenuForm.AddButton(ALL_CLOSE, ALL_CLOSE)
    
    Dim sButtonName As String: sButtonName = MenuForm.Display("PST Menu")

メニューで押されたボタンにより、処理を分岐します。空文字の場合はキャンセルします。

    Select Case sButtonName
        Case ""         'Cancel
        Case ALL_OPEN:  Call OpenALL(oFileList)
        Case ALL_CLOSE: Call CloseALL(oFileList)
        Case Else:      Call TogglePST(sButtonName)
    End Select

PSTファイルを開いている状態を確認して、反転動作をします。

Private Sub TogglePST(sFilePath As Variant)
    If IsOpenedPST(sFilePath) Then
        Call ClosePST(sFilePath)
    Else
        Call OpenPST(sFilePath)
    End If
End Sub

さいごに

VBA Outlook PSTを開く」を改良して、PSTファイルパスをプログラムの外に分離して追加削除がしやすいようにしました。また、選択メニューで動作を選択できるようにしました。環境に合わせてファイルパスを変えるなど色々と変更してご利用してみてください。

記事を気に入って頂き、お役に立てたら嬉しいです。