2017-04-19 61 views
1
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 

此代码对我造成轻微问题。任何时候我在范围内选择一整行,范围内的每个单元格都变为“T”。由于代码的一致性,如果我删除带“T”,那么,整个行会充满字符串“I”选择变化影响范围以外的单元格

什么可作调整,范围内的细胞被选择为触发

+1

'如果Target.Count> 1,则退出Sub' –

+0

谢谢!问题解决了! – Thelnternet

+1

此外,'范围(Target.Offset(,-1),Target.Offset(,-2)).ClearContents'可以是'Target.Offset(,-2).Resize(1,2).ClearContents' –

回答

1
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    Const Col As Long = 2 

    If Target.Count > 1 Then 
    Exit Sub 
    End If 

已将此添加到代码的顶部,它将现在如果选择多于一个的小区,即使所选择的小区中的一个是在适当范围内退出子。

+0

Cleaned多余的代码,希望这会改变一下更好的东西。 – Thelnternet

1

检查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 

选装配置:

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 
+0

我喜欢它如何分配适当的值,即使我选择了两个单独的区域。但是,由于某些原因,当我尝试使用它时,单元格未正确清除内容。 – Thelnternet

+1

我想过那个;您可能想要使用N7反转序列:首先是N98,最后是L7:L98。换句话说,这些单元格正在清理,但它们在清除之后被填充。您也可以将后两个条件更改为ElseIf,因此只会处理一个而不是全部三个。 – Jeeped

+0

我试着交换订单,它似乎也不工作。你会如何实施Else If? – Thelnternet

相关问题