[三流君(TOP)]
[VBA(TOP)]
[Outlook操作(TOP)]


私は OutlookVBAで
[メールの作成と読み込みを行いたい]
[予定・スケジュールを管理したい]
[仕事・タスクを登録したい]
[アドレス帳や連絡先を管理したい]
[Outlookのプロパティやメソッドを探りたい]
です。※↑目的の処理を選択してください。


三流君 Outlook Mail メールを操作する

まぁ、そんなに難しく考えないで、ソースを貼り付けて、遊んでみてください。
Excel など から Set oApp = CreateObject("Outlook.Application") で オブジェクトを作り、コントロールしてます。
#MailItem

As MailItem

MailItem オブジェクト
http://msdn.microsoft.com/ja-jp/library/cc359390.aspx
↑MSDNを参考にして、プロパティやメソッドを探ったり、
[メールの作成へ]/[メールを読む]

#CreateItem

メールの作成

次にメールを新規に作りたいと思います。
'メールを作成する Excel2003 Outlook2003 でテストしました
Option Explicit
Sub MAKE_MAIL_ITEM_TEST_NG()

    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.Display   '画面表示(Mail入力、編集画面を表示)

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

    objMAIL.Body = strMOJI                 '本文の代入

    '添付ファイルを送りたいって? そんな時は、.Attachments.Add "ファイル名"
    'objMAIL.Attachments.Add "e:\work\test.txt"        '本当はファイルの存在チェックも事前にしたいけど
    'objMAIL.Attachments.Add "e:\work\作業報告書.xls"  '複数送りたかったら、再度.Addしてね

    objMAIL.Display   '編集画面のまま止めておきたい時 や テスト中に動作を見たいとき
    objMAIL.Save   '保存、下書きへ  保存後、用が無かったら.Closeで閉じるのがいいのかなぁ。。。
    'objMAIL.Close 2  '閉じる Mailの編集画面を閉じる
    
    'objMAIL.Send   '送信箱へ ※セキュリティの警告メッセージが出るよ
    
    'ここで、普通はオブジェクトの開放など、後始末をする。

End Sub
過去のメルマがで三流解説もしてました。
[No.55 Outlookを操作してメールを送りたい]
[No.56 Outlookから複数のアドレスにBCC送信]
[No.78 Outlookでファイルを添付するには?.Attachments.Add]
[No.169 Outlookで複数のファイルを添付するには?]


[No.183 Outlook リッチテキスト形式のメール で グラフを送る]

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

複数送信のサンプル:下記、ExcelからOutlookのメールを作成したサンプルです。
[複数事前登録されたアドレスへ メールを送信する]
[期限まで未回答の人に督促メールをまとめて送信]

↓試行錯誤の動画です。見てダメっぷりを笑ってください。
[テスト VBA Outlook メールの作成をテストした](画像が悪いけど・・)

Outlookの親切な強制改行を止めたい

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

↓[レジストリに WrapLinesを変更 PlainWrapLenを設定](画像が悪いけど・・)

#Folder

メールを読む

メールの作成ができたら、次は、受信したメールに対して処理を行いたい、そんな流れだと思います。。。

'Excel2003 VBA から OutLook2003を起動して 受信メールを1つ1つ取り出す
Sub OL_TEST_LOOK_MAIL_0221()  

    Dim oApp As Object        'OutlookのApplication オブジェクトを入れる
    Dim myNameSpace As Object '名前のスペースと言われても、、
    Dim myFolder As Object    'フォルダー指定

    'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
    Set oApp = CreateObject("Outlook.Application")

    '呪文1 名前空間 の 指定 と言っても、.GetNamespace("MAPI")しただけ
    Set myNameSpace = oApp.GetNamespace("MAPI")
    
    '次は作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display)
    Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定
    myFolder.Display  '表示 いつものクセで .Visible = True とやりがちだけど
    
    '次にメールの中身を取り出したいと思います。
    Dim objMAILITEM As Object 'メールアイテム
    Dim n As Integer  'カウンター
    
    For n = 1 To myFolder.Items.Count  'フォルダーのアイテム数分ループ
        'メールを1通取り出す、変数にセットする
        Set objMAILITEM = myFolder.Items(n) '別にあらためてセットしなくても使えるけど
        'テストデータをセルにセットする※11行目からセットする。。。
        Cells(n + 10, "A") = objMAILITEM.CreationTime  '作成日
        Cells(n + 10, "B") = objMAILITEM.SenderName    '差出人
        Cells(n + 10, "C") = objMAILITEM.SenderEmailAddress    '差出人のアドレス
        Cells(n + 10, "D") = objMAILITEM.Subject       '件名
        Cells(n + 10, "E") = objMAILITEM.Body          '本文
    Next n

