假设我有一张包含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知识;有没有办法如何实现这个结果?我一直在网上搜索,我发现如何通过VBA程序填充更新时间列,但结果并不完全符合预期,并且无法找到如何填充更新的列。
我在网上找到的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
答案 0 :(得分:1)
以下是您的问题可能的VBA解决方案:
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
为了保护Header Row免受更改,您可以添加如下所示的代码段:
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
希望这会有所帮助。最好的问候,
答案 1 :(得分:0)
对于Windows用户名,您可以使用
ActiveCell.Value = Environ("username")
什么没有用于时间戳?
答案 2 :(得分:0)
Private Sub Worksheet_Change(ByVal Target As Range)
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
End Sub