前回、Outlookで作成した テストプログラム
http://d.hatena.ne.jp/ken3memo/20101015/1287145506
をVBSから動かしたかったので 少し本編から脱線して遊んでみました。
元のプログラムは、下記のような感じのテストプログラムです。
'連絡先のアイテムを探る。。。 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
↑を.vbsで動作するように変更してみました。
ポイントは今のところ2つかなぁ。
CreateObject("Outlook.Application") で Outlookを起動
この部分、
' NameSpace オブジェクトへの参照を取得します。 Set oNamespace = Application.GetNamespace("MAPI")
で、
エラー: オブジェクトがありません。:'Application'
コード: 800A01A8
ソース: MicroSoft VBScript 実行時エラー
まぁ、当然 Application が 見つからない・・と当然エラーが発生するので、
Dim oApp
'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
Set oApp = CreateObject("Outlook.Application")
と、CreateObject関数で、アウトルックのオブジェクトを作成して、
Set oNamespace = oApp.GetNamespace("MAPI")
を使います。
定数 olXXXX が 見つからない。ここでは olFolderContacts が未定義
次に多く発生するエラーが、
Outlook内部で定義されている定数 olXXXX が 見つからないエラーです。
ここでは、olFolderContacts が未定義なので、
' 既定の連絡先フォルダへの参照を取得し、フォルダを表示します。
Set oFolder = oNamespace.GetDefaultFolder(olFolderContacts)
で、下記のエラーが発生します。
エラー: プロシージャの呼び出し、または引数が不正です。: 'GetDefaultFolder'
コード: 800A0005
ソース: MicroSoft VBScript 実行時エラー
VBSでは、参照設定できないので、直接値を書きます。
(Const で 定義する場合/する人が多いですが、手抜きで直接書いてしまった。)
olFolderContacts の 値を調べる一番簡単な方法は、
デバッグ時によく使用する イミディエイト ウインドウ で
? 調べたい定数
とやるのが、一番簡単かなぁ。※ヘルプを見て調べる方法もありますが、?で表示が楽です。
↑まぁ、どちらの方法かは、置いといて、
olFolderContacts が 10 と 値がわかったので、直接書いてみました。
' 既定の連絡先フォルダへの参照を取得し、フォルダを表示します。 Set oFolder = oNamespace.GetDefaultFolder(10) 'olFolderContacts=10 oFolder.Display
まぁ、こんな感じで、無事?に VBSから登録用のプログラムを走らせることができました。
下記あまり変わっていないけど、テストで使用した outlookTEST.vbsです。
'VBScript から Outlookを開いて '連絡先 配布リストを登録する (他のアカウントで作成した.msg の登録する) Dim oNamespace 'As NameSpace Dim oItem 'As Object 'Outlook 配布リストを.msgから読み込む Dim oFolder 'As Folder '連絡先のフォルダー dim oApp 'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を Set oApp = CreateObject("Outlook.Application") ' NameSpace オブジェクトへの参照を取得します。 Set oNamespace = oApp.GetNamespace("MAPI") ' 既定の連絡先フォルダへの参照を取得し、フォルダを表示します。 Set oFolder = oNamespace.GetDefaultFolder(10) 'olFolderContacts=10 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
ポイントを繰り返すと、
1.Set oApp = CreateObject("Outlook.Application") で Applicationオブジェクト作成
2.olXXXX の 定数は、ヘルプやイミディエイト ウインドウ で値を調べ 使用する。
この2点かなぁ。
移植時の参考となれば幸いです。
おまけ?メイン?いつもの 迷子動画(笑)
下記、いつもの 迷っていたり、固まっていたりする 動作動画です。
http://www.youtube.com/watch?v=GkR76ODSZ3M
www.youtube.com