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

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

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

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

17691閲覧

OutlookのVBAが起動したりされなかったりする

TakefusaBoku

総合スコア41

VBA

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2016/03/19 14:57

Outlook2010のVBAで会議通知を自動返信するコードを書いているのですが、動く時と動かない時があり原因を調べているのですが、発生条件などがわからず困っています。
どなたかヒントをいただけませんでしょうか?

###【問題点1】
Outlookを起動していない時に受信した会議通知に対して応答がされない。
※Outlookはバッチを利用して、タスクスケジューラで時々起動しています。
※テキストファイルへの書き込みも実施されないのでそもそも動いていない???

###【問題点2】
キャンセル通知を受信した際、予定表に「Canceled」と書き込まれるが、本当はキャンセル応答を自動で返し予定表から削除させたいが出来ない。

###【コード】
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

Dim tmpItem Dim buf Dim i Open "C:\log.txt" For Output As #1 buf = Split(EntryIDCollection, ",") Print #1, Now For i = LBound(buf) To UBound(buf) Print #1, i Set tmpItem = Application.Session.GetItemFromID(buf(i)) If tmpItem.MessageClass = "IPM.Schedule.Meeting.Request" Then Set tmpAppoint = tmpItem.GetAssociatedAppointment(True) Set tmpMeeting = tmpAppoint.Respond(olResponseAccepted, True) tmpMeeting.Send ElseIf tmpItem.MessageClass = "IPM.Schedule.Meeting.Resp.Neg" Then Set tmpAppoint = tmpItem.GetAssociatedAppointment(False) tmpAppoint.MeetingStatus = olMeetingCanceled tmpAppoint.Send tmpAppoint.Delete End If Next Close #1

End Sub

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

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

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

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

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

guest

回答2

0

POP3で受信しているならApplication_NewMailExは動作するはずですね。

ExchangeサーバーやIMAPだと、起動してなくても勝手にボックスに入ってくるので、その間に受信したものについてApplication_NewMailExは使えないかもしれません。(未検証)

動作しているなら少なくとも、

Print #1, Now

は、実行されるはずなので、テキストの書き込みが無いということは動作してません。

ということで、サーバーがExchangeかIMAPなんじゃないでしょうか。
もしExchangeだと、メールボックスへの振り分けもサーバー側で実施されてしまうのでpi-chanさんの方法を使用するにはローカルへの振り分けルールを作っておくと良いです。
ローカルボックスであれば、起動時に振り分けが動作します。

投稿2016/03/20 13:36

thom.jp

総合スコア686

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

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

TakefusaBoku

2016/03/20 13:57

おっしゃるとおりの内容に自分自身でもたどり着きました。 大変参考になる意見ありがとうございました。 使っているのがIMAPで間違いございません。 ということでSubプロシージャで動かそうと思っていますが・・・ Public Sub TestRule・・・ End Sub このプロシージャだと会議出席依頼がきっかけで動かずまだ検証できていないところです(汗)
TakefusaBoku

2016/03/21 04:53

Public Sub DisplaySubjectByRule(ByRef objItem As MeetingItem) このサブプロシージャ呼び出しで動かすことが出来ました! ありがとうございました。
guest

0

ベストアンサー

Outlookは殆ど使用したことがないので、的外れならゴメンナサイ。

Outlookを起動していない時に受信した会議通知に対して応答がされない。

とのことですが、これは(素人考えでは)当然ではないかと思います。つまり、r.y.oさんは Application_NewMailEx の仕様を誤解されているだけだと思います。

Application_NewMailEx は新着メールがあるかどうかを確認するメソッドではなくて、新着メールが受信したという イベント を検知するものなので、起動していない時に受信した分については、

  1. Outlookの起動に要する時間(イベント検知が可能になるまでの時間)
  2. 溜まっていたメールの受信に要する時間がどの程度掛るか

によって結果が変わって来るのだと思います。

しかし、これらはいずれも、PCはの負荷状況やネットワークの速度、あるいはメールサーバーに溜まっていたメールの量などによって変わってきますので、得られる結果が不安定になってしまうのではないでしょうか?

Outlookって、基本的には常時起動したまま使用する想定のソフトウェアなので、要するに、実装方法の問題ではないのではなく、仕様上の問題だと思います。

とは言え、PCを24時間起動したままにする訳にも行かないでしょうから、Outlookが起動していない時間帯に受信した分については別途処理の仕方を考える必要があります。

そこで、下記ページの実装方法を参考にしてみてはいかがでしょうか?

受信したメールの添付ファイルを自動保存するマクロ

ページ後半にある追記部分をご参照ください。
アイディアとしては、新着メールの受信イベントによって処理を開始するのではなく、メールの振り分け(こちらは多分、Outlookが完全に起動してから開始される)をトリガーに処理を開始するとう方式です。

以上、ご参考になれば幸いです。

投稿2016/03/20 00:18

pi-chan

総合スコア5936

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

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

TakefusaBoku

2016/03/20 13:52

大変参考になる意見ありがとうございます! おっしゃるとおりで勘違いしていた部分がありました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問