Outlook 連絡先から仕事を登録、予定表を作る? RSSフィード
 


挨拶・自己紹介:失敗続きのAB型の変わり者 三流プログラマー Ken3です。
(※[三流君 三流プログラマーとは?自己紹介や経歴ほか])

Ken3のひとりグループです
・[ken3独りグループのトップページ]へ戻る
・独り言の[掲示板を覗く]
・勝手に作成した[キーワード一覧]を見る
・いつまでも[ken3memo下書き日記]を見る
(一人寂しくグループウェアを使っていたり....(笑))


リスト表示 | ツリー表示

1ken3memoken3memo   Outlook 連絡先から仕事を登録、予定表を作る?

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

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

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

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

>

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

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

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

>

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

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

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

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

>

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

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

>

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

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

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

返信2012/02/17 14:25:24

2ken3memoken3memo   1  0.事前準備、まずは手作業で連絡先を予定表に投げてみた

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

動画

VBAで組む前に、手作業で流れを探ってみた。

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

終わりの挨拶

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

返信2012/02/17 14:26:48

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

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

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

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

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

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

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

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

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

いつものように、

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

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

動画

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

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

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

? 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

終わりの挨拶

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

返信2012/02/17 14:28:10

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

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

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

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

件名に予約者の名前

開始時刻

終了時刻

のセット

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

? typename(application.ActiveInspector.CurrentItem)

とすると、

TaskItem

の型がわかります。

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

Dim oITEM As TaskITEM

Set oITEM = Application.ActiveInspector.CurrentItem

Stop

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

プロパティを探ります。

動画

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

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

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

プロパティが探れたら、

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

終わりの挨拶

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

返信2012/02/17 14:46:39

5ken3memoken3memo   1  3.データを予定表に登録したい 予定 As AppointmentItem を 探る

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

予定 As AppointmentItem

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

また、馬鹿の一つ覚えの

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

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

? typename(application.ActiveInspector.CurrentItem)

とすると、

AppointmentItem

の型がわかります。

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

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

プロパティを探ります。

動画

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

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

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

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

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

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

終わりの挨拶

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

返信2012/02/17 14:49:30

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

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

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

作業の動画

三流君 2012/02/11 outlook処理のテスト結果 その1 - YouTube

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

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

ソース

'連絡先を予定表にドラック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
返信2012/02/17 14:51:59

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

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

コマンドバーに追加?

操作動画

Outlook 2007 コマンドバーにVBAの実行を追加 手作業 - YouTube

※ちょっと、しっくりこないけど・・・

返信2012/02/17 14:58:34

8ken3memoken3memo   6  4.3 テスト、動作・流れを確認する(連絡先を仕事・予定にセット)

頭から、動作をテストしてみた。

・予約の連絡を受ける

  ↓

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

  ↓

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

テスト結果

三流君 2012/02/11 outlook処理のテスト結果 その2 - YouTube

返信2012/02/17 15:00:25

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

処理の間違いに気がつく

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

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

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

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

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

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

Outlook 2007 ドラックAndドロップ 操作イロイロ - YouTube

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

終わりの挨拶

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

ハマってしまって

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

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

返信2012/02/17 15:01:54

10ken3memoken3memo   1  5. Outlook VBA ActiveExplorer.Selection 選択されているアイテムを知りたい

Outlookで現在選択されているアイテムを知るには、

ActiveExplorer.Selection

から探るといいかも。

アイテムの数は

? Application.ActiveExplorer.Selection.Count

1

で、選択されているアイテムの数がわかります。

(選択されている数、ctrl+クリックで複数選択可能なので2とか複数返ることがある)

アイテムの種類

次に選択されているのが、どの種類のアイテム(メール,仕事,予定,連絡先)を知りたかったので、

1番目のアイテムのタイプを表示させてみます。

? typename(Application.ActiveExplorer.Selection.Item(1))

MailItem

など、.Item(1)TypeName関数で探ると、型の名前が返ってきます。

あとは、目的(使用したいアイテム)の型を宣言して

Dim cITEM As ContactItem '連絡先

Dim tITEM As TaskITEM 'タスク、仕事

Dim mITEM As MailItem 'メール アイテム

Dim aITEM As AppointmentItem '予定、アポ アイテム

みたいに、型宣言すると、プロパティメソッドが探りやすいです。

値を取り出したり、使用するときは、

Set oITEM = Application.ActiveExplorer.Selection.Item(1)

とすると、oITEM.XXXX で 使いやすいと思います。

探りかた、操作動画

いつもの、

途中で固まったり 右往左往・迷ったりしている酔っ払い動画です。

Outlook VBA 現在選択されているアイテムを探る テスト - YouTube

↑最後、キャプチャーソフトが途中で止まってしまいましたが、気にしないでください。

