[三流君(TOPへ)] −−> [VBAで楽しくプログラミング] −−>

三流君VBAでOutlookを操作する

まぁ、そんなに難しく考えないで、ソースを貼り付けて、遊んでみてください。
'メールを作成する Excel2003 Outlook2003 でテストしました
Sub MAKE_MAIL_ITEM()

    Dim oApp As Object
    Dim myNameSpace As Object
    Dim myFolder As Object

    Dim objMAIL As Object 'メールのオブジェクト
    Dim strMOJI As String '本文

    'outlook 起動
    Set oApp = CreateObject("Outlook.Application")

    Set myNameSpace = oApp.GetNameSpace("MAPI")
    Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定
    myFolder.Display  '表示 いつものクセで .Visible = True とやりがちだけど

    'メールアイテムの作成
    Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 直値はいけないと思いつつ、
    
    '宛先・件名・本文 などのデータを代入する
    objMAIL.To = "test@ken3.org"           '宛先 ほかに.cc や.Bccも可能です
    
    objMAIL.Subject = "テスト メールの件名です "  '.Subjectに文字列設定で件名
    
    '本文を作る、(vbCrLfで改行されます)
    strMOJI = "こんにちは(このメールtestアドレスなので質問は別便で)" & vbCrLf _
            & " ここで 文字列を作って .Bodyに代入する" & vbCrLf _
            & " メールアイテムが作成されたらその後、 " & vbCrLf _
            & " .save 下書きへ保存 や .sendで送信(確認が出る)" & vbCrLf _
            & " 今回は、.Display で メール作成画面を表示" & vbCrLf _
            & Now() & "作成"

    objMAIL.Body = strMOJI                 '本文の代入
    objMAIL.Display   '途中で編集したい時(メール編集画面を表示してみた)

    'ここで、普通はオブジェクトの開放など、後始末をする。

End Sub
↑CreateObject("Outlook.Application")後に、.Visible = Trueとやりたいところだけど、規定のフォルダーを.Displayで表示したり、あとは空のメールスペースをSet objMAIL = oApp.CreateItem(olMailItem)で作ってから、あて先(.to) や 件名題名(.Subject) 本文(.Body) 中身をセットして、次のアクション(メソッド)を発行する感じかなぁ?

msdn.microsoft.com/library の ↓ここから探るとよいかも、
[Outlook での VBA の使用]

余談ですが、広告コードをBlogに簡単にUPしたくて、Blogのメール投稿機能を使うことを考えました。広告コードをVBAで置き換えて自動送信するイメージで。普通に作ったらハマりました。どこでハマったかと言うと、vbCrLfを入れていないのに自動で改行され長いためか、広告用のリンクコードが途中できれてしまいました。
少々危険を感じつつ、↓下記のリンクを見て、レジストリを書き換えて対応しました
[[BUG] Outlook 2003 で電子メール メッセージを送信したときに、想定した位置で行が折り返さない]
↑データや長い文章をOutlook本文 文字列で送りたい場合はここに注意してください。
※以上、広告職人の余談でした・・・(最近はBlogに機械的な広告は効果なしですが)


VBAでOutlookを操作する

概要を見て、おっ、と感じたらタイトルのリンク先に飛んで読んでください
何かの参考となれば、幸いです

概要とリンク先

[No.55 Outlookを操作してメールを送りたい]
Set oApp = CreateObject("Outlook.Application")
で、Outlookのアプリケーションを操作するためのオブジェクトを作成してます。
次に、メールアイテムを
Set objMAIL = oApp.CreateItem(0) 'olMailItem=0
で作成して、データをメールアイテムにセットする
objMAIL.To = "test@ken3.org" '宛先
objMAIL.Subject = "テストメールです" '件名
objMAIL.Body = strMOJI '本文の代入
セット後、.Displayで編集画面を表示したり、.Sendで送信したり

[No.56 Outlookから複数のアドレスにBCC送信]
やりたいことは、BCCで複数の宛先を指定することなので、
Dim strBCC As String 'BCC宛先の変数を定義
'文字列で宛先を作る
strBCC = "test@ken3.org ; excel@ken3.org ; access@ken3.org"
objMAIL.BCC = strBCC '宛先の文字列を渡す
なんて感じで、;セミコロン区切りの文字列を.BCCにセットしただけです

[No.78 Outlookでファイルを添付するには?.Attachments.Add]
Attachmentsオブジェクトのヘルプをみて、.Addを探り
objMAIL.Attachments.Add "e:\work\test.txt"
なんて感じで、.Attachments.Add ファイルのパスで添付ファイルをセットしました

