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

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

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

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

Outlook

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

マクロ

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

Q&A

1回答

2136閲覧

OutlookアドインからVBAマクロを無効にしたい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

Outlook

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

マクロ

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

0グッド

0クリップ

投稿2020/12/16 09:51

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マクロ全体を抑止するのは、他に必要な処理もあるため出来ません。

アドバイスをいただければ助かります。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

プログラム的にOutlookマクロを無効にしたり編集するのは無理なようです。
マクロのOTMファイルは独自の形式で、これを直接編集することはできないそうです。
また、レジストリキーを設定変更して、Outlookマクロ全体を抑止することは出来そうですが、これはニーズに合致しません。
なので、人手に頼るのはやむを得ない、が現時点の結論です。

投稿2020/12/18 00:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問