【问题标题】:How to return a timestamp when a specific value is entered into a specific cell将特定值输入特定单元格时如何返回时间戳
【发布时间】:2019-02-17 18:05:52
【问题描述】:

我正在 Excel 中创建一个报表样式的工作表,并尝试在单元格“I6”的值为“已完成”时自动在单元格“P4”中输入时间戳

我尝试使用 =IF 公式,该公式有效,但我无法在此工作表将处理的机器上切换迭代计算。

我对编写自己的 VBA 还很陌生,但在让我当前的代码工作时遇到了一些麻烦。以下是我目前拥有的,没有给我任何结果。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As String
    Set r = Cells("I6")
    If r.Value Is Nothing Then Exit Sub
    If r.Value <> "Completed" Then Exit Sub
    If r.Offset(-2, 7).Value <> "" Then Exit Sub
    Application.EnableEvents = False
        r.Offset(-2, 7) = Now()
    Application.EnableEvents = True
    End If
End Sub

一旦将值“已完成”输入到单元格“I6”中,我希望代码在单元格“P4”中为我提供当前时间戳,但没有显示任何内容。我将如何更正它以获得基于值的时间戳?

【问题讨论】:

  • 这个运行没有错误吗?您应该将r 声明为一个范围:Dim r as Range,然后是Set r = Range("I6")。这样r.Value 就会触发。 AFAIK 你不能使用String.Value 属性...我认为不存在这样的属性。
  • 这一行不正确 If r.Value Is Nothing Then Exit Sub .... 如果 r Is Nothing Then Exit Sub 但应该总是有一个 Range("I6")... . 您应该在该行上收到一条错误消息 Set r = Cells("I6")...as Cells("I6") is wrong syntax.

标签: excel vba timestamp


【解决方案1】:

由于在每个单元格更改时都会调用此子程序(您以后也可以将其用于其他单元格检查),如果“您的”单元格受到影响,请先通过Intersect 进行检查。

更改后的范围以Target 给出(可能是单个单元格或完整范围,例如当您粘贴时)。如果它与你的监控单元 I6 相交,你可以去......

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim RelevantArea As Range

    Set RelevantArea = Intersect(Target, Me.Range("I6"))
    If Not RelevantArea Is Nothing Then
        If Target.Value = "Completed" Then
            Application.EnableEvents = False
            Me.Range("P4").Value = Now()
            Application.EnableEvents = True
        End If
    End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多