0

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

我正在使用下面的代码来跟踪对 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)中。

然而,不幸的是,即使用户没有在这些行上输入任何其他数据,我也不确定在这些行中添加了“否”值和日期,即 D6-D9 之间的行问题出在哪里。

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

非常感谢和亲切的问候

4

1 回答 1

0

您当前的代码正在应用从行开始A5AE5通过Target'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"

此外,您似乎没有使用变量Cellor res。您可能想要删除该行代码。

于 2012-10-28T15:45:02.037 回答