我有一小段代码监视“Y”列中的单元格以进行更改,如果有更改,则代码的主要位运行。
是否可以像往常一样运行代码除了添加新行时? (即如果用户右键单击左侧的行号并单击“插入” - 我不希望代码在用户眼中运行,在Y列的单元格中没有添加任何内容。
以下是代码:
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("Y2:Y5000"), Target) Is Nothing Then
Call Reminder
End If
End Sub
如果您需要查看更多代码,请说明。
由于
答案 0 :(得分:2)
您无法阻止事件正在运行,但您可以忽略插入整行的情况。
Sub Worksheet_Change(ByVal Target As Range)
If Target.Columns.Count < Me.Columns.Count Then
' Your existing code here
End If
End Sub
答案 1 :(得分:0)
这是一个可能的解决方案。它基于捕获范围的先前状态,因此如果添加新行,则过去与现在的范围不同。不是我已经完成的最新代码,但是你会得到这个想法并且知道如何调整它。请记住将其存储在工作表对象中:
'use global to store the address of current range
Dim myRange As Range
Private Sub Worksheet_Activate()
'have to initialize the global before first usage
Set myRange = Range("Y2:Y5000")
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tempRange As Range
Set tempRange = Range("Y2:Y5000")
'compare the range addresses, if don't match (won't match when adding a row or column because the myRange address has changed)
If Not Intersect(tempRange, Target) Is Nothing And myRange.Address = tempRange.Address Then
Call Reminder
End If
'reset the range of global
Set myRange = tempRange
End Sub