我使用下面的代码将列E上的更改与一些条件相交,其中一个条件是如果目标更改值不为空,则触发,事件的效果应用起来没有问题,但是如果在目标的同一行上选择并删除了两个单元格(或多个(我收到这个错误
运行时错误13:类型不匹配
这是错误Target.value <> ""
的原因
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E:E")) Is Nothing And _
Target.Columns.Count = 1 And _
Target.Row > 1 And _
Target.value <> "" Then
Application.EnableEvents = False
'Some codes here
Application.EnableEvents = True
End If
End Sub
感谢您的评论和回答。
只能选中Target.Columns.Count
,但Target
也可以是多行。然后Target.value
是一个值的数组,如果不循环,就无法将数组与= ""
进行比较。
因此,将Target.Columns.Count = 1
替换为Target.Cells.CountLarge = 1
,以确保Target
只是一个单元格,或者循环遍历Target
中与范围E:E
相交的所有单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim AffectedRange As Range
Set AffectedRange = Intersect(Target, Me.Range("E:E"))
If Not AffectedRange Is Nothing Then
Dim Cell As Range
For Each Cell in AffectedRange
' here you can handle each cell that has changed in E:E
Next Cell
End If
End Sub
主题外注释:
如果您使用Application.EnableEvents = False
,请确保在发生错误时重新打开事件!否则,您的事件将在整个Excel中关闭,直到您关闭它。