VBA Outlook PSTを開く
Outlookでやりとりしたメールが増えてくると、それを整理するために「Outlook データファイル (.pst)」を利用する場合があると思います。
さらにデータが増えてくると、「Outlook データファイル (.pst)」を複数作成して、分類分けしたり、年度別に分けたりして整理するようになると思います。
そんな複数作成した「Outlook データファイル (.pst)」を、簡単にOutlookに追加・削除するVBAプログラムを作っていきたいと思います。
Outlookデータファイルの作成
まずは、「Outlook データファイル」を作成します。
作成した「Outlook データファイル」はパソコン上の任意の場所に置けばよいのですが、ここでは分かりやすく、C:ドライブのルートに「C:\PST」フォルダを作り、そこに登録する前提で話を進めます。
「ホーム」タブの「新しいアイテム」ー「その他のアイテム」ー「Outlookデータファイル」を選択します。
「新しい Outlook データファイル」ダイアログで、
「Outlook データファイル (.pst)」を選択して「OK」ボタンを押します。
「Outlook データファイルを開くまたは作成する」ダイアログで、
ファイル名を入力して、「OK」ボタンを押します。
ここでは、ファイル名を「2019」とし、保存先を「C:\PST」としました。
Outlook データファイル「2019」が作成され、開かれました。
フォルダーを作って整理するような場合は、「2019」を選択、右クリックして「フォルダーの作成」を選択します。
フォルダー名を入力して、フォルダーを作成します。ここでは、「受信済み」というフォルダー名でフォルダーを作成してみました。
Outlookデータファイルを閉じる
Outlookデータファイルを閉じるのは簡単です。「Outlookデータファイル」を選択、右クリックして「(名前) を閉じる」を選択するだけです。
プログラムによるOutlookデータファイルの操作
OutlookのVBEを開き、標準モジュール「ModulePST」を挿入して、次のプログラムを書き込みます。
VBEの基本的な操作手順は「VBA Outlook開発環境の整備」を参考にしてください。
Option Explicit
Private Const PST_FILE_2019 = "C:\PST\2019.pst"
Public Sub OpenPST_2019()
Call OpenPST(PST_FILE_2019)
End Sub
Public Sub ClosePST_2019()
Call ClosePST(PST_FILE_2019)
End Sub
Private Sub OpenPST(sFilePath As Variant)
Application.Session.AddStore sFilePath
End Sub
Private Sub ClosePST(sFilePath As Variant)
With Application.Session
Dim i As Long
For i = 1 To .Stores.Count
If .Stores.Item(i).FilePath = sFilePath Then
.RemoveStore .Folders.Item(i)
Exit For
End If
Next i
End With
End Sub
Outlookにそのままインポートできるモジュールファイルを以下に添付しますので、ダウンロードしてファイルインポートしてもよいです。
プログラムを組込み後のVBEイメージです。
プログラムの動作確認
それでは組み込んだプログラムの動作を確認します。
Outlookの「開発」タブで、「マクロ」ー「Project1.OpenPST_2019」を選択すると、先ほど作成したOutlookデータファイル「2019」が開かれます。同様に「Project1.ClosePST_2019」を選択すると、Outlookデータファイル「2019」が閉じられます。
プログラムの解説
プログラムの主な内容を説明します。
OpenPSTは、ファイルパスで指定されたOutlookデータファイルを開く関数です。AddStoreで指定のOutlookデータファイルが追加されます。
ClosePSTは、ファイルパスで指定されたOutlookデータファイルを閉じる関数です。Stores.Itemの中からファイルパスの一致するアイテムを検索してRemoveStoreで取り外します。
Private Sub OpenPST(sFilePath As Variant)
Application.Session.AddStore sFilePath
End Sub
Private Sub ClosePST(sFilePath As Variant)
With Application.Session
Dim i As Long
For i = 1 To .Stores.Count
If .Stores.Item(i).FilePath = sFilePath Then
.RemoveStore .Folders.Item(i)
Exit For
End If
Next i
End With
End Sub
さいごに
Outlook データファイルを開く(閉じる)簡単なプログラムを作成しました。
今回はOutlook データファイルのファイルパスをプログラム内にハードコーディングしましたが、Outlook データファイルが増えるたびにプログラムをいじるのはスマートではありません。
次回は、このファイルパスをプログラムの外に分離して、「VBA Outlookメール宛名書きメニュー化」で作成したメニューモジュールで選択できるようにする予定です。