ken3memo (三流君)

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




[記事一覧、バックナンバーを見る]

2012-02-11

Outlook 手作業で連絡先を予定表に投げてみた

下記の質問をいただきました。(※改行位置、名前を****に修正)

>初めまして。将棋の切れそうで切れない細い攻めの様な

>ちょっと怪しげな雰囲気のHPが気に入り、お邪魔させていただきました。

>*****と申します、よろしくお願いいたします。

>

>Windous7、Outlook2007を使用しています。

>お客様の来店予約管理をしようと、

>予定表ビューをカスタマイズしているのですが、行き詰ってしまいました。

>

> TODOバーの仕事リスト1件に顧客1人を割り当て、

>連絡先フォルダで管理している顧客情報のうち、

>顧客ID、顧客氏名、ふりがなの3項目を自動的に表示させたいのですが、

>方法はありますでしょうか?

>

> 仕事リストに顧客のリストを表示させておき、

>そこから任意のリストを予定表に直接ドラッグしようという魂胆です。

>

来店予約管理、イメージは美容室の予約かなぁと勝手に決め付けて、

予定表のカレンダーに 顧客リスト(連絡先フォルダ)を投げてみる、

そんな操作を探ってみます。(※なんか、処理イメージが違うかも)

0.事前準備、まずは手作業で

手作業で、流れを探ってみた

動画

Outlook 連絡先を予定表 に ドラックandドロップ を テスト - YouTube

D

終わりの挨拶

まだまだ、先は長い感じ・・・

Outlook VBA で 現在開いているアイテムを取得する方法を探ってみた

1.Outlookで 今 開いているアイテムを取得する方法

連絡先を予定表に投げると(ドラックandドロップすると)、

会議 の 出席依頼を作成する画面が表示され、

連絡先 と 開始と終了時刻 が 自動的に入ります。

ここから、データを取得したいので、

Outlookで 今 開いているアイテムを取得する方法

を探ってみたいと思います。

outlook VBA の 編集画面を表示する

ツール・マクロ や alt+F11 で 編集画面を表示ます。

いつものように、

イミディエイトで探ったり、テストのプログラムを作って、

プロパティやメソッドを探っていきます。

動画

いつもの試行錯誤で右往左往している動画です。

Outlook VBA ActiveInspector.CurrentItem で アイテムを取得 - YouTube

D

サンプルプログラムのコード

? typename(application.ActiveInspector.CurrentItem)

MailItem

AppointmentItem

TaskItem

など、アイテムが探れるので、タイプ・型がわかったら、

小さなテストプログラムで確認します。

下記にサンプルで使用したコードを載せました。

イロイロといじって探ってみてください。

Sub test0211_001()  'Application.ActiveInspector.CurrentItemで開いているアイテムを確認

    Dim oITEM As AppointmentItem
    
    '連絡先からドロップ後、予定表が開いているはずなので、
    Set oITEM = Application.ActiveInspector.CurrentItem
    '↑で、会議 予定表 As AppointmentItem を取得

    '開始時間・終了、出席者の名前を取得する
    Debug.Print oITEM.Start
    Debug.Print oITEM.End
    Debug.Print oITEM.Links.Item(1).Name
    
    '予定表を閉じる
    oITEM.Close olDiscard

End Sub

終わりの挨拶

まだまだ、先は長い感じ・・・

Outlook VBA 仕事・タスク As TaskITEM を 探る

2.TO DO に 登録したいので、仕事・タスクのアイテムを探る

次は、TO・DOに登録したいので、

仕事・タスク の アイテムを探ってみます。

件名に予約者の名前

開始時刻

終了時刻

のセット

新規に仕事のアイテムを作成して

? typename(application.ActiveInspector.CurrentItem)

とすると、

TaskItem

の型がわかります。

データを適当に入れてから、

Dim oITEM As TaskITEM

Set oITEM = Application.ActiveInspector.CurrentItem

Stop

で、止めて、ウォッチ式で見たりして、

プロパティを探ります。

動画

いつもの試行錯誤で右往左往している動画です。

Outlook VBA TaskItem を 探る 仕事・タスクにデータをセット - YouTube

D

サンプルプログラムのコード

プロパティが探れたら、

Dim oITEM As TaskITEM '型をAs TaskITEM にする

