我目前正在为我的团队创建一个计分卡。我已指示用户使用下拉菜单(包括他们的姓名)或在他们查看项目时在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列中的单元格,则时间戳记也会被清除。
答案 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代码,您可以保存。