【问题标题】:Is there a way to timestamp a cell based on activity from another cell?有没有办法根据另一个单元格的活动给一个单元格加上时间戳?
【发布时间】:2019-07-11 15:26:11
【问题描述】:

我目前正在为我的团队创建记分卡。我已指示用户在查看项目时使用包含他们姓名的下拉菜单或在 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 列中的单元格被清除,时间戳也会被清除。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

    【讨论】:

    • 感谢您的解释。这很有意义。
    【解决方案2】:

    不确定您所说的自动填充是什么意思,但如果更改的单元格不止一个,您可以循环遍历“目标”以避免错误。

    然后只检查更改的单元格是否为空,如果是,则清除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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多