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
如何使用?
-
右键单击工作表选项卡和“查看代码”。
-
将代码粘贴到该表单模块中。
-
Alt + q返回到Excel窗口。
点击这里查看示例文件…
公式= NOW()是可变的,这意味着只要工作簿中的任何内容都被更改,就会重新计算,所以如果使用它,那么应该没有问题。
另外,还可以通过在代码中添加Application.Volitile
来创buildvolitile的UDF。