【问题标题】:How do I update the date in a cell ONLY if a certain cell is modified仅当某个单元格被修改时,如何更新单元格中的日期
【发布时间】:2016-11-22 02:10:19
【问题描述】:

我现在已经设置好了,所以当单元格数据发生变化时,它会更新日期。刷新工作簿时,它也会更新日期,即使我没有修改单元格内容。

如果我修改单元格内容,我只想更新日期。我正在从 CSV 文件中提取数据,因此我必须时不时地刷新。我该如何解决这个问题,以便它只显示单元格真正修改的日期?

我现在有这样设置的公共功能,但它不起作用。

Public Function worksheetChange(ByVal Target As Range)

If Not Application.Intersect(Target, [D4]) Is Nothing Then [L4] = Date

End Function

即使我刷新工作表并且我没有修改单元格,它仍然会更新日期,我该如何解决这个问题?

编辑:我想出了这种类型的 VBA 代码,但我不确定如何让它工作。

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, [D4]) Is Nothing Then
If Not ActiveWorkbook.RefreshAll Then [L4] = Date

End Sub

事后看来,这段代码意味着如果应用程序不相交,则采用 D4,如果工作簿未刷新,则将 L4 更新为今天的日期。

谢谢。

【问题讨论】:

  • 刷新工作表时会不会重新计算[D4],虽然新值等于旧值?
  • 我会这样认为,刷新时它会从 csv 文件中提取数据。我只希望只有在单元格内容发生变化时才更改日期(即香蕉到橙色,而不是香蕉到香蕉)我已经更新了我的代码以了解我想要实现的目标。
  • 如何通过将旧值保存在某处(例如在另一个隐藏的工作表中)并测试该值是否已更改来进行一些编程解决方案?
  • 如果我找不到解决方案,我想我将不得不求助于它,不过谢谢。

标签: excel vba date excel-formula formula


【解决方案1】:

请参考link

Dim oldValue

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
  oldValue = Target.Worksheet.Range("D4").Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("D4")) Is Nothing Then
      If oldValue <> Target.Worksheet.Range("D4").Value Then
        Target.Worksheet.Range("L4").Value = Date
      End If
    End If
End Sub

【讨论】:

  • 即使单元格包含与刷新时相同的值,它仍会更新日期。我只想在单元格更改内容时更新日期;在刷新相同值的数据时试图规避日期更新。
  • 它有效,谢谢!现在来了解如何将它作为一个函数,因为我想将它分布在多个单元格范围内。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 2019-06-12
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多