2016-06-13 61 views
0

我處於一個Worksheet需要使用另一個Worksheet上的行跟蹤的情況。所以,如果用戶刪除了一個列(他們必須被允許執行),我需要刪除另一個工作表中的相應行。這工作正常,下面的代碼完成任務。如何判斷用戶是否正在刪除或插入行 - Excel VBA

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此相同的代碼運行。如何判斷用戶在進行行操作時是插入還是刪除?

+0

[這裏](HTTP:// stackoverflow.com/questions/12064439/vba-worksheet-change-detecting-actual-cell-change)是一個鏈接,討論如何分辨實際發生的變化。主要觀點是改變事件並沒有跟蹤改變了它的變化,所以接受的答案是保留一張鏡像表來比較以反映變化。 – gtwebb

回答

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 
+0

太棒了,你發佈的鏈接對我的情況非常有效 – corbfon

相關問題