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

ExcelのVBAについて質問いたします。
シートにPrivate Sub Worksheet _Change(Byval Target As Range)を設置し、Call文にて他のモジュールに記述したSubに飛ばすプログラムを記述しました。
実行すると、モジュールのEnd Subに到達する前(処理途中の状態)、シートのChangeの方に戻ってしまいます。
戻るのを禁止する場合、どのようなコードの記載が要りますでしょうか?

A 回答 (2件)

こんにちは



Changeイベントの処理中(Callで呼び出しているSubの処理も含む)で、セルの値を変更してはいませんか?
もしも、そのような場合には、再度Changeイベントが発生してしまうということが起こります。
(ご質問のケースがこれに該当するのかは不明ですが、ひとまずこれと仮定して…)

このようなことを防止するには、Changeイベントの処理中には一時的にイベントの発生を停止します。
処理の初めに
 Application.EnableEvents = False
処理終了後に
 Application.EnableEvents = True
とすることで実現できます。
https://docs.microsoft.com/ja-jp/office/vba/api/ …

※ 原因がこれとは異なる場合は、スルーしてください。
    • good
    • 0

>戻るのを禁止する場合



とは Call で呼んだサブプロシージャ―が実行されたら、以降チェンジイベントでの作業はないのですか?
また Call で呼び出す時と呼ばない時が確実に分かれているのでしょうか?

もし分かれているなら

if 条件式 then
call ~
exit sub

else

'他の作業
end if

とかに出来そうな予感が・・・
    • good
    • 0

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