Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 更改事件时将时间戳应用于动态行_Excel_Vba - Fatal编程技术网

Excel 更改事件时将时间戳应用于动态行

Excel 更改事件时将时间戳应用于动态行,excel,vba,Excel,Vba,目标: 我希望根据更改事件将日期/时间戳放在更改行中最后一列之外的一列中。选定单元格时的值将与不再是目标单元格时的值进行比较 当前代码: 在Sheet1视图代码中 问题: 尝试运行此代码后,我无法获得任何输出。我使用MsgBox“Now:”&Now()进行了测试,它确实显示更改事件代码位于正确的位置(我对此进行了注释,但这是我检查应该显示的内容的方式) 我认为,通过在If语句之外定义I、j和k,我可以保存这些值,并将选择的值与未选择时的值进行比较 问题: 我设置此代码的方式是否不合适?如果是,我

目标:

我希望根据更改事件将日期/时间戳放在更改行中最后一列之外的一列中。选定单元格时的值将与不再是目标单元格时的值进行比较

当前代码:

在Sheet1视图代码中

问题:

尝试运行此代码后,我无法获得任何输出。我使用MsgBox“Now:”&Now()进行了测试,它确实显示更改事件代码位于正确的位置(我对此进行了注释,但这是我检查应该显示的内容的方式)

我认为,通过在If语句之外定义I、j和k,我可以保存这些值,并将选择的值与未选择时的值进行比较

问题:

我设置此代码的方式是否不合适?如果是,我将如何更正此设置以使其更合适?这是我第一次处理更改事件


编辑1:为目标添加更多细节,根据您想要的评论考虑@ScottCraner的评论:

Private Sub Worksheet_Change(ByVal Target As Range)

'MsgBox "Now: " & Now()

Dim i As Long

Dim LC As Long

i = Target.Row
LC = Cells(i, Columns.Count).End(xlToLeft).Column

Application.EnableEvents = False
Cells(i, LC + 1).Formula = Format(Now(), "yyyyMMddhhmmss")
Application.EnableEvents = True

End Sub

根据您的评论,您需要:

Private Sub Worksheet_Change(ByVal Target As Range)

'MsgBox "Now: " & Now()

Dim i As Long

Dim LC As Long

i = Target.Row
LC = Cells(i, Columns.Count).End(xlToLeft).Column

Application.EnableEvents = False
Cells(i, LC + 1).Formula = Format(Now(), "yyyyMMddhhmmss")
Application.EnableEvents = True

End Sub

这就是你要找的吗

Private Sub Worksheet_Change(ByVal Target As Range)

Dim LC As Long

Application.EnableEvents = False

LC = Cells(Target.Row, Columns.Count).End(xlToLeft).Column
Cells(Target.Row, LC + 1).Formula = Format(Now(), "yyyyMMddhhmmss")

Application.EnableEvents = True

End Sub

这就是你要找的吗

Private Sub Worksheet_Change(ByVal Target As Range)

Dim LC As Long

Application.EnableEvents = False

LC = Cells(Target.Row, Columns.Count).End(xlToLeft).Column
Cells(Target.Row, LC + 1).Formula = Format(Now(), "yyyyMMddhhmmss")

Application.EnableEvents = True

End Sub


您正在测试目标单元格或更改的单元格是否与其中的值不相等。这将始终返回false,因为目标单元格将始终与目标单元格值相等。请注意,一旦确定实际要测试的内容,在进行更改之前,您需要将其放入
应用程序中。EnableEvents=false
s和
application.EnableEvents=True
之后,它不会进入一个循环,该循环将用日期填充行,直到列用完为止。@ScottCraner对此表示感谢。我甚至没有想过在那里关闭事件(我真傻)。我希望确保在退出该单元格时,我最初选择的单元格仍然是相同的,假设我使用向下箭头并跨越某些单元格。除非单元格值更改而非选择,否则不会触发工作表更改事件。更改后,范围变量目标具有已更改单元格的所有属性,包括Its新值不是旧值。旧值已不复存在。@ScottCraner…再次感谢你。我觉得这些是我到目前为止读到的东西,我应该知道的,但这正是我需要听到的,这样我才能学会继续使用这些值。@Cyril根据你编辑的帖子,你希望现在修改单元格的先前值,然后compare 2?您正在测试目标单元格或更改的单元格是否与其中的值不相等。这将始终返回false,因为目标单元格将始终与目标单元格值相等。请注意,一旦确定实际要测试的内容,您将需要在进行更改并
application.EnableEvents=True
,这样它就不会进入一个循环,在列用完之前用日期填充行。@ScottCraner谢谢你。我甚至没有想过在那里关闭事件(我真傻)。我希望确保在退出该单元格时,我最初选择的单元格仍然是相同的,假设我使用向下箭头并跨越某些单元格。除非单元格值更改而非选择,否则不会触发工作表更改事件。更改后,范围变量目标具有已更改单元格的所有属性,包括Its新值不是旧值。旧值已不复存在。@ScottCraner…再次感谢你。我觉得这些是我到目前为止读到的东西,我应该知道的,但这正是我需要听到的,这样我才能学会继续使用这些值。@Cyril根据你编辑的帖子,你希望现在修改单元格的先前值,然后compare the 2?以56秒+1击败我。你可以摆脱
i
,也谢谢你跟我一起完成这件事。我似乎错过了改变事件是如何触发的。非常感谢。将给@ShaiRado a+1,这样他就可以从他的时间里得到一些东西,就像你们两个镜像的一样!@ShaiRado是的,但是我。键入额外的我比键入
Target.Row
少了两次。按照这种逻辑,一个人也可以不用LC来做。@ScottCraner你说得对。我通常会保留它,我喜欢更短更可读的代码行,比我快56秒,+1。你也可以去掉
i
,谢谢你一直关注我。我似乎错过了更改事件是如何触发的标记。非常感谢。将给@ShaiRado a+1,这样他就可以从他的时间里得到一些东西,就像你们两个镜像一样!@ShaiRado是的,但是meh。键入额外的i比键入
Target.Row
两次要少。按照这种逻辑,一个人也可以不用LC来完成它。@ScottCraner你说得对。我通常会保留它,我喜欢更短、可读性更强的代码行