我需要 VBA 代码来当在前一列“K”的单元格中输入“是”文本时,自动在位于“L”列的单元格中输入时间戳。
时间戳应采用格式MM-DD-YYYY
,并且除非从前一个单元格中删除单词“YES”,否则不应更改。
答案1
此 VBA(宏)代码将帮助您实现目标。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Target
If Intersect(Range("K:K"), r) Is Nothing Then Exit Sub
If r.Value = "" Then r.Offset(0, 1) = ""
If r.Value <> "YES" And r.Value <> "Yes" And r.Value <> "yes" Then Exit Sub
Application.EnableEvents = False
If r.Value = "YES" Or r.Value = "Yes" Or r.Value = "yes" Then
r.Offset(0, 1) = Now()
r.Offset(0, 1).NumberFormat = "mm-dd-yyyy, hh:mm:ss"
End If
Application.EnableEvents = True
End Sub
怎么运行的:
- 右键单击工作表标签或按 Alt+F11。
- 这将打开 VB 编辑器窗口, 复制和粘贴本守则 标准模块。
編輯:
- 此代码将检查所有三种可能格式的标准,大写,
句子大小写以及小写,在更新相邻单元格之前
时间戳。 - 同时删除时间戳如果且当标准被删除时,则从相邻单元格中删除。
注意:
- 只要你输入标准是的或者
是的甚至是的在 的任何单元格中
Column K
,此代码将写入Timestamp
中的相邻单元格Column L
。 - 在此代码中,K 列及其相邻列是可编辑的。
答案2
制作与 Rajesh S 相同东西的另一种方法,但略有不同。
将代码粘贴到要使用的表中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Range
If Target.Count < 1000 Then
Application.ScreenUpdating = False
For Each x In Target
If Not Intersect(Range("K:K"), x) Is Nothing Then
If UCase(x.Value) = "YES" Then
x.Offset(0, 1) = Now()
x.Offset(0, 1).NumberFormat = "mm-dd-yyyy"
Else
x.Offset(0, 1).Value = ""
End If
End If
Next x
Application.ScreenUpdating = True
End If
End Sub