Outlookのメール誤送信対策として、簡易的に以下のようなVBAマクロがあります。
VBA
1Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 2 Dim aExtAddrs() As String ' 社外宛アドレスリスト 3 Dim iExtNum As Integer ' 社外宛アドレス数 4 Dim olRecip 5 iExtNum = -1 6 For Each olRecip In Item.Recipients 7 If Not olRecip.Address Like "*@mydomain" Then 8 iExtNum = iExtNum + 1 9 ReDim Preserve aExtAddrs(iExtNum) 10 aExtAddrs(iExtNum) = olRecip.Address 11 End If 12 Next 13 if iExtNum >= 0 Then 14 Dim sMsg As String, i As Integer 15 sMsg = "社外宛のメールアドレスが含まれています。間違いはありませんか?" 16 For i = 0 To UBound(aExtAddrs) 17 sMsg = sMsg & vbCrLf & aExtAddrs(i) 18 Next 19 if MsgBox(sMsg, vbYesNo + vbQuestion, "送信前確認") <> vbYes 20 Cancel = True ' 送信取消 21 Exit Sub 22 end if 23 End If 24End Sub
これをそのままアドインにしました。
VB
1Public Class ThisAddIn 2 Private Sub ThisAddIn_Startup() Handles Me.Startup 3 AddHandler Me.Application.ItemSend, AddressOf CatchItemSend 4 End Sub 5 Private Sub CatchItemSend(ByVal Item As Object, ByRef Cancel As Boolean) 6 Dim aExtAddrs() As String ' 社外宛アドレスリスト 7 Dim iExtNum As Integer ' 社外宛アドレス数 8 iExtNum = -1 9 For Each olRecip As Outlook.Recipient In Item.Recipients 10 If Not olRecip.Address Like "*@mydomain" Then 11 iExtNum = iExtNum + 1 12 ReDim Preserve aExtAddrs(iExtNum) 13 aExtAddrs(iExtNum) = olRecip.Address 14 End If 15 Next 16 if iExtNum >= 0 Then 17 Dim sMsg As String, i As Integer 18 sMsg = "社外宛のメールアドレスが含まれています。間違いはありませんか?" 19 For i = 0 To UBound(aExtAddrs) 20 sMsg = sMsg & vbCrLf & aExtAddrs(i) 21 Next 22 if MsgBox(sMsg, vbYesNo + vbQuestion, "送信前確認") <> vbYes 23 Cancel = True ' 送信取消 24 Exit Sub 25 end if 26 End If 27 End Sub 28End Class
こうした場合、アドインをインストールした時にVBAマクロを削除しないと、二重にItemSendイベントハンドラが設定された状態になり、両方の処理が呼ばれます。(同時あるいは逐次的)なので、VBAマクロを無効にしたいのですが、適当な方法に悩んでいます。
単純なのは、アドインをインストールする時にVBAマクロを手で削除することですが、人手に頼ることになり避けたいです。(できれば自動で行いたい)
アドイン本体は共有の場所に置いてsetup.exeでインストールを行う予定ですが、そのインストーラでOutlookの持つVBAマクロを取得できたり、一部のマクロ(今回ではApplication_ItemSend)を無効にする方法はあったりするでしょうか?
※VBAマクロ全体を抑止するのは、他に必要な処理もあるため出来ません。
アドバイスをいただければ助かります。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。