Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10237 / 76734 ←次へ | 前へ→

【72047】Re:セル更新時のマクロ
発言  UO3  - 12/5/22(火) 11:14 -

引用なし
パスワード
   ▼けい さん:

こんにちは

はずしているかもしれませんが・・・・

たとえば 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

4 hits

【72043】セル更新時のマクロ けい 12/5/21(月) 19:27 質問
【72044】Re:セル更新時のマクロ ponpon 12/5/21(月) 23:42 発言
【72051】Re:セル更新時のマクロ けい 12/5/22(火) 14:46 質問
【72047】Re:セル更新時のマクロ UO3 12/5/22(火) 11:14 発言
【72050】Re:セル更新時のマクロ けい 12/5/22(火) 14:04 質問
【72054】Re:セル更新時のマクロ UO3 12/5/22(火) 21:46 発言
【72060】Re:セル更新時のマクロ けい 12/5/23(水) 11:07 質問
【72055】Re:セル更新時のマクロ UO3 12/5/22(火) 21:51 発言
【72061】Re:セル更新時のマクロ けい 12/5/23(水) 11:34 質問
【72063】Re:セル更新時のマクロ UO3 12/5/23(水) 12:44 発言
【72066】Re:セル更新時のマクロ けい 12/5/23(水) 13:53 お礼
【72052】Re:セル更新時のマクロ ponpon 12/5/22(火) 15:01 発言

10237 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free