質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

10072閲覧

OutlookVBAのメール表示について

Dori

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/01/31 07:16

編集2017/01/31 13:02

Outlookにて、
『Outlook上でメールを開く操作をした時に、メールの件名を判断して、メール本文をExcelファイルに保存を行う』
ような処理を入れたいと考えています。

mailitem.Displayでメールの表示はできたのですが、
下記のような、If文に組み込むと 『functionまたは変数が必要です』と、表示されてエラーとなります。

メールの件名を判断する箇所、メール本文をExcelファイルに保存をする箇所まではできたのですが、
『Outlook上でメールを開く操作をした時に』という箇所ができませんでした。

If文にDisplayを組み込むことはできるのでしょうか?
教えていただけますと幸いです。

・参考コード
Private Sub Application_ItemLoad(ByVal Item As Object)
Dim mailItem As mailItem
Set mailItem = Item

If mailItem.Display() Then

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takito

2017/01/31 07:24

`If メール表示 then` の部分は何を判断させたくてそう書いたのでしょうか?表示そのものの成功/失敗でしょうか?
hsk

2017/01/31 07:50

具体的な回答を得たいのでしたら、(機密情報は伏せてから)具体的なコードを載せる必要があります。
Dori

2017/01/31 12:44

tatikoさん、hskさん ご指摘ありがとうございます。もう少し具体的な質問にすべく、追記いたします。
guest

回答2

0

(コメントの補足をいただいて)

『Outlook上でメールを開く操作をした時に』

の個所は次のようなコードで実現できると思います。

VBA

1Private WithEvents g_mailItem As mailItem ''(1) 2 3Private Sub g_mailItem_Open(Cancel As Boolean) ''(2) 4 MsgBox g_mailItem.Subject '' サンプル:件名をメッセージボックスで表示 5End Sub 6 7Private Sub Application_ItemLoad(ByVal Item As Object) ''(3) 8 Dim mailItem As mailItem 9 10 If TypeOf Item Is mailItem Then ''(4) 11 Set g_mailItem = Item 12 End If 13End Sub 14

あからじめ、MailItem型のグローバル変数を用意して(1)、MailItem.Openイベントを定義しておきます(2)。

そしてApplicationオブジェクトの(Application.ItemLoad)[https://msdn.microsoft.com/ja-jp/library/office/ff868544.aspx]イベントを定義します(3)。メールや予定表などのアイテムひとつを読み込むときに呼び出されるイベントです。対象が仮引数Itemに入っています。このItemの内容がMailItemである場合(4)には、これを(1)で用意してある変数にセットします。すると、開いたときに(2)のイベントが呼び出されます。メールメッセージは(4)でMailItem型のグローバル変数に入れてありますので、これを参照して件名を判断したり、エクセルファイルに保存したりできます。


もしかして

VBA

1Private Sub Application_ItemLoad(ByVal Item As Object) 2 Dim mailItem As mailItem 3 Set mailItem = Item 4 5 If mailItem.Display() Then 6 7 Else 8 9 End If 10 11End Sub

のようにしているのでしょうか?

mailitem.Display() は戻り値がないメソッドですので、If 文には判断のしようがないのでしょう。

「特定のメール」「何らかの処理」が、具体的に何なのかを書いていただければ、具体的な回答が得られると思います。

投稿2017/01/31 07:56

編集2017/02/01 00:08
hsk

総合スコア728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Dori

2017/01/31 14:44 編集

別回答者様への返信と重複してしまい恐縮です。 やりたいことは、 『Outlook上でメールを開く操作をした時に、メールの件名を判断して、メール本文をExcelファイルに保存を行いたい』になります。 メールの件名を判断する箇所、メール本文をExcelファイルに保存をする箇所まではできたのですが、 『Outlook上でメールを開く操作をした時に』という箇所ができませんでした。 コードに関してはまさしく、hskさんが記述いただいた通りでございます。 戻り値がないことを理解しました。 If文で対応できないということですが、 もし、ほかに方法があれば教えて頂きたく。
hsk

2017/02/01 00:06

なるほど、了解しました。 回答を編集しましたので、ご覧頂ければと思います。
guest

0

やりたいことがイマイチ掴みきれません。
・マクロを実行したときにメールを開き、そのメールの内容によって続けて何らかの処理をしたい?
・Outlook上でメールを受信した時に、メールの内容を判断して何らかの処理を行いたい?
・Outlook上でメールを開く操作をした時に、メールの内容を判断して何らかの処理を行いたい?

もう少しやりたいことを具体的に書いていただけると助かります。
また、既に作成されたというコードと今回やりたいことの関連性についても補足いただけると助かります。

回答をうけて追記

OutlookVBAには触れたことがなく、また手元にOutlook環境がないので、自分からは一般論的な見解でアドバイスさせていただきますm(__)m

『Outlook上でメールを開く操作をした時に』という箇所ができませんでした。

ということですが、これはhskさんからも回答があるとおりメールを開いたときに発生するイベント内で処理を記述すればよいと思います。


今回の主な質問は

If文にDisplayを組み込むことはできるのでしょうか?

というものでしたが、メールを開いたときに発生するイベント内で処理するということは、メールを開く操作はすでに行っているということになります。
プログラム側からmailItem.Displayで開いてあげる必要はなさそうな気がします。
(すみません、ここらへん動作環境がないため推測で言っています。)


判定したい内容は「メールの件名」であって、Display関数の結果ではないですよね。

今回の行いたい処理

メールの件名を判断して、メール本文をExcelファイルに保存を行いたい

をそのままコードに書くと、

If メールの件名判断 = True Then '処理対象の件名の場合 Excelに出力する関数 End If

となります。

メールの件名を判断する箇所、メール本文をExcelファイルに保存をする箇所まではできた

ということですので、これを上記の流れに乗せてあげればよさそうです。

頑張ってみてください。

投稿2017/01/31 08:23

編集2017/02/01 00:35
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Dori

2017/01/31 12:54

やりたいことは、 『Outlook上でメールを開く操作をした時に、メールの件名を判断して、メール本文をExcelファイルに保存を行いたい』になります。 メールの件名を判断する箇所、メール本文をExcelファイルに保存をする箇所まではできたのですが、 『Outlook上でメールを開く操作をした時に』という箇所ができませんでした。 コードに関してはまさしく、hskさんが記述いただいた通りでございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問