ItemSend でユーザーフォームを表示している際に送信中のアイテムを変更させない方法


コメントにて以下のようなご質問をいただきました。


outlook2003(2007でも同じでした)でメッセージ送信時
にチェックをかけるためuserformを作成し、
Application_ItemSendでUserForm1.Show (vbModal)で
呼び出していますがモーダルになりません
送信しようとしているアイテムが操作出来てしまいます
これはこういうものなのでしょうか?


Application オブジェクトのイベントの中でモーダルとした場合、その親ウィンドウは ActiveExplorer になります。そのため、アイテムを表示しているウィンドウは操作可能となってしまいます。
これを防ぐには、送信しようとしているアイテムを表示している Inspector オブジェクトのイベントにより、Inspector がアクティブになったら最小化するか、Explorer をアクティブにするというようなものが考えられます。

以下は、UserForm1 を表示している際に送信中のアイテムが選択されたら、ActiveExplorer をアクティブにするサンプルです。

' ここをトリプルクリックでマクロ全体を選択できます。
Dim WithEvents inspSending As Inspector
'
' Inspector のハンドラー
Private Sub inspSending_Activate()
    ActiveExplorer.Display
End Sub
'
' 送信イベント
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Set inspSending = Item.GetInspector()
    UserForm1.Show vbModal
    Set inspSending = Nothing
End Sub

マクロの登録方法やメニューへの追加について

コメントを残す