下記のような質問がきました。(前回 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 連絡先・アドレス帳を操作する
で、細々解説しているので、良かったらのぞきにきてください。
、