Board logo

標題: 計時功能?? [打印本頁]

作者: color790    時間: 2012-1-12 17:29     標題: 計時功能??

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

回復 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
複製代碼
[attach]9202[/attach]
作者: color790    時間: 2012-1-12 22:17

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

回復 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秒)是為了轉成秒
作者: color790    時間: 2012-1-12 23:40

多謝版主的超快速回答....




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)