テストのコード

下記、テストのコードです。

いろいろと変更して、遊んでみてください。

'現在選択されているアイテムをテストで表示する
Sub chkITEM_TEST()

    Dim cITEM As ContactItem      '連絡先
    Dim tITEM As TaskITEM         'タスク、仕事
    Dim mITEM As MailItem         'メール アイテム
    Dim aITEM As AppointmentItem  '予定、アポ アイテム

    Dim nSelectCNT As Integer     '選択されている数、ctrl+クリックで複数選択可能なので
    Dim n As Integer  'ループのカウンター

    nSelectCNT = Application.ActiveExplorer.Selection.Count '選択された件数

    '選択されているアイテムのプロパティの一部をテストで表示する
    Debug.Print "選択されている件数は " & Application.ActiveExplorer.Selection.Count & " 件です。"
    
    Debug.Print "TYPEは " & TypeName(Application.ActiveExplorer.Selection.Item(1))
    Select Case TypeName(Application.ActiveExplorer.Selection.Item(1))
        Case "MailItem"  'メール
            For n = 1 To nSelectCNT  '配列が1からなので注意?
                Debug.Print n & "番目 item(n)"
                Set mITEM = Application.ActiveExplorer.Selection.Item(n) 'n番目のitemをセットする
                Debug.Print mITEM.Subject  '件名
                Debug.Print mITEM.To  '宛先
                Debug.Print mITEM.Body  '本文
                            '↑他にも 値、プロパティがあるけど、テストで表示
            Next n
        
        Case "TaskItem"  'タスク、仕事
            For n = 1 To nSelectCNT  '配列が1からなので注意?
                Debug.Print n & "番目 item(n)"
                Set tITEM = Application.ActiveExplorer.Selection.Item(n) 'n番目のitemをセットする
                Debug.Print "件名:" & tITEM.Subject '件名
                Debug.Print "本文:" & tITEM.Body    '本文
                            '↑他にも 値、プロパティがあるけど、テストで表示
            Next n
    
        Case "AppointmentItem"  '予定、アポ
            For n = 1 To nSelectCNT  '配列が1からなので注意?
                Debug.Print n & "番目 item(n)"
                Set aITEM = Application.ActiveExplorer.Selection.Item(n) 'n番目のitemをセットする
                Debug.Print "件名" & aITEM.Subject  '件名
                Debug.Print "本文" & aITEM.Body     '本文
                            '↑他にも 値、プロパティがあるけど、テストで表示
            Next n
    
        Case "ContactItem"  '連絡先
            For n = 1 To nSelectCNT  '配列が1からなので注意?
                Debug.Print n & "番目 item(n)"
                Set cITEM = Application.ActiveExplorer.Selection.Item(n) 'n番目のitemをセットする
                Debug.Print cITEM.Email1Address   'メールアドレス1
                Debug.Print cITEM.YomiCompanyName
                Debug.Print cITEM.CompanyName
                
                Debug.Print cITEM.YomiLastName
                Debug.Print cITEM.LastName
                Debug.Print cITEM.YomiFirstName
                Debug.Print cITEM.FirstName
                            '↑他にも 値、プロパティがあるけど、テストで表示
            Next n
        
        Case Else
            Debug.Print "その他、メモなど?"
    End Select

End Sub


終わりの挨拶

選択されたアイテムを取得できそうなので、

連絡先からデータをひっぱってきて、他のアイテム作成(CreateITEM)が可能になるかなぁ?

次は、ハマらないで完成するといいなぁ(笑)

返信2012/02/17 15:04:03

11ken3memoken3memo   10  5.1 Outlook VBA 選択された連絡先の氏名+フリガナを使い、仕事を作成

Outlook VBAで、選択された氏名+フリガナを使用して、

仕事(タスク)を作成してみました。

選択されたアイテムを知るには、

ActiveExplorer.Selection

を使い、

解説とテスト

Outlook VBA ActiveExplorer.Selection 選択されているアイテムを知りたい - ken3memo (三流君)

仕事の作成は、

Outlook VBA 仕事・タスク As TaskITEM を 探る - ken3memo (三流君)

で、

TaskItemを探って、

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

で、新規にアイテムを作り、

作成したVBA Subを

Outlook処理 途中で作成ミスに気がついたが... - ken3memo (三流君)

みたいな感じで、コマンドバーに登録しました。

テスト

要求仕様を満たしているか、テストしてみます。

手作業で実行しながら、確認してみます。

要求仕様

>予定表ビューの右端にTODOバーというのがありまして、

>ここに仕事をリスト形式に並べて表示させておくことができます。

.

>連絡先ビューの画面右端にTODOバーが表示されていましたが、

