F8で動きをみていましたら 最後の5工程位で end subにいったん行って また戻って続きに行っているのですが、 end subに行くとそのsubプロシージャーはその時点で終了し、 終わりではないのでしょうか?
exit subなら続きもありえるのだと思うのですが。
よろしくお願いいたします。
2023/04/29 11:10
小川 慶一さんのコメント
(コメントID: 8138)
おはようございます。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim mx As Long
If Target.Column <= 3 Or Target.Column >= 8 Then
Exit Sub
End If
If Target.Row <= 9 Then
Exit Sub
End If
Range("C" & Target.Row).Value = Now
If IsEmpty(Range("B" & Target.Row).Value) = True Then
mx = Range("B10000").End(xlUp).Row
Range("B" & Target.Row).Value = Now
Range("A" & Target.Row).Value = WorksheetFunction.Max(Range("A10:A" & mx)) + 1
End If
If Target.Column = 4 Then
If Range("D" & Target.Row).Value = 1 Then
Range("A" & Target.Row & ":G" & Target.Row).Interior.ColorIndex = Range("E6").Interior.ColorIndex
Range("E" & Target.Row).Value = Range("E6").Value
End If
End If
End Sub
tanto6738さんの投稿
(投稿ID: 5471) 添付ファイルのダウンロード権限がありません
F5を押したらできているように見えますが、
(D10に1を入れてみました)
F8で動きをみていましたら
最後の5工程位で
end subにいったん行って
また戻って続きに行っているのですが、
end subに行くとそのsubプロシージャーはその時点で終了し、
終わりではないのでしょうか?
exit subなら続きもありえるのだと思うのですが。
よろしくお願いいたします。
小川 慶一さんのコメント
(コメントID: 8138)
> end subに行くとそのsubプロシージャーはその時点で終了し、終わりではないのでしょうか?
そのとおりです。
> end subにいったん行ってまた戻って続きに行っているのですが、
ここは、誤認があるように感じられます。
状況を以下に整理します。
まず、イベントの連鎖が起こっていますね。
以下のとおりの動きになっています。
(以下で、「→」の数は、入れ子なっている連鎖の深さを表しています)
セルD10編集イベントでプロシージャ起動
→セルC10編集イベントでプロシージャ起動
→→セルB10編集イベントでプロシージャ起動
→→セルB10編集イベントでのプロシージャ終了
→→セルA10編集イベントでプロシージャ起動
→→セルA10編集イベントでのプロシージャ終了
→セルC10編集イベントでのプロシージャ終了
→セルE10編集イベントでプロシージャ起動
→→セルC10編集イベントでプロシージャ起動
→→セルC10編集イベントでのプロシージャ終了
→セルE10編集イベントでのプロシージャ終了
セルD10編集イベントでのプロシージャ終了
最後の方は、以下が立て続けに起こりますね。
→→セルC10編集イベントでのプロシージャ終了
→セルE10編集イベントでのプロシージャ終了
セルD10編集イベントでのプロシージャ終了
このそれぞれのイベントプロシージャの再開行にステップイン実行の黄色い表示が来るので、後ろのほう数行がくりかえされているように見えてしまいます。
入れ子の奥のほうのプロシージャが End Sub で終了すると、それを呼び出したプロシージャでの処理が再開されます。
まずは、この説明でどうでしょうか。
以下の3つの動画での復習もお願いします。
イベントプロシージャ実行と作成の流れまとめ
https://forum.pc5bai.com/lesson/page/305/
イベントの連鎖
https://forum.pc5bai.com/lesson/page/306/
イベントの連鎖(フラグで制御する方法)
https://forum.pc5bai.com/lesson/page/306/
tanto6738さんのコメント
(コメントID: 8140) 添付ファイルのダウンロード権限がありません
②③①②③で終了となっています。
入れ子、連鎖を考えてみましたが、
どうしても分かりません。
そもそも
③は一番外のend subなので
②③①②③にはならず、
一番外側の③が実行された時点で、
②③で終了し
その後の①以降②③も実行されないと思うのですが、、
(実際②③①②③と動くので私の理解不足と思うのですが)
同じ問題で2回質問申し訳ございません。
tanto6738さんのコメント
(コメントID: 8139)
理解できました。