如何判断用户是否删除或插入行 – Excel VBA

我处于一种Worksheet表上的列需要跟踪另一个Worksheet上的行的情况。 所以,如果用户删除一个列(他们必须被允许执行),我需要删除另一个工作表中的相应行。 这工作正常,下面的代码完成任务。

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Target.EntireRow.Address Then Debug.Print Target.Address Sheet2.Range("A1").Offset(, Target.Row - 1).EntireColumn.Delete End If End Sub 

但是,当用户插入一行时,会运行相同的代码,事实上,在这种情况下,我需要向Sheet2添加一行。 如何判断用户是否在插入或删除行动时?

既然我不能把它作为一个评论,我相信这已经在这里回答了

基本上,您可以定义一个范围名称,然后在Worksheet_Change上调用该范围名称。 根据范围是否已经移动以及哪个方向,您应该能够确定列是否已被添加或删除,然后相应地进行处理。

Brettdj的代码从上面链接的post(对于行,但很容易改变列):

您可以定义一个范围名称,例如RowMarker =$A$1000

 Private Sub Worksheet_Change(ByVal Target As Range) Static lngRow As Long Dim rng1 As Range Set rng1 = ThisWorkbook.Names("RowMarker").RefersToRange If lngRow = 0 Then lngRow = rng1.Row Exit Sub End If If rng1.Row = lngRow Then Exit Sub If rng1.Row < lngRow Then MsgBox lngRow - rng1.Row & " rows removed" Else MsgBox rng1.Row - lngRow & " rows added" End If lngRow = rng1.Row End Sub