返回列表 上一主題 發帖

[發問] 如何判斷 Application.OnTime 是否在執行??

回復  t8899
   
鐵定不是,要附檔看看或是完整程式碼
GBKEE 發表於 2014-10-21 15:28

附檔 Book2.zip (9.55 KB)

TOP

回復 21# t8899
修改一下
  1. Option Explicit
  2. Public The_Time As Date
  3. Public my As Date
  4. Sub timestock()
  5.     If CDec(The_Time) > CDec(Time) Then    '預防 上一次 OnTime尚未執行,再度執行一次OnTime
  6.       '************************
  7.       '當 my <= #12:00:05 AM# 時
  8.       'If The_Time > Time Then 這條件式常會成立
  9.       '是由於 The_Time As Date型態範圍小
  10.       
  11.       'CDec(The_Time) 傳回 Decimal 資料型態
  12.       'Decimal 資料型態
  13.       'Decimal 變數係以 96 位元 ( 12 個位元組 ) 有正負號的整數形式來儲存。10 的指數以小數點右邊的位元數來調整,範圍從 0 到 28。在沒有小數位數的情形下,最大的可能值為 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 個小數位置的情形下,最大值為 +/-7.9228162514264337593543950335,而最小的非零值為 +/-0.0000000000000000000000000001。
  14.       '附註 此時,Decimal 資料型態只能在 Variant中使用
  15.       '也就是,您並不能宣告一變數為 Decimal 的型態。不過您可用 Cdec 函數,建立一個副型態為 Decimal 的 Variant。
  16.       '************************
  17.         Debug.Print CDec(The_Time), CDec(Time)
  18.         Exit Sub        
  19.     End If
  20.     With Sheets("sheet1").Range("a1")
  21.         If .Value = 1 Then
  22.             my = #12:01:00 AM#
  23.         ElseIf .Value = 2 Then
  24.             my = #12:02:00 AM#
  25.         ElseIf .Value = 3 Then
  26.             my = #12:00:30 AM#
  27.         ElseIf .Value = 4 Then
  28.             my = #12:00:20 AM#
  29.         ElseIf .Value = 5 Then
  30.             my = #12:00:05 AM#
  31.         ElseIf .Value = 6 Then
  32.             my = #12:00:10 AM#
  33.         Else
  34.             Exit Sub
  35.         End If
  36.     End With
  37.     The_Time = Time + my
  38.     Debug.Print The_Time
  39.     Application.OnTime The_Time, "timestock"
  40. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  t8899
修改一下
GBKEE 發表於 2014-10-21 16:50


測試沒問題了,謝謝
30秒用那個較省資源?
#12:00:30 AM#
TimeSerial(0, 0, 30)
DateAdd("s", 30, Time)

TOP

回復  t8899
修改一下
GBKEE 發表於 2014-10-21 16:50

抱歉,測久一點還是有問題
大約5分30秒 就出錯了
附檔 Book2.zip (11.28 KB)

TOP

回復 24# t8899
測試20分鐘沒出錯
   
  1. Option Explicit
  2. Public The_Time As Date
  3. Public my As Date
  4. Sub timestock()
  5. If CDec(The_Time) > CDec(Time) Then    '預防 上一次 OnTime尚未執行,再度執行一次OnTime
  6.     Range("C65536").End(xlUp).Offset(1) = Time '**** OnTime尚未執行時,再度執行一次OnTime
  7.     Exit Sub
  8. End If
  9.     If Sheets("sheet1").Range("a1").Value = 1 Then my = #12:01:00 AM#
  10.     If Sheets("sheet1").Range("a1").Value = 2 Then my = #12:02:00 AM#
  11.     If Sheets("sheet1").Range("a1").Value = 3 Then my = #12:00:30 AM#
  12.     If Sheets("sheet1").Range("a1").Value = 4 Then my = #12:00:20 AM#
  13.     If Sheets("sheet1").Range("a1").Value = 5 Then my = #12:00:05 AM#
  14.     If Sheets("sheet1").Range("a1").Value = 6 Then my = #12:00:10 AM#
  15.     Range("a65536").End(xlUp).Offset(1) = Time   '**** 執行的OnTime
  16.     The_Time = Time + my
  17.     Application.OnTime The_Time, "timestock"
  18.     Range("b65536").End(xlUp).Offset(1) = The_Time '**** 執行下一次OnTime
  19.     MsgBoxTest 0, "test", "提示訊息", vbSystemModal, 0, 1000
  20. End Sub
複製代碼

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  t8899
測試20分鐘沒出錯
GBKEE 發表於 2014-10-22 05:00

下午才會發生這種錯誤
您是剛測試的嗎?現在早上5:10
麻煩您在控制台把時間改為14:00 再試試
試後再調回來
我是這樣試出來的

TOP

本帖最後由 GBKEE 於 2014-10-22 16:04 編輯

回復 26# t8899
請在改一下試試看
  1. If TimeValue(The_Time) > Time Then
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  t8899
請在改一下試試看
GBKEE 發表於 2014-10-22 09:50


測試20分鐘,沒什問題
1.TimeValue(The_Time) 跟 The_Time 傳回都是+30秒的值有何不一樣?,格式也沒什麼不同?
2.光用 The_Time 為何到下午就會發生錯誤???

TOP

回復 28# t8899
要研究一下
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 靜坐常恩己過、閒談莫論人非。
返回列表 上一主題