#1.この記事について
こんなケースを想定。
《マクロ付エクセルブックを編集するとき、起動時に実行するイベントプロシージャを働かせないで起動したい》
《その他、シートアクティブ時のイベント等の「実行してほしくないプロシージャ」を一旦中断したい》
#2.やりたいこと
表題のとおりです。
↓このような方法もあるみたいですね。
https://stabucky.com/wp/archives/5052
ただ、上記に参照させていただいた方法だとめんどくさいし、まとめて複数のブックを開くときにいちいち同じことしなければならないので、
今回作成したツールで上記懸念点をクリアしました。
#3.作成したコード
コード自体は至ってシンプルで、実処理部分のステップ数は10行くらいだと思います。
###(1)
まずはフォーム呼び出し関数がこのようになります(マクロ呼び出しのショートカットに登録するならこれを登録すれば便利です)。
'******************************************************************************************
'*関数名 :invalidateEvents
'*機能 :ブックのイベントをフォーム表示している間無効にする
'*引数(1) :無し
'******************************************************************************************
Public Sub invalidateEvents()
'定数
Const FUNC_NAME As String = "invalidateEvents"
'変数
On Error GoTo ErrorHandler
'---以下に処理を記述---
'イベント無効化
Application.EnableEvents = False
'フォーム表示
F_invalidateEvents.Show vbModeless
ExitHandler:
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しましたので終了します" & _
vbLf & _
"関数名:" & FUNC_NAME & _
vbLf & _
"エラー番号" & Err.Number & Chr(13) & Err.Description, vbCritical
GoTo ExitHandler
End Sub
###(2)
上記が呼び出すフォームの外観、コードは以下のようになります。
Option Explicit
'******************************************************************************************
'*関数名 :CommandButton_Close_Click
'*機能 :閉じるボタン押下時処理
'*引数(1) :
'******************************************************************************************
Private Sub CommandButton_Close_Click()
'定数
Const FUNC_NAME As String = "CommandButton_Close_Click"
'変数
On Error GoTo ErrorHandler
'---以下に処理を記述---
'フォームを閉じる
Unload F_invalidateEvents
ExitHandler:
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しましたので終了します" & _
vbLf & _
"関数名:" & FUNC_NAME & _
vbLf & _
"エラー番号" & Err.Number & Chr(13) & Err.Description, vbCritical
GoTo ExitHandler
End Sub
'******************************************************************************************
'*関数名 :UserForm_QueryClose
'*機能 :〇〇○
'*引数(1) :〇〇○
'******************************************************************************************
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'定数
Const FUNC_NAME As String = "UserForm_QueryClose"
'変数
On Error GoTo ErrorHandler
'---以下に処理を記述---
'イベント有効化
Application.EnableEvents = True
ExitHandler:
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しましたので終了します" & _
vbLf & _
"関数名:" & FUNC_NAME & _
vbLf & _
"エラー番号" & Err.Number & Chr(13) & Err.Description, vbCritical
GoTo ExitHandler
End Sub
#4.コードの解説
フォーム呼び出し直前にイベント系のプロシージャを無効化し、
閉じるボタンで再び有効化します。
vbmodelessを引数に設定しているので、フォーム表示時にもエクセルで作業は可能です。
フォーム表示している間、複数のブックを起動することも出来ます。
#5.終わりに
###Github
ツールを上げましたので良かったら参照ください。
Github
なにか補足がありましたらコメントください。