当在前一个单元格中选择“是”时,单元格中的 Excel VBA 时间戳

当在前一个单元格中选择“是”时,单元格中的 Excel VBA 时间戳

我需要 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

相关内容