如何记录在Excel中删除事件

我有一个情况我需要知道,如果手动删除了在我spreadsheet.How任何行执行我可以记录这个事件的VBA。

--------------解决方案-------------

Private Sub Worksheet_Change(ByVal Target As Range)
'UsedRange works fine provided there is always something in Row1
'Declare varY from a Module and set from Workbook_Open or Sheet.Activate,
'or undo first sheet change, but set variable

If Target.Columns.Count = 16384 Then
Select Case Sheet1.UsedRange.Rows.Count
Case Is > Sheet1.Range("" & varY & "").Rows.Count
MsgBox "insert row"
Sheet2.Rows(Target.Rows.Address).Insert Shift:=xlDown, _
CopyOrigin:=xlFormatFromLeftOrAbove
Case Is < Sheet1.Range("" & varY & "").Rows.Count
MsgBox "delete row"
Sheet2.Rows(Target.Rows.Address).Delete Shift:=xlUp
End Select
Else: Sheet2.Range(Target.Address).Value = Target.Value
End If
varY = Sheet1.UsedRange.Address
End Sub

Excel不会提供一个很好的方式,以确定是否行或列已被删除。 你可以做到这一点的方法之一是使用定义的名称和计算活动。 如果你关心第1000行,如名称单元格A1001为“rngLastRow”。 然后使用此代码工作表的计算事件

Private Sub Worksheet_Calculate()

If Me.Range("rngLastRow").Row < 1001 Then
MsgBox "Row deleted"
End If

End Sub

它不会告诉你哪一行被删除了,所以你需要一些不同的东西,如果你需要知道。

如果你想简单地阻止人们删除行,你可以在一个隐藏的列中使用数组公式。 同样,假设你的应用程序使用的第1000行,选择A1:A1000(或其他一些空列),然后键入= 1,并承诺与控制+ Enter键。 这将创建在A1的数组:A1000。 当用户试图删除一行,他们将得到无益的消息“您不能更改数组的一部分。”,但他们将无法删除行。

你总是可以这样做:

Public lngPreviousRow As Long
Public lngCurrentRow As Long

Private Sub Worksheet_Calculate()
lngCurrentRow = Me.Range("rngLastRow").Row

If lngCurrentRow < lngPreviousRow Then
MsgBox "Row deleted"
End If

lngPreviousRow = lngCurrentRow
End Sub

只要你设置lngPreviousRow到intially(Workbook_Open如),它会一直检测到行删除,不管任何行插入等。

分类:高强 时间:2015-03-15 人气:2
本文关键词: Excel中,VBA
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.204 (s). 10 q(s)