Microsoft Excel 计算错误的时间和日期

Microsoft Excel 计算错误的时间和日期

我有一个有趣的问题要问你。我在 [日期和时间] 列中有一个公式

IF([@Courier]<>"",IF([@[日期和时间]]="",NOW(),[@[日期和时间]]),"")

这个公式的想法是输入 [Courier] 填充的日期和时间。

然而,偶尔(并非总是如此),我会获得过去的日期和时间,这通常不会立即发生。

例如现在,[日期和时间] 中的一个单元格显示“1/0/1900 0:00”,接下来的 4 个单元格显示“4/16/2019 12:10”,比 [Courier] 中输入的信息早 2 小时

我知道这是一个循环引用,所以我将迭代计算设置为 1

答案1

迭代计算可能会很混乱,并且并不总是按照您期望的方式进行。

使用 VBA 事件触发宏会更加强大。

下面的宏会复制您的公式,如果您清除 的内容,它也会清除时间Courier。当您将内容输入 时,它将输入时间Courier

Courier请注意,从公式可以看出,如果将 的内容从更改a为,则不会改变时间b(这可以通过一些额外的代码来实现)

该代码假设

  • 工作表上只有一个表格。如果有更多,则需要更改代码
  • Courier是个第一的该表的列
  • Date and Time直接邻近的Courier(即表格的第二列)

要输入此事件触发的宏,请右键单击工作表选项卡。从右键单击下拉菜单中选择“查看代码”。然后将下面的代码粘贴到打开的窗口中。

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LO As ListObject
    Dim R As Range, C As Range
Set LO = ListObjects(1)

Set R = Intersect(Target, LO.DataBodyRange.Columns(1))
If Not R Is Nothing Then
    Application.EnableEvents = False
    For Each C In R
        Select Case C.Value
            Case ""
                C.ClearContents
                C.Offset(0, 1).ClearContents
            Case Else
                Select Case C.Offset(0, 1)
                    Case ""
                        C.Offset(0, 1) = Date + Time
                End Select
        End Select
    Next C
    Application.EnableEvents = True
End If

End Sub

相关内容