ケン
マクロについて判らないことがあります。
大野様
ケンです。お世話になっております。ところで、サンプルプログラムである、IfdoneOCO+時間決済サンプルのマクロについてお聞きしたいことがありまして、再度アップロードしました。
このファイルのマクロを開きますと、Module2の中に、Sub AllLock() というサブタスクがあります。(以下に示しました)
01 Sub AllLock()
02 Range("J2").Value = 0
03 Range("L2").Value = 0
04 Range("Q2").Value = 0
05 Range("F22").Value = 0
06 Range("J36").Value = 0
07 Range("L36").Value = 0
08 Range("A1").Select
09 End Sub
このタスクをステップインで最初の行から実行してゆきますと、02行が実行された直後に、シート“条件注文”の中に付随する、Private Sub Worksheet_Calculate() というタスクにジャンプします。そしてそのタスクのENDに来て直後03行に戻ります。再度ステップインを実行しますと、再度又Private Sub Worksheet_Calculate()にジャンプします。
結局09に来るまでに7回、全く関係の無いと思われるPrivate Sub Worksheet_Calculate()に飛びます。そこで私の質問は、
1. この現象はなぜ起きるのでしょうか?
2.このような飛ばしが必要な理由は何かあるのでしょうか?
3.この飛ばし現象をやめさせる方法はあるでしょうか?
以上の3個です。よろしくお願い申し上げます。
2021年07月21日
大野 了
ケンさん、こんにちは!!
お久しぶりです。
>1. この現象はなぜ起きるのでしょうか?
Calculateは再計算のイベントとなります。
計算式の参照元のセルが変更された場合などに再計算が走ると、このイベントが動きます。
今回は『Range("J2").Value = 0』でセルの値が変更されており
どこかで、このJ2のセルが参照されているため、再計算が走り
結果、Calculateが動いています。
>2.このような飛ばしが必要な理由は何かあるのでしょうか?
必要というか、CalculateイベントのVBAを入れているため、
必ず動きます
>3.この飛ばし現象をやめさせる方法はあるでしょうか?
02の前に
Application.EnableEvents = False
09の前に
Application.EnableEvents = True
として、セルの更新の時にイベントが動かないようにすることで回避可能です。
2021年07月21日
ケン
大野様へ
実験して、完全にイベントが動かなくなることを確認しました。これで新たなサブタスクを付加することが出来ます。大変ありがとうございました。
2021年07月24日
大野 了
ケンさん、こんにちは!!
うまく行きましたかー!!
お役に立てて幸いです!!
2021年07月25日