2016-02-24 166 views
0

由於我需要記錄我的工作時間爲項目的原因,我正在嘗試配置一個宏。由於我對VBA相當陌生,因此我仍然遇到了代碼公式和時間格式方面的困難。隨着時間的推移

Here is how the sheet looks like

當按下「到達」或「出發」這只是Range("C7/C9") = Now

(這是單獨的單元格,因爲我希望能夠以手動覆蓋)

當按下「 LOG」這是它背後的代碼:

'FORMAT 
Range("12:12").Insert 
Range("C7").Copy 
Range("C12:I12").PasteSpecial 
Range("C12:I12").ClearContents 

'DATE 
Range("C7").Copy 
Range("C12").PasteSpecial 
Range("C12").NumberFormat = "m/d/yyyy" 

'ARRIVAL 
Range("C7").Copy 
Range("D12").PasteSpecial 
Range("D12").NumberFormat = "[$-F400]h:mm:ss AM/PM" 

'DEPARTURE 
Range("C9").Copy 
Range("E12").PasteSpecial 
Range("E12").NumberFormat = "[$-F400]h:mm:ss AM/PM" 

'CALCULATE 
Range("E12").Copy 
Range("F12").PasteSpecial 
Range("F12") = Range("E12").Value - Range("D12").Value 

Range("C12:I12").Font.Size = 12 

我想要什麼現在在G列中,我一直在處理的項目的時間少於03:30h,而在H列中,我一直在處理項目的時間超過了03:30h。

理想情況下,這將#分鐘,甚至合併在一列(+/-),所以我可以很容易地計算總數。

感謝您關注此事!

回答

0

我已經更新了一下你的代碼,並且包含了一些註釋來解釋原因。我已經添加了2個公式,可以將您的總時間轉換爲分鐘數,並計算出需求的差異。希望這可以幫助。

Sub LogTime() 

Range("12:12").Insert 
Range("C7").Copy 
'Pastes just the format from C7 
Range("C12:I12").PasteSpecial (xlPasteFormats) 
'Set as Today's Date 
Range("C12").Value = Date 
'Arrival 
Range("D12").Value = Range("C7").Value 
Range("D12").NumberFormat = "[$-F400]h:mm:ss AM/PM" 
'Departure 
Range("E12").Value = Range("C9").Value 
Range("E12").NumberFormat = "[$-F400]h:mm:ss AM/PM" 
'Calculate Total with Formula 
Range("F12").Value = "=" & Range("E12").Address(0, 0) & "-" & Range("D12").Address(0, 0) 
Range("C12:I12").Font.Size = 12 
'Convert Time To Minues: (HOUR(F12)*60)+MINUTE(F12)+ROUND((SECOND(F12)/60),0) 
'< Formula: In Minutes; if Total Time is => 3:30 return 210 and Total Time if < 3:30 return Total Time 
Range("G12").Value = "=IF(((HOUR(F12)*60)+MINUTE(F12)+ROUND((SECOND(F12)/60),0))>=210,210,(HOUR(F12)*60)+MINUTE(F12)+ROUND((SECOND(F12)/60),0))" 
Range("G12").NumberFormat = "General" 
'< Formula: In Minutes; if Total Time is <= 3:30 return 0 and if Total Time > 3:30 return total time - 3:30 
Range("H12").Value = "=IF(((HOUR(F12)*60)+MINUTE(F12)+ROUND((SECOND(F12)/60),0))<=210,0,((HOUR(F12)*60)+MINUTE(F12)+ROUND((SECOND(F12)/60),0)-210))" 
Range("H12").NumberFormat = "General" 

End Sub 
相關問題