Excel OnChange事件

Excel OnChange事件,excel,Excel,我想用一个值输入到另一个值的日期时间更新一个单元格,所以 如何将B列的值更改为向a输入值时的日期时间 有没有类似的东西,如果还有其他的 我尝试了条件格式,但没有成功 有人能帮我举个例子吗 谢谢你你可以自己试一下,是吗? 在我看来,最难的部分是思考更改事件 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub Applic

我想用一个值输入到另一个值的日期时间更新一个单元格,所以

如何将B列的值更改为向a输入值时的日期时间

有没有类似的东西,如果还有其他的

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

有人能帮我举个例子吗


谢谢你

你可以自己试一下,是吗?
在我看来,最难的部分是思考
更改
事件

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
您可以将
格式更改为所需的任何内容。

尝试使用

=IF(A3<>"",IF(B3="",NOW(),B3),"")
=IF(A3“”,IF(B3=“”,NOW(),B3),“”)
值将在A列中,时间戳将在B列中。此外,您必须在选项中启用迭代计算

请注意,只有在a列中首次输入值时,此操作才会生成时间戳。要使用此操作,您需要删除它并重新输入一个新值,而不是按照您希望的方式来编辑单元格的值

我担心这只是一个变通办法,不是一个完整的解决方案。如果我发现更方便,我会更新它。

公式=NOW()是volitile,这意味着它将在工作簿中的任何内容发生更改时重新计算,因此如果您使用它,应该不会有问题

另一方面,只需在代码中添加
Application.volitile
,您就可以创建可自定义的自定义项。

Private子工作表\u Change(ByVal目标为Excel.Range)
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
'在列a的单元格中输入数据时 关于错误转到enditall Application.EnableEvents=False 如果Target.Cells.Column=1,则 n=目标行 如果Me.Range(“A”&n).Value”则 Me.Range(“B”&n).Value=格式(现在是“hh:mm:ss”) 如果结束 如果结束 enditall: Application.EnableEvents=True 端接头
如何使用

  • 右键单击“图纸”选项卡和“查看代码”

  • 将代码粘贴到该工作表模块中

  • Alt+q返回Excel窗口


  • 对于示例文件…

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

    使用
    工作表\u 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
    属性。

    您好,是的,我当然可以,我做了10年的程序员,但我真的不知道如何使用excel,实际上我也不是数学方面最棒的:)我甚至不知道我要在哪里添加此代码,但我会尝试一下。谢谢:)对不起,我可能误解了你的标题。。。我显示的是一个,您需要将此代码添加到工作表中:右键单击选项卡,然后单击编辑代码,然后从我的答案中复制粘贴代码(也可以查看我评论中的上面链接)+1-但建议您在交叉测试后将EnableEvents=False移到第3行:)谢谢ronin,我一定会这样做:)这会起作用,但每次重新计算公式时可能都会重新计算(例如,打开时…)-我必须检查一下这一点,因为您似乎对编辑历史感兴趣,请尝试多单元格更新+1点,这一点经常被忽略。
    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