[No.101 Outlookの重要度フラグ .Importance = olImportanceHigh]
送信メールの「重要度フラグ」をプログラム(VB)で操作することは可能なのでしょうか??
と質問をもらい、Importance プロパティを発見する
myitem.Importance = olImportanceHigh とセットしてみました。
使用できる定数は(重要度のフラグは)
olImportanceHigh olImportanceLow olImportanceNormal でした。

[No.161 Outlook VBAでフラグ作成 .FlagStatus .FlagRequest .FlagDueBy]
メールにフラグを作成したかったので、
objMAIL.FlagStatus = 2 'olFlagMarked (2)をセット参照設定時は定数で
objMAIL.FlagRequest = "CD返却の件連絡ください" 'フラグ内容をセット
objMAIL.FlagDueBy = DateAdd("d", 5, Now) '期限は5日後をセット
とフラグ関係のプロパティに値をセットしただけでした。
サンプルの実行結果は↓


[No.169 Outlookで複数のファイルを添付するには?]
Dir関数を使用して複数のファイル名を取得して、添付ファイルを作成しました。
    strBASEPATH = "C:\Documents and Settings\user2000\My Documents\"
    strFILETYPE = "*.xls"  'マッチングパターン
    strFileName = Dir(strBASEPATH & strFILETYPE) 'DIR関数にPATH+*.xlsを渡す
    '↑すると、一番最初の名前が返ってくる(順不同)
    '名前がなくなるまでループ
    While strFileName <> ""   'ファイル名が""空文字以外の間ループする
        'ファイル名を使って処理を行う
            '↓1つ1つ添付する ↓↓パス+ファイル名を渡す
        objMAIL.Attachments.Add strBASEPATH & strFileName 
        '↓次の名前の処理に移るには、Dir関数を引数無しで呼び出します
        strFileName = Dir  '←引数無しで次のパターンを取り出せる
    Wend
    '↑こんな感じでループを作って1つ1つファイルを処理してみました。

[No.171 Outlook VBA 受信MailにフラグをSET .Folders .Itemsを探る]
.Folders .Itemsを使い、受信トレイからメールアイテムを取り出し、受信済みのメールにフラグをセットしてみました。
下記、メールアイテムをリストボックスへセットするサンプルです
Private Sub UserForm_Initialize()
    'フォームの初期化イベントでリストボックスにメールデータをセットする
    Dim objOL      As Object 'OutLookのアプリケーションオブジェクト
    Dim objNAMESPC As Object '名前空間
    Dim objFLD     As Object 'フォルダー保存用
    Dim objMAIL    As Object 'メールアイテム
    Dim strWORK As String

    Me.lstMAIL.Clear  '.Clearでリストボックスの内容を全てクリア
    'アプリケーションのオブジェクトを新規作成
    Set objOL = CreateObject("Outlook.Application")
    'Namespace オブジェクト作成
    Set objNAMESPC = objOL.GetNamespace("MAPI")
    'フォルダーの下、第二階層.Foldersでループさせる
    For Each objFLD In objNAMESPC.Folders(1).Folders
        'フォルダー名が受信トレイか?
        If objFLD.Name = "受信トレイ" Then
            'フォルダーのアイテム数分ループ Folders.Items
            For Each objMAIL In objFLD.Items
                '作成日:題名で文字列を作成する
                strWORK = objMAIL.CreationTime & ":" & objMAIL.Subject
                'データをセット
                Me.lstMAIL.AddItem (strWORK)
            Next objMAIL
        End If
    Next objFLD
    '後始末
    objOL.Quit
End Sub

未解決
[No.57 Outlook メールアイテムの形式でハマる]
EditorType プロパティ
アイテムに対する OlEditorType クラスの定数を取得します。
OlEditorType クラスの定数は、
olEditorHTML(2)、olEditorRTF(3)、olEditorText(1)、および olEditorWord(4) のいずれかです。
を使ってみるが、形式がセットできなかった話です(未解決です)


VBA Outlook関係書籍の紹介

全体的にVBAからOutlook操作の書籍少ないので、無難なオフィシャルマニュアルの紹介です。
※価格も高いし、よく検討してから購入してくださいね
プログラミングMicrosoftOutlook プログラミングMicrosoftOutlook

著者:トーマス・リッゾ / オーパス・ワン
出版社:日経BPソフトプレス/日経BP出版センター
本体価格:3,800円
楽天ブックスで購入する楽天ブックスで購入する
Microsoft Microsoft Outlook Version 2002オフィシャルマニュア

著者:ジム・ボイス / 薄金宏之進
出版社:日経BPソフトプレス/日経BP出版センター
本体価格:6,000円
楽天ブックスで購入する楽天ブックスで購入する

VBA Outlookのオブジェクトの探り方

これも、私の我流な三流的攻略法だけど、
Outlookのオブジェクトの探り方は、

