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

时间:2016-06-13 16:57:08

标签: excel vba

我处于一个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

但是,当用户插入行时,同样的代码会运行,而实际上我需要在这种情况下向export default React.createClass({ renderList(nodes) { const list = []; for (const k in nodes){ let val = nodes[k]; let children = val.children; let content = val.content; list.push(<li key={k} id={k} content={content} />); } return list; } render() { let nodes = JSON.parse(this.props.nodes) return ( <ol> { this.renderList(nodes) } </ol> ); } }); 添加一行。如何在行采取行动时判断用户是在插入还是删除?

1 个答案:

答案 0 :(得分:3)

由于我无法将其添加为评论,我相信这是already answered here

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

来自上面链接帖子的Brettdj代码(对于行,但很容易对列进行更改):

您可以定义范围名称,例如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