質問掲示板
岡三RSS
集いの広場

アップロードされたファイルおよび投稿内容についての注意事項 別窓

複数の単語で検索する方法 別窓

【国内株式、先物・オプション】岡三RSS質問箱

ケン

マクロについて判らないことがあります。

大野様
ケンです。お世話になっております。ところで、サンプルプログラムである、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日

ログインしてコメントを投稿する

すべての投稿を表示する

to_top
to_top

アップロードされたファイルにはウイルスチェックを行っておりますが、未知のウイルス等に感染されている場合がありますので、アップロードされたファイルのご利用はご注意ください。
また、取引パスワード等の重要な情報を投稿内容に含めないようご注意ください。
なお、アップロードされたファイルの利用や投稿内容によって、投稿者自身や他の利用者が被った損害に対して当社は一切責任を負いません。

また、セキュリティの関係上、一部コマンド等を含む内容を送信するとエラー画面が表示され、投稿ができない場合がございます。何卒ご了承ください。

岡三RSS集いの広場では、複数の単語による検索が可能です。

例)関数 and サンプル
→AND検索となり、「関数」および「サンプル」を含む検索結果が表示されます。

例)関数 or サンプル
→OR検索となり、「関数」または「サンプル」を含む検索結果が表示されます。

例)関数 not サンプル
→NOT検索となり、「関数」を含むが「サンプル」は含まない検索結果が表示されます。

※and、or、notの前後は半角スペースで区切ってください。
※単語の間を半角スペースで区切るだけだと、OR検索となります。