Set oITEM = Application.CreateItem(olTaskItem) '新規に仕事のITEMを作成

↑.CreateItemでolTaskItemを指定して、アイテムを作成

データをセットします

下記にサンプルで使用したコードを載せました。

イロイロといじって探ってみてください。

Sub test0211_002()  '新規に仕事 タスクを作る

    Dim oITEM As TaskITEM '型をAs TaskITEM にする
    
    Set oITEM = Application.CreateItem(olTaskItem) '新規に仕事のITEMを作成
    oITEM.Display  '画面に表示するときは.Display

    'データをセットする
    oITEM.Subject = "Ken3aaaaa"  '件名
    oITEM.Body = "本文" & vbCrLf & "ZZZZZZZZ" & vbCrLf & "仕事"
    oITEM.StartDate = DateAdd("d", 1, Date)  'スタート テストで明日
    oITEM.DueDate = DateAdd("d", 7, Date)    '終了日 テストで7日後
    '↑他にもプロパティがたくさんあるけど・・

    'タスクを登録
    oITEM.Close olSave  'olSaveで閉じるときに保存(セーブして終了)

End Sub

終わりの挨拶

まだまだ、先は長い感じ・・・

Outlook VBA 予定表 予定 As AppointmentItem を 探る

3.データを予定表に登録したい

データを時刻指定で予定表に登録したいので、

予定表のアイテムを探ってみます。

また、馬鹿の一つ覚えの

イミディエイトとウォッチ式で探ってみます。

新規に予定のアイテムを作成して

? typename(application.ActiveInspector.CurrentItem)

とすると、

AppointmentItem

の型がわかります。

STOPで止めて、ウォッチ式を仕込んだり、

データを適当に入れてたりして、

プロパティを探ります。

動画

いつもの試行錯誤で右往左往している動画です。

Outlook VBA AppointmentItem を 探る 予定表にデータをセット - YouTube

D

サンプルプログラムのコード

下記にサンプルで使用したコードを載せました。

イロイロといじって探ってみてください。

Sub test0211_003()  '新規に予定 を作る

    Dim oITEM As AppointmentItem  '予定表
    
    Set oITEM = Application.CreateItem(olAppointmentItem) '新規に予定のITEMを作成
    oITEM.Display  '画面に表示するときは.Display

    'データをセットする
    oITEM.Subject = "件名Ken3aaaaa"  '件名
    oITEM.Body = "本文" & vbCrLf & "ZZZZZZZZ" & vbCrLf & "予定"
    oITEM.Start = DateAdd("d", 1, Now())  'スタート テストで明日
    oITEM.End = DateAdd("h", 27, Now())    '終了日 テストで27時間後
    '↑他にもプロパティがたくさんあるけど・・
    
    '予定を登録
    oITEM.Close olSave  'olSaveで閉じるときに保存(セーブして終了)

End Sub

終わりの挨拶

まだまだ、先は長い感じ・・・

Outlook処理 途中で作成ミスに気がついたが...

4.処理をつなげて 呼んでみた And 作成ミスに気がついた...

4.1 3つの処理が連続で走るようにつなげてみた。

作業の動画

YouTube - Broadcast Yourself

D

↑これは、あまり意味ない動画ですね

↓のソースを見たほうが速いかなぁ?

ソース

'連絡先を予定表にドラックAndドロップ後に
'Application.ActiveInspector.CurrentItemで開いている会議予定
'から 開始 終了 名前を抜き出し、名前を件名として 仕事タスク と 予定表を作成する
' 解説は http://d.hatena.ne.jp/ken3memo/20120211/1328906604
Sub 会議予定を仕事と予定に変換()

    Dim oITEM As AppointmentItem
    
    '連絡先からドロップ後、予定表が開いているはずなので、
    Set oITEM = Application.ActiveInspector.CurrentItem
    '↑で、会議の予定 As AppointmentItem を取得

    '開始時間・終了、出席者の名前を取得する
    Dim dSTART As Date     '開始
    Dim dEND As Date       '終了
    Dim strNAME As String  '名前
    
    '表示中の会議 予定表アイテムからデータを取得する
    dSTART = oITEM.Start
    dEND = oITEM.End
    strNAME = oITEM.Links.Item(1).Name
    
    '予定表を閉じる
    oITEM.Close olDiscard  '保存しないで閉じる・いったん破棄する

    'タスク 仕事にセット
    Call test0211_仕事の作成(dSTART, dEND, strNAME)  '値を渡して、To Do 仕事を作成

    '予定を作成
    Call test0211_予定の作成(dSTART, dEND, strNAME)  '値を渡して、カレンダー予定を作成

