如何更新单元格时自动填充用户名和更新时间?

假设我有一张4列的表格,如下所示:

value1 | value2 | updated by | update time abc | | Employee1 | 18/12/2014 18:13 | xyz | Employee2 | 18/12/2014 18:13 

如果Value1或Value2中的任何单元格已经更新,我希望列“更新”和“更新时间”自动更新。

更新的列取取更改的用户的名称,可以是Windows用户名或Excel用户名。

列更新时间占用任何单元格value1或value2已更新的时间。

我没有VBA的知识; 有没有办法如何实现这个结果? 我一直在线search,我发现如何通过VBA过程填充更新时间列,但结果并不完全符合预期,并且无法find如何更新“更新者”列。

我在网上find的VBA代码来填充时间如下:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2:A100")) Is Nothing Then Target(1, 4) = Now Target(1, 4).EntireColumn.AutoFit End If End Sub 

来源: http : //www.ozgrid.com/forum/showthread.php?t = 24219

以下是针对您的问题的可能的VBA解决scheme:

 Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Or Target.Column = 2 Then ThisRow = Target.Row If (ThisRow = 1) Then Exit Sub ' time stamp corresponding to cell's last update Range("D" & ThisRow).Value = Now ' Windows level UserName | Application level UserName Range("C" & ThisRow).Value = Environ("username") & "|" & Application.UserName Range("C:D").EntireColumn.AutoFit End If End Sub 

为了保护标题行免受更改,您可以添加如下所示的代码片段:

  Private Sub Worksheet_Change(ByVal Target As Excel.Range) ThisRow = Target.Row 'protect Header row from any changes If (ThisRow = 1) Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True MsgBox "Header Row is Protected." Exit Sub End If If Target.Column = 1 Or Target.Column = 2 Then ' time stamp corresponding to cell's last update Range("D" & ThisRow).Value = Now ' Windows level UserName | Application level UserName Range("C" & ThisRow).Value = Environ("username") & "|" & Application.UserName Range("C:D").EntireColumn.AutoFit End If End Sub 

希望这会有所帮助。 最好的祝福,

对于你可以使用的Windows用户名

 ActiveCell.Value = Environ("username") 

什么没有为时间戳工作?

私人小组Worksheet_Change(BYVAL目标作为范围)

 If Not Intersect(Target, Range("A:B")) Is Nothing Then Cells(Target.Row, 3) = Now 'Current time Cells(Target.Row, 4) = Application.UserName 'Excel User Name Cells(Target.Row, 5) = Environ("UserName") 'Windows User Name Range("C:E").EntireColumn.AutoFit End If 

结束小组