プロが教えるわが家の防犯対策術!

教えてください。
表示を他ブックに切り替えるとイベント無効にし
元々表示させていたブックに戻るとイベント有効にしたいのですが
どのようにすれば良いでしょうか?

Private Sub Workbook_Deactivate()
Application.EnableEvents = False
End Sub

Private Sub Workbook_Activate()
Application.EnableEvents = True
End Sub

元々のブックに上記入れると、
他ブックに切り替え時はイベントが無効になるのですが
元々表示させていたブックに戻ってもイベントが有効になりません。
ご教示お願いいたします。

A 回答 (2件)

おはようございます。



他に、どの様なイベントを使っているでしょうか?

下記で、一旦イベントを無効にしてしまうと、
Private Sub Workbook_Deactivate()
Application.EnableEvents = False
End Sub

その次の、Workbook_Activateのイベント自体が発生しなくなります。
Private Sub Workbook_Activate()
Application.EnableEvents = True
End Sub

例としては、何かの変数を宣言して、その変数で処理を分岐させる。

Public myFlag As Boolean

Private Sub Workbook_Open()
myFlag = True’変数の初期値 Trueでイベントを有効の意味
End Sub

Private Sub Workbook_Deactivate()
myFlag = False ’Falseでイベントを無効の意味
End Sub

Private Sub Workbook_Activate()
myFlag = True ’Trueでイベントを有効の意味
End Sub

’イベント自体は発生するが、処理の一番最初に変数で分岐させ、Falseなら
何も処理せずに抜ける = イベント無効と同じ様な処理が可能です。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If myFlag = False Then Exit Sub ’Falseなので、何も処理せずに抜ける。
'処理~
End Sub

その他のイベントでは、myFlagの内容を確認し、Falseなら、Exit Subなど
で抜ける様にするなどにすれば、対応可能かと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
イベントばかり気にしていましたが、こんなこともできるのですね。
とても勉強になりました。
ありがとうございした。

お礼日時:2022/05/02 02:06

こんにちは。



手元に環境がないので未確認ですが。

イベントを無効ではなく、イベントプロシージャの冒頭でアクティブなブックが、VBAを記載したブックなのかチェックして、違ったら即終了されるとか。

If Not ActiveWorkbook is ThisWorkbook Then Exit Sub

IS演算子で比較出来ないようなら、

If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Sub

とか。

Application.EnableEvents

はエラートラップをしっかり、他ブックへの影響を考慮しないとダメだった様に記憶してます。

Thisworkbook について調べてみて。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ブック切り替え時にイベントを無効にしていたのが大失敗でした。
まだまだ勉強が必要です。
ありがとうございました。

お礼日時:2022/05/02 02:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!