0

我正在尝试为对表中所有行所做的任何修改添加时间戳。我已经能够找到/修改一些将添加时间戳的代码,但它会为该列中的每个单元格执行此操作。如您所见,它有一条线告诉它从某一行以下开始。我想让这仅适用于我的 excel 文件中每个工作表中的表格。这将包括添加到工作表中的任何新表格。我对 VBA 很陌生,所以欢迎任何和所有建设性的帮助!

一点背景知识:这些工作表用于我公司进行的每个不同项目的资源预测。每个项目中的每个工作人员都有自己的桌子。预测每周都会更新。我希望能够在周末收到这些内容时快速找到发生了什么变化。这并不是为了满足我们的预测需求的永久解决方案,但同时它会让我的生活更轻松。

这是我一直在使用的代码。正如我所提到的,我知道这只是我想要的一部分。我试图修改它来做我想做的事,但我还不知道怎么做:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Range, c As Range
Const DateStampColumn As Long = 2    
'Date stamp column number

For Each r In Target.Rows
    If r.Row > 10 Then
        For Each c In r.Cells
            If Not IsEmpty(c) Then
                Application.EnableEvents = False
                Cells(r.Row, DateStampColumn).Value = Date
                Application.EnableEvents = True
                Exit For
            End If
        Next c
    End If
  Next r
End Sub
4

2 回答 2

1

我能够修改它来做我需要的事情。我删除了消息框行,因为我认为这会使输入数据的用户感到沮丧(我是必须提取数据的人)。有一个问题希望你能帮我解决。每当我在表中添加或删除一行时,都会出现时间戳。有没有办法防止这种情况发生?这是我的代码目前的样子:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim t As ListObject

For Each t In ActiveSheet.ListObjects
    If Not Intersect(Target, t.DataBodyRange) Is Nothing Then

         Application.EnableEvents = False
         Cells(Target.Row, "B").Value = Date
         Application.EnableEvents = True

        Exit Sub
    End If
Next t

End Sub
于 2018-07-20T14:45:53.223 回答
0

我认为你需要这些方面的东西。这会检查目标是否在表格中,我没有添加日期,因为我不确定它应该放在哪里。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim t As ListObject

For Each t In ActiveSheet.ListObjects
    If Not Intersect(Target, t.DataBodyRange) Is Nothing Then
        MsgBox "Cell changed in " & t.Name
        Exit Sub
    End If
Next t

MsgBox "Cell changed not in any table"

End Sub
于 2018-07-20T14:09:45.917 回答