Outlookを起動します。
^^^^^^^^^^^^^^^^^^^^^
起動後、Alt+F11を押します。
すると、VBAのいつものよく見かける画面が表示されます。
※ExcelやAccessで参照設定したあとでもOKです。

ここで、探りたいオブジェクトの適当な変数を定義します。
Dim aa as 
とか入力すると、なんと、mailitemとか出てきます。


↑オブジェクトの変数が表示された例

そこで、
Dim aa as MailItem
と、メールのアイテム型の変数を定義します。
※これは、オブジェクト名前とかで狙いを付けて、
  まぁ、失敗してもやり直すって感じで。
(女性をデートの誘う時もこれくらい気軽に?できたらいいね(オイオイ))

次は、狙いをつけた女性の身に付けているブランド品や行動パターンじゃなくって、
あたりをつけた、オブジェクトのプロパテイやメソッドを探ります。

ここは、いきなりアタックって感じで、
Dim aa as MailItem
と定義してから、aa.とaaさんにアタックします。
すると、プロパティやメソッドが表示されるので、
それらしいプロパティ・メソッドの名称を選択します。

おっ、aaさんの行動は(メソッドは)これだとか、
ここも経験や当てずっぽうに推理します。
※出たとこ勝負もアリでしょう or パターンでなんとなくわかったり・・・


↑MailItemの.FlagStatus フラグのステータスを探して、選択したところです。

次は、そのプロパティにカーソルを合わせ、F1のヘルプを見る。
あれれ・・・ハズシタ(笑)フリダシニ戻る
や
OK、目的のプロパティ、メソッドだった、となります。

探り方、まとめるとこんな感じで、
該当するオブジェクト型の変数を定義
Dim aa as MailItem
その後、
aa.
と、候補を表示させ、それらしいのにアタック。

aa.FlagStatus と選択後、カーソルを合わせてからF1のヘルプを見る。

そんな流れでいつもVBAのプロパティ、メソッドを探ってます。
※もっと効率の良い、
  女の子(オブジェクト)へのアタック方法もあるんだろうけど・・・

あとは、世の中のチャラ男やナンパ男の成功例を見て自分も真似したいので、
GoogleやYahooで探したプロパティ、メソッドをキーワードにして事例を検索します。

すると、
.xxxxx プロパティはひどい女だったよ、
期待させておいてボッタクリのバグかよ・・・
とか
口説き落とすテクや扱い方の注意事項が載ってます。

まぁ、そのまま真似してもいいし、アレンジしてもいいし。

ヘルプで添付をキーワードに調べると

ヘルプで例えば、[添付]をキーワードに調べると。
.Attachments.Add
ってのが見つかる。(ネットでoutlook 添付で探すと一発だけど)

嘘つくなよテメエ、ExcelVBAのヘルプにそんなの無いぞ。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
素人だと思ってバカにしやがって、いつもヘルプ見ろヘルプ見ろってうるせえ。
Excelのヘルプで添付が出てこないから聞いてんだろ。

まぁまぁ、そんなに興奮しないでよ、どこかの危険な掲示板じゃないんだから。
えっと、これ、Outlookを起動してから、Alt+F11押すと、
OutlookのVBA編集画面が出るんですよ。

ここで、F1(ヘルプ)押して添付とキーワード入力をすると、
Attachmentsオブジェクトを見つけることが出来ます。
※outlook2000,20002からで、97は出ません(残念、、、)


↑ヘルプの検索イメージ

さてと、
Attachmentsオブジェクトのヘルプを見ると、
---
アイテムに添付ファイルを追加するには、Add メソッドを使用します。 

一貫した結果を得るには、アイテムの Attachments コレクションのオブジェクトを
追加したり削除したりする前に、アイテムを必ず保存します。

次の VBA の例は、新しいメッセージを作成し、Q496.xls ファイルをリンクではなく
添付ファイルとして添付し、その添付ファイルにわかりやすいキャプションを付けます。
Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
myItem.Save
Set myAttachments = myItem.Attachments
myAttachments.Add "C:\My Documents\Q496.xls", _
    olByValue, 1, "1996 年の第 3 四半期報告"
---

なんて載ってます。

最近発売の雑誌を紹介する

パソコン雑誌です。息抜きや空いた時間に読んで見ては?
  1. DTP WORLD (ディーティーピー ワールド) 2008年 06月号
  2. Windows 100% 2008年 06月号
  3. 日経 PC (ピーシー) ビギナーズ 2008年 06月号
  4. PC Japan (ジャパン) 2008年 06月号
  5. Software Design (ソフトウエア デザイン) 2008年 06月号
  6. Web Designing (ウェブデザイニング) 2008年 06月号
  7. I/O (アイオー) 2008年 06月号
  8. 月刊 COMPUTERWORLD (コンピュータワールド) 2008年 07月号

ページフッター(リンクなど)

[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・


2008/05/15 12:50:45