为了找到输入的新值和旧值之间的差异,例如在“D1”(在单元格更改事件中)并将其显示为单元格“E1”,通用解决方案显示在以下代码片段中(请参见列表1):
清单1
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 4 And Target.Row = 1 Then
'new val
newVal = Range("D1").Value
Application.EnableEvents = False
Application.Undo
'old val
oldVal = Range("D1").Value
Range("D1").Value = newVal
'diff between new and old val
Range("E1").Value = newVal - oldVal
Application.EnableEvents = True
End If
End Sub
相关于您的特定情况下,在任一细胞 “A1” 或 “B1”,(假定时间通过按下组合CTRL+SHIFT+:
输入(或刚键入)的修改后的代码片段如清单2所示。
清单2
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Row = 1 And (Target.Column = 1 Or Target.Column = 2) Then
'new val
a1 = Range("A1").Value
b1 = Range("B1").Value
newVal = Range("D1").Value
'disable events and undo
Application.EnableEvents = False
Application.Undo
'old val
oldVal = Range("D1").Value
'diff between new and old val
diff = newVal - oldVal
Range("A1").Value = a1
Range("B1").Value = b1
Range("E1").Value = diff
're-enable events
Application.EnableEvents = True
End If
End Sub
在一个单独的说明,如果你使用一个公式像分钟的差异您的工作表计算可以简化:在一个单元格中输入=MOD(B1-A1,1)*1440
(例如“D1”)而不是使用该对(“C1”和“D1”)。另外,整个计算只能在VBA模块中执行,根据“A1”和“B1”中的条目更新“E1”值(在这种情况下不需要“C1”和“D1”)。
希望这会有所帮助。最好的问候,
新的价值在哪里?在下一行(D2)? – Mureinik
新值将在E1上,其中包含从D1的新值中减去D1的旧值。 – Serendipitepic
对不起,我还没有关注。 “D1的新价值”是什么意思? D1如何拥有多个价值? – Mureinik