返回列表 上一主題 發帖

計時功能??

計時功能??

請問該怎麼以VBA用鍵盤做計時功能?? 謝謝~~
比如按ALT開始計時, 再按一次ALT就把該經過的時間記錄在儲存格上(可能會很多次), 所以不能覆蓋....
初學者color

回復 1# color790

使用組合鍵Alt+z
  1. Public x As Long, s As Double
  2. Sub auto_open()
  3. Application.OnKey "%z", "Ex"
  4. End Sub
  5. Sub Ex()
  6. If x = 0 Then s = Timer
  7. If x Mod 2 = 0 Then Cells(Rows.Count, 1).End(xlUp).Offset(1) = (Timer - s) / 86400: s = Timer
  8. If x Mod 2 = 1 Then Cells(Rows.Count, 1).End(xlUp).Offset(1) = (Timer - s) / 86400: s = Timer
  9. x = x + 1
  10. End Sub
複製代碼
計時.rar (8.06 KB)
學海無涯_不恥下問

TOP

HI~版主, 問題比較多,不好意思, 可否麻煩版主幫我解釋一下....謝謝~^^
1. 為什麼要設 Public x As Long, s As Double,  X是指什麼??
2. 為什麼要求X的餘數為零或為1 ??
3. 為什麼Timer - s 還要再除86400, 然後後面還有個 :是什麼意思
初學者color

TOP

回復 3# color790


1. 為什麼要設 Public x As Long, s As Double,  X是指什麼??
設計2個全域變數,s是記住此次執行時的時間,x是記錄此程序被執行幾次
2. 為什麼要求X的餘數為零或為1 ??
這個問題多謝你提醒,可以不須求得餘數,但是紀錄是否為第一次執行是必須的
改成
  1. Sub Ex()
  2. If x = 0 Then s = Timer
  3. Cells(Rows.Count, 1).End(xlUp).Offset(1) = (Timer - s) / 86400: s = Timer
  4. x = x + 1
  5. End Sub
複製代碼
即可
3. 為什麼Timer - s 還要再除86400, 然後後面還有個 :是什麼意思
Timer是傳回從午夜零時起算至此的秒數,傳回的是Single,因為一天24小時轉成數值時為1,除以86400(一天為86400秒)是為了轉成秒
學海無涯_不恥下問

TOP

多謝版主的超快速回答....
初學者color

TOP

        靜思自在 : 謊言像一朵盛開的鮮花,外表美麗,生命短暫。
返回列表 上一主題