適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

VBAでNotesメールを取得する簡単なサンプル

VBAでNotesメールを取得する

仕事の中には「毎日、毎週、この作業やるの面倒だなぁ・・・。」というシーンが多々あります。そんな場面で役に立つのがVBAを使った自動化です。

VBAは敷居が低い分、ネット上には色々な情報があふれています。

しかし他のアプリケーションとの連携という視点だと、情報が少ないのが現状です。

ここでは自動化をメインとして語る(ことが多い)ブログなので、そのようなアプリケーション間の連携に纏わる情報をお伝えしたいと思います。

この記事ではVBAを使ってNotesメールを取得する方法を紹介します。

Notesは、グループウェアの先駆け的存在として、その根強い人気から(?)今でも使っている組織もあるのではないでしょうか?

チャットがこれだけ浸透したこの時代でも、まだまだメールを使う場面も少なくありません。

メールの件名をリスト化したいであるとか、メールの内容によってさらに別の業務に繋げるなど、チャットが台頭してきた今でもやっぱりメールはデスクワークに欠かせません。

というわけで、この記事ではVBAとNotesの連携を行う上で、土台となる簡単なサンプルとしてNoteメールの方法を取得する例を紹介したいと思います。

VBAでNotesメールを取得する簡単なサンプル

VBAを使ってNotesメールを取得する簡単なコードです。

このコードの実行の前には、事前に「Lotus Dimino Objects」の参照設定チェックが必要になります。

また、ご利用の環境に合わせて定数の設定を行ってください。

詳しい手順は↓の記事をご参考にしていただければ幸いです。

www.tekizai.net

コードを実行すると、イミディエイトウィンドウに下記の情報が出力されます。

  • 送信者
  • 受信者
  • CC
  • BCC
  • タイトル
  • 内容(メール本文)
 
Sub printNotesMailList()
    Const PASSWORD As String = "(環境に合わせて設定)"
    Const SERVER As String = "(環境に合わせて設定)"
    Const NOTES_FILE As String = "(環境に合わせて設定).nsf"
    'セッションを確立
    Dim notesSession As notesSession: Set notesSession = New notesSession
    notesSession.Initialize PASSWORD
    'Notesのデータベースを取得
    Dim notesDB As NotesDatabase: Set notesDB = notesSession.GetDatabase(SERVER, NOTES_FILE)
    'Notesデータベースから全ての文書を取得する
    Dim notesDocs As NotesDocumentCollection: Set notesDocs = notesDB.AllDocuments
    '最初の文書を取得
    Dim notesDoc As NotesDocument: Set notesDoc = notesDocs.GetFirstDocument
    
    '全ての文書にアクセスする
    Do Until (notesDoc Is Nothing)
        Dim subject As String: subject = notesDoc.GetItemValue("Subject")(0)
        Dim body As String: body = notesDoc.GetItemValue("Body")(0)
        Dim from As String: from = notesDoc.GetItemValue("From")(0)
        Dim cc As String: cc = notesDoc.GetItemValue("CopyTo")(0)
        Dim bcc As String: bcc = notesDoc.GetItemValue("BlindCopyTo")(0)
        Dim sendTo As String: sendTo = notesDoc.GetItemValue("SendTo")(0)
        
        Debug.Print "送信者:" & from
        Debug.Print "受信者:" & sendTo
        Debug.Print "CC:" & cc
        Debug.Print "BCC:" & bcc
        Debug.Print "タイトル:" & subject
        Debug.Print "内容:" & body
        Debug.Print "---------------------------------"
        '次の文書を取得する
        Set notesDoc = notesDocs.GetNextDocument(notesDoc)
    Loop
    
End Sub

応用のヒント

VBAを使ってNotesメールを取得することができれば、プチRPAができます。

例えば、定期的にNotesメールを取得して、特定の新しいメールが届いていたら自動で返信メールを送信したり、受信メールの一覧を作成して、やりとりの証跡として保存したり、Notesの標準機能ではできないような検索条件でメールを検索したり・・・。

なんでNotesをVBAから扱えるの?

NotesはCOMインターフェースを備えてくれているためです。

COMとは、Component Object Modelの略で、平たく言えば外部から操作できるようなAPIです。

COMを使っているので、VBA以外のプログラミング言語からもNotesを扱うことができます。

例えばPowerShellを使ってNotesを操作することも可能です。

www.tekizai.net

終わりに

今回は、VBAを使ってNotesメールを取得するサンプルの紹介でしたが、COMインターフェースのおかげで、VBAを使った様々なNotesの操作が実現できます。

Notesメールを取得する以外にもNotesカレンダーを取得したり、Notesメールを送信したり・・・Notesで日々行っているルーチンワークを軽減できるヒントがたくさんあります。

何かと下火なNotesですが、外貌からの操作性という意味ではピカイチな性能なので、ぜひ他のNotes操作関連の記事 も読んでいただいて、自動化の参考にして頂ければと思います。

というわけで、ここまでお読みいただき、ありがとうございました。