跟踪Excel工作表更改

时间:2012-10-28 14:41:08

标签: excel-vba excel-2003 vba excel

我想知道是否有人可以帮助我。

我正在使用下面的代码跟踪对Excel工作表的更改,当B5:Q2000范围内的任何单元格的值自动将日期插入“A”列并将单词“否”插入“AE”列时改变了。

Option Explicit
    Public preValue As Variant
    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Cell As Range, res As Variant
      If Target.Cells.Count > 1 Then Exit Sub
       On Error Resume Next
       If Not Intersect(Target, Range("B5:Q2000")) Is Nothing Then
       If Target.Value <> preValue And Target.Value <> "" Then
            Application.EnableEvents = False
            Range("A5:A" & Target.Row).Value = Date
            Range("AE5:AE" & Target.Row).Value = "No"
            Application.EnableEvents = True
            Target.ClearComments
          '  Target.AddComment.Text Text:="Previous Value was " & preValue & Chr(10) & "Revised " & Format(Date, "dd-mm-yyyy") & Chr(10) & "By " & Environ("UserName")
            Target.Interior.ColorIndex = 35
        End If
    End If
    On Error GoTo 0

    End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = 1 Then preValue = Target.Value
End Sub

不幸的是,我遇到了一个我不确定如何解决的问题。

如果用户将数据插入单元格D5和D10,则日期和单词“否”将添加到这两行的正确列(A和AE)中。

然而,遗憾的是,即使用户没有在这些行上输入任何其他数据,“No”值和日期也会添加到这些列之间,即D6-D9之间的行,而且我不确定问题所在。

我只是想知道是否有人可以看一下这个并就如何解决这个问题提供一些指导。

非常感谢和亲切的问候

1 个答案:

答案 0 :(得分:0)

您当前的代码正在应用从A5AE5Target's行开始的更改。要使代码仅更改所选单元格的行,请更改此:

Range("A5:A" & Target.Row).Value = Date
Range("AE5:AE" & Target.Row).Value = "No"

到此:

Range("A" & Target.Row).Value = Date
Range("AE" & Target.Row).Value = "No"

此外,您似乎没有使用变量Cellres。您可能希望删除该行代码。