爲了找到輸入的新值和舊值之間的差異,例如在「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