>同じものが予定表ビューでも表示できます。

>Ken3さんの画面ではたたまれていたようです。

.

.

>このリストは詳細登録画面を界さずに

>そのまま画面中央の予定表の任意の位置にドラッグ&ドロップすることが出来、

>時間の長さを自由に変えたり、分類を使って作業内容を色分けで表示することもできます。

.

>リストには通常仕事の件名が表示されますが、

>ここにID、氏名、フリガナを表示させられれば画面を切り替えたり、

>文字を入力したりすることなくすばやく目的の顧客を選んで予約を記録できるなと考えています。

.

>連絡先から仕事リストを作る事、

>他の管理ソフトの情報と同期させる事

>が自動で出来ないととても実戦には使えないと思っております。

テスト内容

連絡先から

顧客を選択後、ボタンを押すと、

選択した顧客名・フリガナ・IDで仕事リストが作成される。

予定表に切り替え、TO DOから仕事リストを予定表に登録

※ここは、Outlookの機能、操作だけです

この流れをテストする。

テスト動画

2012/02/14 三流君 Outlook VBA テスト動画 その3 - YouTube

作成した ソースコード

下記、作成したソースコードです。

※まだ、バグもありそうですが、改良して使ってみてください。

'---------------------------------
'選択された連絡先の氏名+フリガナを使い、仕事を作成
Sub 連絡先の氏名フリガナで仕事を作る()

    Dim cITEM As ContactItem      '連絡先
    Dim tITEM As TaskITEM         'タスク、仕事

    Dim nSelectCNT As Integer     '選択されている数、ctrl+クリックで複数選択可能なので
    Dim n As Integer  'ループのカウンター

    Dim strNAME  As String  '姓名+フリガナ※仕事の件名
    
    '選択が0件なら抜ける
    'ActiveExplorer.Selection解説 http://d.hatena.ne.jp/ken3memo/20120214/1329170762 
    If Application.ActiveExplorer.Selection.Count = 0 Then
        MsgBox "連絡先が選択されていません"
        Exit Sub    '関数を抜ける
    End If
    
    '選択されているのが連絡先か?チェックする
    If TypeName(Application.ActiveExplorer.Selection.Item(1)) <> "ContactItem" Then  '連絡先以

外か?
        MsgBox "連絡先を選択してください"
        Exit Sub    '関数を抜ける
    End If
    
    'ここから、選択された件数分 仕事を作成する
    nSelectCNT = Application.ActiveExplorer.Selection.Count '選択された件数
    
    For n = 1 To nSelectCNT  '配列が1からなので注意?
    
        '選択されたn番目の連絡先を変数に入れる
        Set cITEM = Application.ActiveExplorer.Selection.Item(n)
    
        '新しい仕事のアイテムを作成する
        Set tITEM = Application.CreateItem(olTaskItem) '新規に仕事のITEMを作成
        'oITEM.Display  '画面に表示するときは.Display チラつくのでコメントにした
    
        '連絡先の氏名+フリガナを抜き出し、&でつなげる
        strNAME = cITEM.LastName & cITEM.FirstName
        strNAME = strNAME & " " & cITEM.YomiLastName & cITEM.YomiFirstName
        
        'データを仕事にセットする
        tITEM.Subject = strNAME   '件名として、上↑で作成した名前+フリガナをセットする
        tITEM.StartDate = Date    'スタート日は今日をセット
        '↑他にもプロパティがたくさんあるけど・・
    
        'タスクを登録
        tITEM.Close olSave  'olSaveで閉じるときに保存(セーブして終了)
    
        Set tITEM = Nothing 'オブジェクト変数解放
    
    Next n
    Set cITEM = Nothing  'オブジェクト変数解放
    
    MsgBox "仕事の新規登録が終了しました" & vbCrLf & "予定を組んでください"
        
End Sub

終わりの挨拶

あとは、連絡先の項目に 顧客IDをねじ込んで(新規にフィールド作成?)すれば、

なんとか形にはなるのかなぁ。

先が見えたような、見えないような・・・

返信2012/02/17 15:06:58









    三流君 www.ken3.org(手打ちのHTMLで情報発信、最近は更新してなかったり...) 分類:HPを大きく分けると4つの柱(分類)です。
    ・人気は[VBA,マクロ]の解説、VBAからIE操作が人気です
    ・一昔前の[ASP(Active Server Pages)]の解説。
    ・読み物として[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    ・おまけで[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の異業種へ転職、コンビニ店長で失敗。

    動画・YouTube(動画で解説に手を出してみたが、評判はイマイチ...内容に問題アリ?)
    ・YouTube [ken3video] え~と、こんな感じ...の独り言が多い解説やテストの動画です。

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



    トップ ユーザー登録 ログイン ヘルプ