三流君 ken3のmemo置き場

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

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
Ken3三流君の連絡先:
[google formsで連絡する]
上記の問い合わせフォームに質問・感想など気軽に書き込んでください

よく検索されるキーワード: [質問回答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で走らせる時の参考となれば、幸いです。


質問・感想・クレームなど、
気軽にコメント欄に書いてもらえるとうれしいです。

[Googleフォームにコメントを残す]
↑質問・コメントの入力フォームです、気軽に書いてください


フッター:最後にKen3Videoの動画一覧を紹介します

YouTubeにアップした動画です。他の動画を一瞬でも見てもらえるとさらに嬉しいです。
再生リスト:[三流君Ken3の最新動画]←リストの一覧形式で表示する


また、ブログを見に来てくださいね。ではまたぁ~