End Sub
↑をそのまま実行すると、セキュリティのエラーがでるし・・・(涙)
エラーの画像: Ol0209w1
↑ここで、1分や2分・・を選択するとうまくデータを取ることができます・・・

↓サンプル実行結果の動画
Excel VBA から OutLookを起動して 受信メールを1つ1つ取り出す

↑三流解説 [え〜と] And [こんな感じ] の音声付き(笑)

セキュリティ関係でハマる

VBA Outlook で メール.body で 値を参照しようとしただけで、
(MsgBox "本文" & objMAIL.Body)
----
プログラムが Outlook 内に保存されている電子メールアドレスに
アクセスしようとしています。よろしいですか?

これが予期しない動作である場合は、[いいえ]をクリックしてください。
このプログラムがウイルスである可能性があります。
----
Ol0209w1

またまた、ハマったなぁ・・・
VBA Outlook 操作 .Body 参照でエラー
http://ken3-info.blog.ocn.ne.jp/code_gomibako/2009/02/vba_outlook_bod_c69d.html
↑実行した失敗ソースはここに載せときます。
証拠VTR動画は↓
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.183 VBA Outlook リッチテキスト形式のメール で グラフを送る]
メールの形式を指定したかったので、
objMAIL.BodyFormat = 3 'olFormatRichText=3 で リッチテキスト形式へ
とプロパティをセットして、リッチテキスト形式にしました。
次に、Excelのグラフをコピーしたかったので、
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.ChartArea.Select
Application.CutCopyMode = False
ActiveChart.ChartArea.Copy
で、コピーしました(単にマクロ記録で記録しました。)

貼り付け の コマンドを実行したかったので、
Set oCBs = objMAIL.GetInspector.CommandBars
でコマンドバーを取り出し、
Set oCtl = oCBs.FindControl(, I)
を If oCtl.Caption = "貼り付け(&P)" で 探し、
  oCtl.Execute '↑で見つけた oCtl 貼り付けコマンド(outlook)を実行

でも、なんか動作が不安定です。。。



[#QA_MESSAGE][ページ内のTOPへ戻る]

ページフッター

ここまで、読んでいただきどうもです。ここから下は、広告と三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

Outlook アイテム別の操作

  1. [Mail]でメールを作成したり読み込んだり
  2. [Task]で仕事・タスクを登録したり
  3. [Appointment]予定表 アポ・スケジュールの登録ほか
  4. [Contact]連絡先でアドレスや名簿管理

三流君の[Outlookヘルプの探り方]でオブジェクト、プロパティやメソッドの探り方を少し書いてみたり、

ken3memo : Outlook関係の→ [メモ・記事をチェック] / [ブックマークを見る] / [アウトルックの動画解説へ]
で、まとめてみたり※↑まとまってないじゃん、放り込んだだけでしょ・・・



三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[twitter三流君]に気軽に連絡してください。




Menu : [Outlook操作(TOP)] / [VBA(TOP)] / [三流君(TOP)]





広告

リンク広告
  1. --[ポコロンダンジョンズ ポコダンの再生リスト]
  2. --[パズドラ セラフィス降臨 パズル&ドラゴン]
  3. --[ Windows10 OSのフルバックアップ システムイメージバックアップ]
  4. --[Access コンボボックスを使ってみた]