在更改事件

时间:2017-03-10 18:55:31

标签: excel-vba vba excel

目标:

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

当前代码:

在Sheet1查看代码

Private Sub Worksheet_Change(ByVal Target As Range)

'MsgBox "Now: " & Now()

Dim i, j As Integer
Dim k As String
Dim LC As Long

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

If Not Cells(i, j).Value = k Then
    Cells(i, LC + 1).Formula = Format(Now(), "yyyyMMddhhmmss")
End If

End Sub

问题:

尝试运行此代码后,我无法获得任何输出。我使用MsgBox“Now:”& now()进行测试,它确实向我显示更改事件代码位于正确的位置(我评论了这一点,但这是我如何检查应该有什么出现了。

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

问题:

我设置此代码的方式是否不恰当,如果是这样,我该如何更正更合适?这是我第一次参加变革活动。

Edit1:考虑@ScottCraner的评论

,为目标添加更多细节

2 个答案:

答案 0 :(得分:3)

根据您的意见,您想要:

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

答案 1 :(得分:2)

这是你在找什么?

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