【问题标题】:Excel VBA - Record when change in a cell occurredExcel VBA - 记录单元格中发生更改的时间
【发布时间】:2021-05-14 12:11:55
【问题描述】:

我不是 VBA 方面的专家,我的所有代码都是在互联网上“找到”、修改并用于我的目的,所以这就是我在这里苦苦挣扎的原因。

我有一个非常具体(但简单)的工具,当扫描不正确的条形码时(B 列),我需要记录实际时间(在 V 列中)。

此工具将扫描的条形码与预期数据进行比较 - 发生错误时, 它说明了什么样的错误 - 这是通过查询(加载预期数据)和公式(比较扫描与预期)完成的。

重点:

在名为“扫描”的工作表中,用户正在扫描 B 列中的条形码。 C 列给出“OK”或错误信息。 如果 B 单元格为空,则 U 列保持为空,“OK”时为 0,错误时为 1。

我的目标:

当 U 列中的数字 1 出现时 - 我需要将发生的实际时间写入同一行的 V 列。

我尝试了很多代码都没有运气。 我的最后一个(非工作)是:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, ThisWorkbook.Worksheet("Scan").Range("U3:U1050")) Is Nothing Then
    Target.Range(.Row, 22) = Now()
End If

End Sub

【问题讨论】:

  • Range(Target.Row, 22) = Now().
  • 那应该是Cells,而不是Range
  • 是的,细胞工作,但仍然没有给我日期或现在()。

标签: excel vba record intersect


【解决方案1】:

我想只有当 U 列显示 1 时才需要日期。在所有其他情况下,V 列应该为空。除 U 列中的更改外,应忽略任何更改。
但由于 U 列包含引用 B 列的公式,因此如果 B 列发生更改,则应激活该过程。试试:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 2 Then
    With Target.EntireRow
      If .Cells(21).Value = 1 Then
        .Cells(22).Value = Now()
      Else
        .Cells(22).Value = Empty
      End If
    End With
  End If
End Sub

【讨论】:

  • 对于代码或手动输入效果很好,但不适用于公式。我有一个公式,这些列将对用户隐藏 - 他们将只能编辑 B 列。感谢您的帮助。
  • 我已经更新了代码。现在它在 B 列中查找更改。您尝试过吗?
  • 您好,刚刚试过。仍然忽略公式输出的变化。
  • 似乎您的代码应该进行一些修改。所以我试图修改它(在测试表中)首先将公式的值放到下一个单元格然后比较,它甚至不复制/粘贴它:.Cells(3) = Cells(2).Value
  • U列的公式是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
相关资源
最近更新 更多