台灣最大程式設計社群網站
線上人數
1037
 
會員總數:244538
討論主題:188695
歡迎您免費加入會員
討論區列表 >> office VBA / WinOS >> excel vba的倒時計時器,請幫我解釋一下書上的範例
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
excel vba的倒時計時器,請幫我解釋一下書上的範例
價值 : 50 QP  點閱數:316 回應數:9

樓主

小粽子
門外漢
0 4
121 7
發送站內信

各位好:書上(excel vba 實戰技巧精粹)有一個倒數計時器的範例
Option Explicit
Private theTime As Date
Private Const SpecialDate As Date = #1/1/2020#
Private Const SpecialTime As Date = #12:00:00 PM#
Sub StartTimer()
Call TImeOn
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime theTime, "Timeon", , False
End Sub
Sub TImeOn()
Dim d As Integer
Dim nowTime As Date
nowTime = Now()
If nowTime >= SpecialDate + SpecialTime Then
工作表1.Range("A1:A2").Value = 0
MsgBox "倒數計時時間已到", vbExclamation
Exit Sub
End If
If TimeValue(nowTime) > SpecialTime Then d = 1
With 工作表1.Range("A1")
.NumberFormat = "0"
.Value = SpecialDate - Date - d
End With
With 工作表1.Range("A2")
.NumberFormat = "hh:mm:ss"
.Value = SpecialTime - TimeValue(nowTime) + d * 86400
End With
theTime = nowTime + TimeValue("0:0:1")
Application.OnTime theTime, "TimeOn"
End Sub

請問.Value = SpecialTime - TimeValue(nowTime) + d * 86400 這段在說什麼?(因為.Value = SpecialTime - TimeValue(nowTime) 會出現奇怪的負值,所以小弟看不懂這段為什麼能將秒數正確的算出來),請各位大神幫我解釋一下,謝謝!




搜尋相關Tags的文章: [ excel vba ] , [ 倒數計時器 ] , [ 時間函數 ] ,
本篇文章發表於2019-01-15 06:11
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

P陳
檢舉此回應
SpecialTime - TimeValue(nowTime) 當然出現負數 比如 10:30:10(記錄的時間) - 10:30:20(現在時間) (-10 秒 沒錯)
每天有86400 秒 24*60*60= 86400 秒
本篇文章回覆於2019-01-15 11:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

小粽子
檢舉此回應
SpecialTime - TimeValue(nowTime)出現的負數都是-0.25632154855類似這樣的數字,所以怎麼可以拿來加86400秒,這是我不懂的地方。
本篇文章回覆於2019-01-15 14:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
還以為是對 (負數) 疑問
少一對 ()
(SpecialTime - TimeValue(nowTime) + d) * 86400 <---應該是這樣才對

如果相差 1天 SpecialTime - TimeValue(nowTime) =1 *86400= 86400
如果相差 1小時 SpecialTime - TimeValue(nowTime) =0.041667 * 86400= 3600
-0.25632154855 時差約6小時9分鐘06秒
本篇文章回覆於2019-01-15 14:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

P陳
檢舉此回應
差一天 = 1
差1/24天=1小時= 0.041667=3600秒
本篇文章回覆於2019-01-15 14:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

小粽子
檢舉此回應
不需要再加一個括號也是我認為很奇怪的地方(加了括號反而不能正常執行,這裡我剛才試過)。因為據我的認知,excel運算子的優先順序是乘法符號高於加減符號的,但是我真的是用這個範例做出倒數計時器,所以,這個算式才會很奇怪,我真的有把以上的程式拿去excel的模組中運作,真的是正常的…@@。
本篇文章回覆於2019-01-15 18:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

小粽子
檢舉此回應
本篇文章回覆於2019-01-15 19:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

P陳
檢舉此回應
瞭解了
1.因為 停止日期在 2020/1/1 12:00:00 現在日期在 2019/1/15 所以 d =0 *86400 還是=0
所以 【+ d * 86400】 可以忽略不計,我們只看前面的算式即可
我的電腦是 24 小時的,您的如果是 12 小時的,請改成24小時的。(不然可能會有負值)

2.先在A3 打入 = A2*86400 並改格式成為數值
A2 的格式設成 hh:mm:ss

3. 在A2上打入 .5 .25 0.041667 後 A2 A3 出現的值
.5(半天) = 12:00:00 43200(秒)
.25(1/4天) = 06:00:00 21600(秒)
0.041667(1小時) = 01:00:00 3600(秒)

除非要知道間隔的總秒數才要 * 86400

結論:我們都被騙了
另您的 office 是那個版本,我要這樣才能執行。 我的是 office 365


本篇文章回覆於2019-01-15 19:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

P陳
檢舉此回應
沒錯您要是下午跑就是 負數 上午跑就會是正數了 (請改電腦成24小時制的)
本篇文章回覆於2019-01-15 19:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

P陳
檢舉此回應
A1 是指 到 2020/1/1 還有350天

本篇文章回覆於2019-01-15 19:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.