如何logging在Excel中编辑单元格的时间花费

我正在做一个excel文件,在我的翻译课上使用。我没有编程技能。 我需要你们对学术的支持。 在这个Excel中,我想测量我的学生花了多less时间来编辑一个单元格。 事实上,我发现了一个公式,我可以logging句子编辑的时间:

Private Sub Worksheet_Change(ByVal Target As Range) 'Update 20140722 Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Integer Set WorkRng = Intersect(Application.ActiveSheet.Range("C:C"), Target) xOffsetColumn = 1 If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then Rng.Offset(0, xOffsetColumn).Value = Now Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss" Else Rng.Offset(0, xOffsetColumn).ClearContents End If Next Application.EnableEvents = True End If End Sub 

现在我想find在单元格中input单元格以编辑单元格和完成编辑之间的区别。

非常感谢!

略有不同的方法。 创build一个新的工作表,说EditLog以便它最初看起来像这样:

在这里输入图像说明

然后,在任何要logging时间的表格中,input以下代码:

 Private Sub Worksheet_Activate() Dim R As Range Set R = Sheets("EditLog").Cells(Rows.Count, 1).End(xlUp) R.Offset(1, 0).Value = Selection.Parent.Name R.Offset(1, 1).Value = Selection.Address R.Offset(1, 2).Value = Now End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim R As Range Set R = Sheets("EditLog").Cells(Rows.Count, 1).End(xlUp) R.Offset(1, 0).Value = Target.Parent.Name R.Offset(1, 1).Value = Target.Address R.Offset(1, 2).Value = Now End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Range, seconds As Long Set R = Sheets("EditLog").Cells(Rows.Count, 1).End(xlUp) R.Offset(0, 3).Value = Now seconds = DateDiff("s", R.Offset(0, 2).Value, R.Offset(0, 3).Value) R.Offset(0, 4).Value = seconds End Sub 

然后,当你编辑一张纸(在我的实验中,我编辑了纸张1)之后, EditLog看起来像这样:

在这里输入图像说明

我这样做,以便激活单元格时,第一次激活logging为input。 这是为了防止如果用户开始编辑单元格而不先切换到单元格,则不会发生同步。 但是 – 作为一个神器它会导致一些空行,如果第一个单元格没有改变它。

编辑以避免使用辅助单元

在OP的问题细化之后编辑

这应该做的

 Dim startTime As Single Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Cells(Target.row, 1) = Timer - startTime Application.EnableEvents = true End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) startTime = Timer End Sub 

被放置在相关的工作表窗格代码中

当用户select一个新的单元格时,这个代码存储Timerfunction值

然后,一旦用户离开单元更改其内容,它就会将已用时间写入已编辑单元行的第一列

你可能想要适应它,只有当某个单元格正在编辑时才能进行定时器pipe理