私は、Outlook VBAで
[メールの作成 や 読み込みを行いたい]
/ [予定 アポやスケジュールを管理したい]
/ [仕事・タスクを登録したい]
/ [アドレス帳や連絡先を管理したい]
/ [HELPからOutlookのプロパティやメソッドを探りたい]
です。※目的の処理を選択してください。
まぁ、そんなに難しく考えないで、ソースを貼り付けて、遊んでみてください。
Excel など から Set oApp = CreateObject("Outlook.Application") で オブジェクトを作り、コントロールしてます。
[メールの作成へ]
/[メールを読む]
/[予定表関係]
/[仕事・タスク関係]
|
msdn.microsoft.com/library の ↓ここから探るとよいかも、 |
↑の実行結果↓ Excel2003 VBA から OutLookを起動
↑三流解説 [え〜と] And [こんな感じ] を連発(笑)した動画。
|
過去のメルマがで三流解説もしてました。 [No.55 Outlookを操作してメールを送りたい] [No.56 Outlookから複数のアドレスにBCC送信] [No.78 Outlookでファイルを添付するには?.Attachments.Add] [No.169 Outlookで複数のファイルを添付するには?] [No.183 Outlook リッチテキスト形式のメール で グラフを送る] [AccessサブフォームのデータをOutlook本文に転記する] |
余談ですが、広告コードをBlogに簡単にUPしたくて、Blogのメール投稿機能を使うことを考えました。
広告コードをVBAで置き換えて自動送信するイメージで。普通に作ったらハマりました。どこでハマったかと言うと、vbCrLfを入れていないのに自動で改行され長いためか、広告用のリンクコードが途中できれてしまいました。
(親切に設定した文字数でOutlookが改行してくれます。オプションで文字数を増やそうとしたら最大値が132文字でした。これだと、長い文字数の広告リンクコードが途中で切れてしまいます。)
少々危険を感じつつ、↓下記のリンクを見て、レジストリを書き換えて対応しました
[[BUG] Outlook 2003 で電子メール メッセージを送信したときに、想定した位置で行が折り返さない]
↑データや長い文章をOutlook本文 文字列で送りたい場合はここに注意してください。
※以上、広告職人の余談でした・・・(最近はBlogに機械的な広告は効果なしですが)
メールの作成ができたら、次は、受信したメールに対して処理を行いたい、そんな流れだと思います。。。
MailItem オブジェクト
http://msdn.microsoft.com/ja-jp/library/cc359390.aspx
↑MSDNを参考にして、
|

VBA Outlook で
メール.body で 値を参照しようとしただけで、
(MsgBox "本文" & objMAIL.Body)
----
プログラムが Outlook 内に保存されている電子メールアドレスに
アクセスしようとしています。よろしいですか?
これが予期しない動作である場合は、[いいえ]をクリックしてください。
このプログラムがウイルスである可能性があります。
----
またまた、ハマったなぁ・・・
VBA Outlook 操作 .Body 参照でエラー
http://ken3-info.blog.ocn.ne.jp/code_gomibako/2009/02/vba_outlook_bod_c69d.html
↑実行した失敗ソースはここに載せときます。
証拠VTR動画は↓
Outlook 操作の失敗 動画
Outlookって、メールだけじゃなくて、イロイロな機能があります。
ってことで、下記質問が来たので、.CreateItem の タイプを調べてみました。
>VBAでOutlookの操作についてですが、予定表の内容を取得するマクロの
>記述はよく見かけますが、逆に予定表に予定を登録する方法があまりみ
>あたりません。
>具体的にどんな方法で行えばよいのでしょうか、ご教授願います。
確かに、Outlookって、資料や参考ページ少ないですね。 少し調べてみました。 .CreateItem(0) で メールのアイテムが作れます。 この 0 が定数で、この定数を予定表にすればアイテムを作れます。 olAppointmentItem 1 予定表 olContactItem 2 連絡先 olDistributionListItem 7 配布リスト olJournalItem 4 履歴 olMailItem 0 メール olNoteItem 5 メモ olPostItem 6 投稿 olTaskItem 3 仕事 なので、 olAppointmentItem の1を指定すれば、なんとか作れそうです。
|
↑、
Set objITEM = oApp.CreateItem(1) 'olAppointmentItem=1
で、予定表、アポの1 を渡して、作成して、あとは、
'プロパティなどをセットする。
objITEM.Subject = "件名です"
objITEM.body = "本文ですよ"
その後、保存や閉じるなど 動作のメソッドを発行、
objITEM.Save '保存
objITEM.Close 2 '閉じる
そんなパターンかなぁ。
他の予定表を取り出すサンプルページを見たりして、
objITEM.Subject = "件名です"
objITEM.body = "本文ですよ"
上記のようなプロパティなどを探って、値をセットしてみてください。
※※↓かなり参考になるページ↓
Hey, Scripting Guy! 月曜日から金曜日まで毎日開催される会議のスケジュールを 2 週間分設定する方法はありますか
http://gallery.technet.microsoft.com/scriptcenter/0cf13024-3405-4180-9c8f-8fc4307d513f
↑私のサンプルが子供に見えるほど、大人のページ。。。私も精進しないとねぇ。
何かの参考となれば幸いです。
調子こいて、動画作りながら探るのは止めようと思いつつ、失礼します。
[予定表と仕事、連絡先を使ったサンプル]
では、
Application.ActiveInspector.CurrentItem
を使い、開いているアイテムを取得してみたり、
また、
複数選択された連絡先(ContactItem)を取得したかった時は
Application.ActiveExplorer.Selection を 使い、
[Outlook VBA 選択された連絡先の氏名+フリガナを使い、仕事を作成]
したりしました。
意外と、Outlookは奥が深いですね。
概要を見て、おっ、と感じたらタイトルのリンク先に飛んで読んでください
何かの参考となれば、幸いです

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つファイルを処理してみました。
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 |
仕事・タスクのサンプル:
[Outlook 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 四半期報告" --- なんて載ってます。
せっかくホームページに来ていただいたのに、検索の紹介 ぉぃぉぃ
サイト指定や期間の指定を組み合わせて実行してみてください。
ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
| [三流君(TOPへ)] / [VBAで楽しく] / [記事一覧] |
カスタム検索
|