Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Count > 1 Then Exit Sub
If Intersect(Union([B:B], [C:C]), .Cells) Is Nothing Then Exit Sub
Application.EnableEvents = False
.Offset(0, 2).Value = Now()
Range("F" & .Row) = "=IF(COUNT(RC4:RC5)=2,INT((RC5-RC4)*24*60),"""")"
Application.EnableEvents = True
End With
End Sub
回復 6#ML089
謝謝大大的指導!!
尤其是用
Range("F" & .Row) = "=IF(COUNT(RC4:RC5)=2,INT((RC5-RC4)*24*60),"""")"
的使用, 可以簡化不少 If A and B then ... 的寫法, 非常實用, 收下, 謝謝作者: yen956 時間: 2016-1-9 14:15
回復 12#man65boy
試試看:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lst As Integer, r As Integer, Rng As Range
Lst = [A65536].End(xlUp).Row '取得 欄A 最下面非空白格的列號
Set Rng = [B2].Resize(Lst - 1, 4) '設定Worksheet_Change觸動範圍為[B2:Dxx], xx=Lst(列號)
If Target.Count > 2 Then Exit Sub '如果一次改變多格則沒作用
If Intersect(Target, Rng) Is Nothing Then Exit Sub '如果改變的儲存格不在預計範圍內則沒作用
r = Target.Row
'如果改變的儲存格是 B欄 或 C欄, 則
If Target.Column = 2 Or Target.Column = 3 Then
'★如果 Target 為空白, 則
If Target = "" Then
Target.Offset(0, 2) = "" '清除同列右邊兩欄的Cell
Target.Offset(0, 2).Interior.ColorIndex = 35 '並反白
Target.Cells(r, 6) = "" '並清除同列的[Fxx]
'★否則
Else
'如果同列右邊兩欄的Cell為空白, 則填入現在時間, 不是空白, 則不填
If Target.Offset(0, 2) = "" Then
Target.Offset(0, 2) = Now '填入現在時間
Target.Offset(0, 2).Interior.ColorIndex = xlNone '且取消反白
End If
End If
End If
'如果 起始時間 及 結束時間 不是空白, 則在 [Fxx] 計算時差(以分鐘為單位)
If Application.Count(Cells(r, 4), Cells(r, 5)) = 2 Then
Cells(r, 6) = Int((Cells(r, 5) - Cells(r, 4)) * 24 * 60)
End If
End Sub作者: man65boy 時間: 2016-1-11 18:26