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

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

解決済

1回答

6915閲覧

「実行時エラー'91':オブジェクト変数または With ブロック変数が設定されていません。」となってしまいます・・・

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グッド

0クリップ

投稿2016/03/21 12:39

outlook2010で自動仕分けをした際に会議開催通知の場合、自動返信させようとしています。
★印のところに来ると変数が設定されいないといったエラーが発生します。
初心者な質問で申し訳ありませんが、どなか解説いただけないでしょうか・・・

よろしくお願い致します。

Public Sub DisplaySubjectByRule(ByRef objItem As MeetingItem)
Dim tmpItem
Dim buf
Dim i

buf = Split(objItem.EntryID, ",")

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
End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

検証用に少しコードを変えてやってみましたが、そのようなエラーは出ませんでした。
以下のコードはMeetingItemを一つ開いた状態で実行しています。

Sub test() Dim m As MeetingItem Set m = ActiveInspector.CurrentItem buf = Split(m.EntryID, ",") Dim tmpAppoint As AppointmentItem Dim tmpMeeting As MeetingItem For i = LBound(buf) To UBound(buf) 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 End Sub

ただ、気になったのが、
・DisplaySubjectByRuleに渡されるMeetingItemは単数かと思いますが、EntryIDをカンマでスプリットしているのは複数個取れているんでしょうか。
・「Print #1, i」はどこから出てきたんでしょうか。
・変数はそれぞれの固有型で宣言しておくと間違いにくくなります。

の3点ですね。

投稿2016/03/21 20:55

thom.jp

総合スコア686

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

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

TakefusaBoku

2016/03/22 13:13

書き込みに応答して頂きありがとうございました。 >・DisplaySubjectByRuleに渡されるMeetingItemは単数かと思いますが、EntryIDをカンマでスプリットしているのは複数個取れているんでしょうか。 複数で渡されるかと思っていたのですが、単数でした。複数メール受信しても処理されていたので無くても問題はないかと今は思っています。 >・「Print #1, i」はどこから出てきたんでしょうか。 誤記でした。回答の妨げですみませんでした。 >・変数はそれぞれの固有型で宣言しておくと間違いにくくなります。 ありがとうございます。 ご教示頂いたサンプルコードをもとに仕分けルールでやってみたのですが・・・どうしても同じエラーが出てしまいます。 せっかく確認していただいたのに理解が進まず申し訳ありませんが、ご教示願えませんでしょうか。よろしくお願い致します。 Public Sub DisplaySubjectByRule(ByRef objItem As MeetingItem) 'Dim m As MeetingItem '★この時点でタイトルのエラーが出るためコメントアウトしてみました 'Set m = ActiveInspector.CurrentItem buf = Split(objItem.EntryID, ",") 'そうするとEntryIDは取れるみたいです。 Dim tmpAppoint As AppointmentItem Dim tmpMeeting As MeetingItem For i = LBound(buf) To UBound(buf) Set tmpItem = Application.Session.GetItemFromID(buf(i)) If tmpItem.MessageClass = "IPM.Schedule.Meeting.Request" Then MsgBox tmpItem.MessageClass '★ここでちゃんと何の種類が来たか判断できているようです Set tmpAppoint = tmpItem.GetAssociatedAppointment(True) Set tmpMeeting = tmpAppoint.Respond(olResponseAccepted, True) 'tmpMeeting.Send '★最終的にここでタイトルのエラーが出ます。
thom.jp

2016/03/23 21:19

表題のエラーは、オブジェクト変数の中身が参照できないときに出るものですので、一度tmpAppointのSet後と、tmpMeetingのSet後に、 Debug.Print tmpAppoint Is Nothing Debug.Print tmpMeeting Is Nothing でFalseになるか確かめてみてください。 同じ検証環境がありませんが、私の環境(POP3)ではうまく動作しているので、またIMAP特有の問題かもしれません。
TakefusaBoku

2016/03/26 14:48

お返事いただいていたのに返しが遅く申し訳ありません。 イミディエイトウィンドウで見ていると Debug.Print tmpAppoint Is Nothing→False Debug.Print tmpMeeting Is Nothing→True このような挙動になっていました
thom.jp

2016/03/27 10:44

MSの修正パッチを発見しました。 https://support.microsoft.com/ja-jp/kb/2475877 ページに記載の、以下のバグの可能性があります。(機械翻訳なので表現がおかしいですが。。) > 会議を開く Outlook 2010 では、送信済みアイテムからアイテムを要求します。を実行する、VBA コードを含む、 MeetingRequest.GetAssociatedAppointment 項目の方法です。この状況で、 MeetingRequest.GetAssociatedAppointment メソッドが正常に実行> されません。さらに、次のエラー メッセージが表示されることも可能性があります。 > 実行時エラー 91: オブジェクト変数または With ブロック変数が設定されていません。
TakefusaBoku

2016/04/02 05:24

返信が遅くなり申し訳ありません。 確かにパッチを当ててみたところ発生しなくなりました! もともとのバグで手間取っていたんですね 親切に調べていただいたり本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問