三流君 ken3のmemo置き場

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

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

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

OutlookのVBAをVBSで動かしたい CreateObject と olXXXXの定数を調べる

前回、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

OutlookVBAを外部のVBSで走らせる時の参考となれば、幸いです。

Ken3 ホームページ 目次

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

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



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