A1 =时间开始使用cntrl + shift +,显示凌晨4:00
B1 =时间结束时使用cntrl + shift +显示上午8:00
C1 =使用= MOD(B1-A1,1)之间的时间,显示4:00:00
D1 =使用= C1 * 1440将单元C1转换为分钟的时间,其显示240分钟
E1 = D1新值 - D1旧值(例如:如果旧值为240,新值为360,则360-240 = 120。)
大胆是我想要的,我只能希望你们能理解我想要完成的事情。如果需要,我会尽量让自己更清楚。提前谢谢!
答案 0 :(得分:1)
为了找到输入的旧值和旧值之间的差异,例如,在“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”)。
希望这会有所帮助。最好的问候,