我希望只有在第一列更改时,我的Excel电子表格列B才会标记日期时间。我看过很多VBA代码,但它捕获了最后一个更改,而不是第一个更改。
我试着用这个:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Offset(0, 1).Value = "" Then
Target.Offset(0, 1) = Format(Now(), "HH:MM:SS")
End If
End Sub
除非我复制并粘贴到3行,否则日期时间戳仅显示3条记录中的第一条。
答案 0 :(得分:0)
下面的代码适用于我
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target.Column = 1 And Target.Offset(0, 1).Value = "" Then
Target.Offset(0, 1) = Format(Now(), "HH:MM:SS")
End If
Application.EnableEvents = True
End Sub
答案 1 :(得分:-1)
尝试从此行粘贴到A列的多个单元格时收到错误消息:
Target.Offset(0, 1).Value = ""
这是因为Offset是一个多个单元格的范围,我们无法将此范围的Value
与单个值进行比较。
您可以查看Target.Rows.Count
。如果这大于1,那么您可以遍历Target
范围,每次检查相邻单元格是否为空,然后再将值输入Offset(0, 1)
。
以下循环遍历Target
单元格,即使Target是单个单元格也能正常工作:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
If Target.Column = 1 Then
Application.EnableEvents = False
For Each rng In Target
If rng.Offset(0, 1).Value = "" Then
rng.Offset(0, 1) = Format(Now(), "HH:MM:SS")
End If
Next rng
Application.EnableEvents = True
End If
End Sub
您还应该检查Target
是否超出了单个列。如果是这样,那么可能您只想将标记输入B列(对于A栏中的更改)。