select更改影响范围以外的单元格

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const Col As Long = 2 If Not Intersect(Target, Range("L7:L98")) Is Nothing Then Application.EnableEvents = False Target.Value = "T" Target.Offset(, 1).Resize(, Col).ClearContents Application.EnableEvents = True End If If Not Intersect(Target, Range("M7:M98")) Is Nothing Then Application.EnableEvents = False Target.Value = "I" Target.Offset(, 1).ClearContents Target.Offset(, -1).ClearContents Application.EnableEvents = True End If If Not Intersect(Target, Range("N7:N98")) Is Nothing Then Application.EnableEvents = False Target.Value = "D" Range(Target.Offset(, -1), Target.Offset(, -2)).ClearContents Application.EnableEvents = True End If End Sub 

这段代码对我造成了一个小问题。 任何时候,我select范围内的整个行,范围内的每个单元格更改为“T”。 考虑到代码的一致性,如果我用“T”删除string,那么整行将填充“I”

只有select范围内的单元格才能触发什么?

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const Col As Long = 2 If Target.Count > 1 Then Exit Sub End If 

添加到代码的顶部,它现在将退出Sub,如果select了多个单元格,即使其中一个选定的单元格在适当的范围内。

在检查Selection与各个范围是否相交之后,只处理与各个范围相交的Target部分。

 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const Col As Long = 2 If Not Intersect(Target, Range("L7:L98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("L7:L98")) .Value = "T" .Offset(, 1).Resize(, Col).ClearContents End With End If If Not Intersect(Target, Range("M7:M98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("M7:M98")) .Value = "I" .Offset(, 1).Resize(, Col).ClearContents End With End If If Not Intersect(Target, Range("N7:N98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("N7:N98")) .Value = "D" .Offset(, 1).Resize(, Col).ClearContents End With End If Application.EnableEvents = True End Sub 

可选scheme:

 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const Col As Long = 2 If Not Intersect(Target, Range("L7:L98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("L7:L98")) .Value = "T" .Offset(, 1).Resize(, Col).ClearContents End With ElseIf Not Intersect(Target, Range("M7:M98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("M7:M98")) .Value = "I" .Offset(, 1).Resize(, Col).ClearContents End With ElseIf Not Intersect(Target, Range("N7:N98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("N7:N98")) .Value = "D" .Offset(, 1).Resize(, Col).ClearContents End With End If Application.EnableEvents = True End Sub