|
▼UO3 さん:
こんにちは!ご回答いただきありがとうございました。
手直しいただいたコードを貼り付け、ブレークポイントを設定して実行してみた結果、L30をDeleteした時はExit Subに飛んで終わっていました。
空白として更新されたと認識されないようです。
どうしたら空白と認識されるのでしょうか、、、
>▼けい さん:
>
>こんにちは
>
>はずしているかもしれませんが・・・・
>
>たとえば L30 を「セル削除」した場合、確かにTarget.Address は
>$L$30 になります。
>ただし、その値は Target.Value であれ Range("L30").Value であれ
>「新しいL30」の値になります。(削除前のL30の値は返りません)
>
>ただし、「空白」、つまり、L30を「クリア」すれば、値は空白で返ってきます。
>なので、ElseIf での処理がなされると思うのですが?
>
>ブレークポイントの設定と、ステップ実行はご存知でしょうか?
>最初の If 文にブレークポイントを設定し、L30をクリアして、このコードでとまった後
>F8を押しながら1ステップずつ実行させますと、コードが、どのような順序で実行されるのかが
>わかります。是非、お試しください。
>
>それと、今回のケースでは、最初にTargetのアドレスをL30 と聞いていますので
>実害はないのですが、L36へのセットで、Changeイベントが発生し、その瞬間に
>このプロシジャに再入してきます。(イベントの連鎖)
>
>一般的には、処理の前に、
>Application.EnableEvents = False と記述してイベント発生を抑止し
>処理後に
>Application.EnableEvents = True として復旧させますね。
>
>アップされたコードと基本、同じですが、少し手直ししたものを参考まで以下に。
>
>Private Sub WorkSheet_change(ByVal Target As Range)
> Dim P As VbMsgBoxResult
>
> If Target.Address <> "$L$30" Then Exit Sub
>
> Application.EnableEvents = False
>
> If Range("L30") <> "" Then
>
> P = MsgBox("有りですか?", vbYesNo)
>
> If P = vbYes Then
>
> Range("I36").Value = "有り"
>
> Else
>
> Range("I36").Value = "無し"
>
> End If
>
> Else
>
> Range("I36").ClearContents
>
> End If
>
> Application.EnableEvents = True
>
>End Sub
|
|