三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Outlook VBA で 連絡先 配布リスト.msg を取り込む やりかけ その2

下記のような質問がきました。(前回 http://d.hatena.ne.jp/ken3memo/20101014/1287054324 の続き )

outlookには、連絡先の中に、
配布リストとよばれる
メールがたくさん詰まっているリストを作成することができる機能があります。

この配布リストは、ドラック&ドロップしてデスクトップあたりへ保存すると
msgという拡張子で保存されます。

私の会社では、この配布リストを別の部署の人間が作っております。
たとえば、営業第一部署っていう配布リスト名の中身のメールアドレスを、
人事異動があるたびに、変更されております。
そのため、営業第一部署全員へメールを配信する際は、常に最新の配布リストを
自分のoutlookの連絡先へ配布リストとしてもってこなければなりません。。
この変更されている配布リストは、だれでも使えるように、共有フォルダの中に
msg拡張子で保存されています。

この共有ファイルにあるmsg形式の配布リストを、自分のメールの連絡先へ保存するには
どのようなVBAを書けばよろしいのでしょうか?

で、イロイロやってみたけど、なかなかうまくいかなかった、そんなメモです(おいおい)
※完成は、まだ先かなぁ。

Outlook 2007 連絡先をまとめた配布リストを作る(手作業)

プログラムを組む前に、手作業で作業の流れを見ます。

1.連絡先をまとめた配布リストを作り
2.ドラックandドロップ
で移動する
そんな操作を 手作業でやってみました。
VBAで自動化の前にテストする。

手作業の操作動画 は http://www.youtube.com/watch?v=v85mE2AFG-4
www.youtube.com

ヘルプから 連絡先インポートで調べて 作り始める

手作業で流れやイメージがつかめたら、
Outlook2007のVBAを立ち上げて、
ヘルプから 連絡先 インポートで調べて 作り始める

ヘルプのサンプルを加工・流用して、
配布リスト h:\営業第一部署.msg

.OpenSharedItem で 読み込み、
連絡先フォルダー olFolderContacts へ .Move(移動 保存)してみた。
※試行錯誤、失敗、まだ やりかけですが....

'連絡先のアイテムを探る。。。
Sub tset()
    
    Dim oNamespace As NameSpace
    
    Dim oItem As Object 'Outlook 配布リストを.msgから読み込む
    
    Dim oFolder As Folder '連絡先のフォルダー
    
    ' NameSpace オブジェクトへの参照を取得します。
    Set oNamespace = Application.GetNamespace("MAPI")
    
    ' 既定の連絡先フォルダへの参照を取得し、フォルダを表示します。
    Set oFolder = oNamespace.GetDefaultFolder(olFolderContacts)
    oFolder.Display
    
    ' .msg ファイルを開きます。配布リストの取り込み
    Set oItem = oNamespace.OpenSharedItem("h:\営業第一部署.msg")
    'テストで↑USBメモリから固定の名前の配布先を読み込む
    
    oItem.Display  '読み込んだアイテムを表示(いらないかも?)
    On Error Resume Next 'エラーを無視して次の行へ 下記のMOVEでエラーが発生するので、苦肉の策
    oItem.Move oFolder   '読み込んだ 配布リスト(DistListItem)を連絡先(olFolderContacts)へ移動
    On Error GoTo 0      'エラー無視を解除(エラーをここから下は表示)
   
    '使用したオブジェクトの解放 = Nothing
    Set oItem = Nothing
    Set oFolder = Nothing
    Set oNamespace = Nothing

End Sub

↑、強引に、.Move時のエラーを On Error Resume Next で無視してみました。
これをもとに、Excel VBAや.vbs から 登録可能にしてみます。(する予定です)

あと、あきらかな不具合で、実行を2・3回繰り返すと、配布リストが複数できてしまうので(実行するたび新しく)
古いリストを上書きするか、消してから書くように細工しないと実用レベルじゃないかなぁ。

そんな感じで、まだまだ、やりかけ、試行錯誤中です。

テスト動画/実行結果は http://www.youtube.com/watch?v=H-1hboMAWSw
www.youtube.com

2012/03/10 追記 受信メールもダメでした。

失敗サンプル Outlook VBA .msg ファイル を .OpenSharedItem で 取り込み - 三流君 ken3のmemo置き場
で、受信メールアイテム 同じ.msgを読み込んでみたけどダメでした。

下記、テスト結果の動画です Outlook VBA OpenSharedItemで取り込みテスト
www.youtube.com

Outlook2007起動後、VBAで下記のコードでテストしました。

'.msgを読み込むテスト Outlook2007でテスト
Sub read_msg()
    
    Dim oNamespace As NameSpace
    Dim oItem As Object   'アイテム .msgから読み込みセット
    Dim oFolder As Folder 'フォルダー
    
    ' NameSpace オブジェクトへの参照を取得します。
    Set oNamespace = Application.GetNamespace("MAPI")
    
    ' 既定のフォルダ 参照を取得し、フォルダを表示します。
    Set oFolder = oNamespace.GetDefaultFolder(6) 'olFolderInbox=6
    oFolder.Display
    
    ' .msg ファイルを開きます。.OpenSharedItemで取り込み
    Set oItem = oNamespace.OpenSharedItem("F:\TEMP\AAAAA.msg")
    'テストで↑USBメモリなどから固定の名前を読み込む
   
    'oItem.Display  '読み込んだアイテムを表示(いらない)
    On Error Resume Next 'エラーを無視して次の行へ
    '下記のMOVEで同じフォルダーだとエラーが発生?するので、苦肉の策
    oItem.Move oFolder   '読み込んだ アイテムを指定したフォルダーへ
    'On Error GoTo 0      'エラー無視を解除(エラーをここから下は表示)
    
    '使用したオブジェクトの解放 = Nothing
    Set oItem = Nothing
    Set oFolder = Nothing
    Set oNamespace = Nothing

End Sub

↑う〜ん、On Error Resume Next を なんとか外したいんだけど・・・

まだまだ、探りかたとサンプルが甘いけど、

三流君VBAでOutlookを操作する
三流君 Outlook Mail メールを操作する
三流君 Outlook Task 仕事・タスクを操作する
三流君 Outlook Appointment 予定表を操作する
三流君 Outlook Contact 連絡先・アドレス帳を操作する

で、細々解説しているので、良かったらのぞきにきてください。

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)