我有一个有趣的问题要问你。我在 [日期和时间] 列中有一个公式
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