使用VBA根据以前的时间戳将时间戳更改为PM



我正在创建一个时间表,用于跟踪一天中进行的项目。我有两列,一列显示项目开始的时间,另一列显示它何时结束。第一列很容易,因为它从上一个项目的结束时间自动填充;然而,我想让进入结束时间变得既快又容易。如果没有特别键入PM,Excel会自动默认为AM,所以我想对工作表进行编码,这样,如果在项目结束时间中输入的时间小于项目开始时间,它就会自动添加12小时,使其成为PM。我不想使用军事时间,因为我正在努力让办公室里的每个人都能轻松使用。我也从来没有想过它会在午夜后使用,所以这不应该是一个复杂的问题。这是我想出的代码,但它给了我一个";所需对象";错误

Sub AM2PM((

If Not Intersect(Target, Range("J6:J50")) Is Nothing Then
If Target = Range("J6:J50") Then

If Target.Value < Target.Offset(0, -1).Value Then

Target.Value = Target.Value + 0.5

End If
End If
End If

结束子

如果我的代码完全偏离基准,请原谅;我大约两周前才开始学习VBA,而且只是在"需要"的基础上。

根本不清楚您在用"Range("J6:J50"("做什么但是你不需要吗

If Target.Address  = "$j$6:$J$50" ?

我觉得这会有所帮助:

Dim zCell As Range
For Each zCell In Target
If zCell.Value < zCell.Offset(0, -1).Value Then
zCell.Value = zCell.Value + 0.5
End If
Next zCell

我有几行额外的代码来防止意外的结果和错误,但对于任何感兴趣的人来说,这是我最终得到的代码。

Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("$e$6:$e$50"), Target) Is Nothing Then Exit Sub
On Error GoTo EndSub:
If Range(Target.Address).Value = 0 Then Exit Sub
If Range(Target.Address).Value < Range(Target.Address).Offset(0, -1).Value Then
Range(Target.Address).Value = Range(Target.Address).Value + 0.5
End If
EndSub:
End Sub

最新更新