在下面的代码中,我在名为“chrono”的一系列单元格上捕获双击事件。如果目标单元格包含值,则将其与应用于右侧下一个单元格的公式中已包含的值连接。我想获得像=0,1+0,1
这样的东西,但是单元格仍然是空的。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
Dim rng As Range
Set rng = Range("chrono")
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, rng) Is Nothing Then
Application.EnableEvents = False
Cancel = True 'stop the edit mode
With Target
If .Value = "" Then
.Value = Time
Else:
Dim nextCell As Range
Set nextCell = ActiveCell.Offset(0, 1)
If nextCell.Formula = "" Then
nextCell.Formula = "=" & ((Time - .Value) * 24 * 60 * 60)
Else:
nextCell.Formula = nextCell.Formula & "+" & ((Time - .Value) * 24 * 60 * 60)
End If
.Value = ""
End If
End With
End If
Application.EnableEvents = True
End Sub
我很抱歉不清楚,我的英语不太好。我想计算两次双击之间的经过时间(因此没有现有数据)。我能够完成这项任务:
nextCell.Value = Time - .Value
此外,我可以将多个输入相加:
If nextCell.Value = "" Then
nextCell.Value = Time - .Value
Else:
nextCell.Value = nextCell.Value + Time - .Value
问题是每个新输入都会超过nextCell.Value
,而我想跟踪每一个输入。我试图在第一个代码示例中使用公式(=t1+t2
),但双击不会产生任何结果。
我正在尝试制作秒表。我的目标是计算在任务上花费的时间。为了使事情更加清晰,这就是我正在尝试做的,一步一步:
答案 0 :(得分:2)
我终于发现问题来自我正在使用的特定语言。我只是将Formula
替换为FormulaLocal
,现在它可以了!作为额外的,(Time - .Value) * 1
允许将经过的时间转换为相应的十进制值。非常感谢大家:)
答案 1 :(得分:1)
Excel中的日期在内部存储为自19/1/19以来的天数
因此1天= 1.
因此1小时= 1/24
所以要以十进制秒为单位,将其乘以24 * 60 * 60
编辑:
当您引用单元格的值时,我会引用nextCell.Value
而不是nextCell.Formula
,例如nextCell.Formula = nextCell.Formula & "+" & (Time - .Value)
答案 2 :(得分:1)
仍然很难理解你所追求的是什么,但这是一次尝试......
以下版本设置基准时间,每次双击都会显示自那时起的累积时间。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
Dim rng As Range
Set rng = Range("chrono")
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, rng) Is Nothing Then
Application.EnableEvents = False
Cancel = True 'stop the edit mode
With Target
Dim nextCell As Range
Set nextCell = ActiveCell.Offset(0, 1)
If .Value = "" Then
nextCell.Formula = ""
.Value = Time
Else:
If nextCell.Formula = "" Then
nextCell.Formula = "=" & Round((Time - .Value) * 24 * 60 * 60, 2)
Else:
nextCell.Formula = nextCell.Formula & "+" & _
Round(((Time - .Value) * 24 * 60 * 60) - nextCell.Value, 2)
End If
' .Value = "" 'this commented line can be deleted - we'll use the base time
End If
End With
End If
Application.EnableEvents = True
End Sub
设置基准时间后,它不会改变。然后nextCell公式只是附加增量时差
恩。 = 2 + 4 + 1 + 0 + 7
每个值都是自上次双击以来的秒数。