Excel OnChange事件

我想更新一个单元格的date时间,当一个值input到另一个如此,

如何将B列的值更改为将值input到A时的date时间?

有没有像if-then-else?

我尝试了条件格式,但没有成功。

有人可以发表一个工作的例子吗?

谢谢

尝试使用

=IF(A3<>"",IF(B3="",NOW(),B3),"") 

这些值将在A列和B列的时间戳中。另外,您必须在选项中启用迭代计算。

请注意,这只会在列A中首次input一个值时生成一个时间戳。要按照您的方式使用它,而不是通常编辑单元格的值,则必须将其删除并重新input一个新的值。

我担心这只是一个解决方法,而不是一个完整的解决scheme。 如果我find更方便的东西,我会更新它。

这里是另一个事件过程,它处理用户一次更新多个单元的情况(即粘贴一个单元块)。

在使用Worksheet_Change事件过程时,必须先closures事件处理,并确保它始终在最后被重新打开。

请注意,我故意省略了时间戳的格式,因为前面的例子是从date中删除的。 如果该列尚未格式化,而且需要格式化,则build议您添加一行代码以设置.NumberFormat属性。

 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Column = 1 Then Target.Resize(ColumnSize:=1).Offset(ColumnOffset:=1).Value = Now End If Application.EnableEvents = True End Sub 

跟踪列A中的变化的情况是容易的; 当用户粘贴单元格块时,其他列可能会有点棘手。 例如,如果要捕获对D列的更改,则代码需要处理在单元格C2:D2被粘贴时的情况,在这种情况下, Target.Column = 3.(使用Intersect方法或查看Target.Columns.Count属性。

你可以自己尝试一下,不是吗?
在我看来,最难的部分是想想Change事件。

 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub Application.EnableEvents = False ActiveSheet.Cells(Target.Row, 2).Value = Format(Now, "h:mm") Application.EnableEvents = True End Sub 

您可以将Format内容更改为任何您需要的内容。

 Private Sub Worksheet_Change(ByVal Target As Excel.Range) 'when entering data in a cell in Col A On Error GoTo enditall Application.EnableEvents = False If Target.Cells.Column = 1 Then n = Target.Row If Me.Range("A" & n).Value <> "" Then Me.Range("B" & n).Value = Format(Now, "hh:mm:ss") End If End If enditall: Application.EnableEvents = True End Sub 

如何使用?

  1. 右键单击工作表选项卡和“查看代码”。

  2. 将代码粘贴到该表单模块中。

  3. Alt + q返回到Excel窗口。

点击这里查看示例文件…

公式= NOW()是可变的,这意味着只要工作簿中的任何内容都被更改,就会重新计算,所以如果使用它,那么应该没有问题。

另外,还可以通过在代码中添加Application.Volitile来创buildvolitile的UDF。