有没有一种方法可以根据来自另一个单元格的活动为一个单元格加上时间戳?

时间:2019-07-11 15:26:11

标签: excel vba

我目前正在为我的团队创建一个计分卡。我已指示用户使用下拉菜单(包括他们的姓名)或在他们查看项目时在G列中键入他们的姓名来插入他们的姓名。

 Option Explicit

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim rng1 As Range
 Set rng1 = Intersect(Range("G:G"), Target)
 If rng1 Is Nothing Then Exit Sub
 Application.EnableEvents = False
 rng1.Offset(0, 1).Value = Now() & " - " & Environ("username")
 Application.EnableEvents = True
 If Intersect(Range("G:G"), Target) = "" Then rng1.Offset(0, 1).ClearContents
 End Sub

目前: H列同一行上的工作表时间戳记G列中的所有单个操作(包括删除名称和更改名称)。如果用户自动填写运行时错误,则会弹出“ 13”。

我想做什么: -用户在G列中填写其姓名时,H列中的时间戳记 -如果用户自动填充,则也会在H列的同一行中生成时间戳记 -如果清除了G列中的单元格,则时间戳记也会被清除。

2 个答案:

答案 0 :(得分:0)

不确定自动填充的含义,但是如果更改了多个单元格,则可以遍历“目标”以避免错误。

然后只检查更改后的单元格是否为空,如果是,则清除H。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng1 As Range, r As Range

Set rng1 = Intersect(Range("G:G"), Target)

If rng1 Is Nothing Then Exit Sub

Application.EnableEvents = False

For Each r In rng1
    If r.Value = vbNullString Then
        r.Offset(0, 1).ClearContents
    Else
        r.Offset(0, 1).Value = Now() & " - " & Environ("username")
    End If
    'for fans of brevity, replace the If clause with below
    'r.Offset(0, 1).Value = IIf(r.Value = vbNullString, vbNullString, Now() & " - " & Environ("username"))
Next r

Application.EnableEvents = True

End Sub

答案 1 :(得分:0)

仅作说明:当您将字符串(您的时间戳)分配给一个包含多个单元格的范围时,或者当您要求excel比较多单元格范围时,将生成类型不匹配(运行时错误13)字符串(在您的情况下为“”)。用户自动填充时,会选择多个单元格,并且会遇到错误。使用给定的SJR代码,您可以保存。