Excel OnChange事件

时间:2011-12-13 19:00:45

标签: excel

我希望在将值输入另一个值的时候用日期时间更新单元格,

如何在将值输入A时将B列的值更改为日期时间?

是否有类似if-then-else的东西?

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

有人可以发一个有效的例子吗?

谢谢

5 个答案:

答案 0 :(得分:2)

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

使用Worksheet_Change事件过程时,必须在开始时关闭事件处理,并确保它最终会重新打开。

请注意,我故意省略了时间戳的格式,因为前面的例子已经删除了日期。如果列尚未格式化并且您需要对其进行格式化,我建议您添加一行代码来设置.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财产。

答案 1 :(得分:1)

你可以自己试试这个,不是吗? 在我看来,最难的部分是考虑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内容更改为您需要的内容。

答案 2 :(得分:1)

尝试使用

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

值将在A列中,时间戳在B列中。此外,您还必须在选项中启用迭代计算。

请注意,只有在A列中首次输入值时才会生成时间戳。要使用此方法,而不是通常编辑单元格的值,您必须删除它并重新输入输入新值。

我担心这只是一种解决方法,而不是一个完整的解决方案。我会更新这个,以防我找到更方便的东西。

答案 3 :(得分:1)

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窗口。

  4. Click here获取示例文件...

答案 4 :(得分:0)

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

单独注意,您只需在代码中添加Application.Volitile即可创建具有volitile的UDF。