予定アイテムの関連付けられた連絡先の情報を取得するマクロ


コメントにて以下のご要望をいただきました。


Outlook2013の予定表をCSV出力して月間集計などに使っております。
ところで、[分類項目:は”Categories”プロパティーで取得できてとても嬉しいのですが予定ビュー→一覧に出てくる[関連づけられた連絡先]の取得の方法が分からずに困っています。このデータを取得するプロパティーは無いのでしょうか??
もし分かれば教えていただければ幸いです。



関連付けられた連絡先の表示名のリストについては PidLidContactLinkName という名前付きプロパティに格納されています。 
そのため、以下のような関数をマクロで定義することで、指定した予定アイテムの関連付けられた連絡先の表示名が取得できます。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Function GetLinkedContactsNames(apptItem As AppointmentItem)
    On Error Resume Next
    Const PidLidContactLinkName = "http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8586001E"
    '
    GetLinkedContactsNames = apptItem.PropertyAccessor.GetProperty(PidLidContactLinkName)
End Function

しかし、もし関連付けられた連絡先のアドレス情報も取得したいとなると、まず PidLidContactLinkEntry という名前付きプロパティから連絡先のエントリ ID の一覧を取得し、それを適切な形に変換する必要があります。
そして、そのエントリ ID でアドレス帳を検索し、見つかったアドレス エントリからアドレス情報を取得するという流れになります。
アドレス情報を取得する関数は以下のようになります。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Function GetLinkedContactsAddrs(apptItem As AppointmentItem)
    On Error Resume Next
    Const PidLidContactLinkEntry = "http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85850102"
    Dim abEntry As Variant
    Dim iCount As Long
    Dim iPtr As Integer
    Dim i As Integer
    Dim n As Integer
    Dim c As Integer
    Dim strEid As String
    Dim addrEntry As AddressEntry
    Dim strAddrs As String
    ' 関連付けられた連絡先のエントリ ID のリストを取得
    abEntry = apptItem.PropertyAccessor.GetProperty(PidLidContactLinkEntry)
    If Err.Number <> 0 Then
        Exit Function
    End If
    If UBound(abEntry) < 8 Then
        Exit Function
    End If
    ' リストに含まれるエントリの数を取得
    iCount = abEntry(0)
    '  リストは 8 バイト目から
    iPtr = 8
    strAddrs = ""
    For n = 0 To iCount - 1
        strEid = ""
        ' エントリ ID の長さを取得
        c = abEntry(iPtr) + abEntry(iPtr + 1) * 256
        ' エントリ ID をバイナリから文字列に変換
        For i = iPtr + 4 To iPtr + 4 + c - 1
            strEid = strEid & Right("00" & Hex(abEntry(i)), 2)
        Next
        ' 文字列に変換したエントリ ID でアドレス帳を検索
        Set addrEntry = Session.GetAddressEntryFromID(strEid)
        ' 見つかったエントリのアドレスを追加
        strAddrs = strAddrs & addrEntry.Address & ";"
        ' 次のエントリへ移動
        iPtr = iPtr + c + 4
        ' Padding の分追加
        If iPtr Mod 4 <> 0 Then
            iPtr = iPtr + 4 - (iPtr Mod 4)
        End If
    Next
    '
    If strAddrs <> "" Then
        ' 最後の ; を削除
        GetLinkedContactsAddrs = Left(strAddrs, Len(strAddrs) - 1)
    End If
End Function

マクロの登録方法やメニューへの追加について

予定アイテムの関連付けられた連絡先の情報を取得するマクロ」への1件のフィードバック

  1. サボのマナベです。
    ご指導いただいたプログラムで見事に”関連づけられた連絡先”を取得できました。
    私どもでは”関連づけられた連絡先”に客先の名称を、”分類”に仕事の分類を記録し、1ヶ月間の取引先別+仕事別の作業時間集計をしています。
    今回のお願いは”関連づけられた連絡先”の連絡先名称だけですので簡単な方で充分でした。

    これでOutLookに予定表を引っ越しして以来止まってた”作業集計”を復活することができました。

    このご指導を見つけることができず、お礼が遅くなりました。あきらめかけていたのですが本当に嬉しいです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中