End Sub

'開始、終了、名前を受け取り、名前を件名とした仕事・タスクを作成する
' 解説は http://d.hatena.ne.jp/ken3memo/20120211/1328906778 を見てください。
Sub test0211_仕事の作成(dSTART As Date, dEND As Date, strNAME As String)  '新規に仕事 タスクを作る

    Dim oITEM As TaskITEM '型をAs TaskITEM にする
    
    Set oITEM = Application.CreateItem(olTaskItem) '新規に仕事のITEMを作成
    oITEM.Display  '画面に表示するときは.Display

    'データをセットする
    oITEM.Subject = strNAME  '件名として、名前をセットする
    oITEM.Body = "本文" & vbCrLf & vbCrLf & "仕事"
    oITEM.StartDate = dSTART  'スタート
    oITEM.DueDate = dEND      '終了日
    '↑他にもプロパティがたくさんあるけど・・

    'タスクを登録
    oITEM.Close olSave  'olSaveで閉じるときに保存(セーブして終了)

End Sub

'開始、終了、名前を受け取り、名前を件名とした予定表 予定を作成する
' 解説は http://d.hatena.ne.jp/ken3memo/20120211/1328907107 を見てください。
Sub test0211_予定の作成(dSTART As Date, dEND As Date, strNAME As String)  '新規に予定 を作る

    Dim oITEM As AppointmentItem  '予定表
    
    Set oITEM = Application.CreateItem(olAppointmentItem) '新規に予定のITEMを作成
    oITEM.Display  '画面に表示するときは.Display

    'データをセットする
    oITEM.Subject = strNAME  '件名
    oITEM.Body = "本文" & vbCrLf & vbCrLf & "予定"
    oITEM.Start = dSTART  'スタート
    oITEM.End = dEND    '終了日 テストで27時間後
    '↑他にもプロパティがたくさんあるけど・・
    
    '予定を登録
    oITEM.Close olSave  'olSaveで閉じるときに保存(セーブして終了)

End Sub

4.2 OutlookメニューにVBAの実行を追加する

コマンドバーに追加?

操作動画

YouTube - Broadcast Yourself

D

4.3 流れを確認する(連絡先を仕事・予定にセット)

  

・予約の連絡を受ける

  ↓

・連絡先から名前を選択、予定表にドラッグandドロップする

  ↓

・会議連絡のフォームでマクロ実行のボタンを押す

テスト結果

YouTube - Broadcast Yourself

D

4.4 処理の間違いに気がつく

ア.足りない処理、顧客IDとふりがな を 追加する処理。※現在名前しかセットしていない

(連絡先を名前でサーチして、顧客IDとふりがなを取得しないといけない)

イ.根本的に処理が間違っていた?

本当の処理の流れ、質問は、、、

間違い、他の操作動画を載せる

↓いろいろな操作方法があるので、Outlookって奥が深いですね。

YouTube - Broadcast Yourself

D

※ドラック アンド ドロップのタイミングがVBAで取れるか?探って出直しですね・・・

終わりの挨拶

いやぁ〜、、、脳内自分語垂れ流しで

ハマってしまって

かなり恥ずかしいなぁ(笑)

少し深く調べてから 出直しですね(笑)

処理を少し軌道修正した続きは

Outlook VBA 選択された連絡先の氏名+フリガナを使い、仕事を作成 - ken3memo (三流君)

を見て笑ってください。



[記事一覧、バックナンバーを見る]




.


その他blog

流行のBlogで情報発信(手打ちのHTMLよりブログで更新が楽なので)
・はてなを使用して[id:ken3memo]メモ的に放り込んでいるブログです
・はてなを使用して[id:ken3link]商品リンクなどを放り込んでいるサブidのブログです
・[その他商品紹介Blog] ・・・ 内容の薄い、商品のメモ?です

メニューほか

分類・カテゴリー一覧