将新行添加到表中时运行代码EXCEPT

时间:2014-06-23 09:49:32

标签: excel vba excel-vba excel-2010

我有一小段代码监视“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

如果您需要查看更多代码,请说明。

由于

2 个答案:

答案 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