Outlook 2003、2007、および 2010 で動作する一連のマクロがあります。実際、特定のケースを除いて、2013 でも動作します。
このマクロは、電子メールを送信しようとするたびに、件名にキーワードをタグ付けするためのダイアログ ボックスを表示します。問題は、Outlook を起動したばかりで、新しいメールまたは返信を表示した場合です。Outlook 2013 の既定では、新しいウィンドウではなく、以前の "閲覧ウィンドウ" に表示されます。「ポップアウト」をクリックせずに送信しようとすると、マクロが次のエラーでクラッシュします。
「実行時エラー '91' オブジェクト変数またはブロック変数が設定されていません」
最初にフォームの読み込みを確認しようとしましたが、userform.show であっても、ユーザーフォームへの呼び出しでこのエラーが発生するようです。
奇妙なことに、最初のメールを「ポップアウト」することを覚えていれば、Outlook を閉じて再度開くまで、毎回問題なく動作します。他のメールを「ポップアウト」しなくても。これが発生するのは最初の 1 つだけです。
私の初期化イベントの始まりは次のとおりです。
Dim Tags() As String
Dim T As Variant
Dim PC As Variant
Dim Rent As String
Dim Child As String
Dim nsourcefile As Integer
Dim email As MailItem
Dim PD As Variant
Dim Proj As String
Dim Desc As String
'Set email = Application.ActiveInspector.CurrentItem
Set email = Application.ActiveExplorer.Selection.Item(1)
'Checks to see if a project number (that's not on the list) may be in the subject already
If Val(email.Subject) > 10000 Then
TagMsg.Height = tall
TagMsg.NewProjID = Format(Val(email.Subject), "00000")
TagMsg.NewProjDesc.SetFocus
Else
'Set height of form (prior to pressing "More" button
TagMsg.Height = short
End If
Set email = Application.ActiveInspector.CurrentItem を Set email = Application.ActiveExplorer.Selection.Item(1) に変更したことに気付きました。これで修正されたようですが、VBA のヘルプには、「Item メソッドの戻り値の型について想定しないでください。コードは、複数の項目の種類または ConversationHeader オブジェクトを処理できる必要があります。」と記載されています。
フォームが ItemSend イベントによって呼び出されていることに注意してください。