|
皆さん今晩は。
仕事から帰ってみると、レスが進んでいるのですが、遅ればせながら、こんな感じでどうでしょうか。
'(1)(2)(3)のようにすれば、ClearContentsによるイベントは発生しません。
今は、On Error Resume Next は使わない方が良いので、削除しています。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False '<==●(1)
If Not Intersect(Target, Range("C7:C26")) Is Nothing Then
If Target.Value = Empty Then
Range(Target.Offset(, 1), Target.Offset(, 9)).ClearContents
GoTo Jump_Exit '<==●(2)
Else
'''品名に合わせたリストを選択し表示させる
'-----------------------
MsgBox "名前を付け"
'以下のコードは、上記 MsgBox "名前を付け"で代用し、検討していません。
'従って、コメントにしています。
'
'----------------------
'名前を付け
'名前 = ActiveCell.Value
'品目を選択した行の右隣のリストを名前付けしたものに変更
'With Selection.Offset(0, 1).Validation
' .Delete
' .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
' xlBetween, Formula1:="=" & "部品_" & 名前
' .IgnoreBlank = True
' .InCellDropdown = True
' .IMEMode = xlIMEModeNoControl
' .ShowInput = True
' .ShowError = True
'End With
End If
End If
'※下記のコードが動いてしまっているようです。
'●下記のコードは止まっているはず●
If Not Intersect(Target, Range("D7:D26")) Is Nothing Then
MsgBox "省略"
End If
If Not Intersect(Target, Range("E7:E26")) Is Nothing Then
MsgBox "省略"
End If
If Not Intersect(Target, Range("I7:I26")) Is Nothing Then
MsgBox "省略"
End If
Jump_Exit: '<==●((3)
Application.EnableEvents = True
End Sub
>Application.EnableEvents = False
について、正しく理解しておく必要があるように思います。
Application.EnableEvents = False
を入れれば、それ以降のイベントが発せ発生しませんが、それ以後のコードを実行しないということではありません。
Application.EnableEvents = False の意味をよく理解しておいてください。
(ヘルプを見ておくと良いでしょう)
>>又、どういう時にイベントを抑止したいのでしょう?
>>今のコードだと
>>Not Intersect(Target, Range("C7:C26")) Is Nothing =TRUE
>>の時しかイベントの抑止は効かないようになってますが。
> 当然人間がやることなので、見積の変更や失敗がありますので、内容をCLEARするときもありますが、その削除の仕方をC列を消すとその行全ての内容が消えるようにしました。
> 問題は削除されたあとに4.〜6.のイベントが働いて不要な”0”がなぜかF〜P行まで記入されてしまうことです。
上記の問題もクリアされていると思います。
試してみてください。
|
|