返回列表 上一主題 發帖

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

回復 3# t8899


   
您的方式應該會佔資源.....??
我是要知道timestock 是否正在跑 ?

是這樣嗎?
  1. Sub timestock()
  2.     Application.DisplayStatusBar = True
  3.     Application.StatusBar = "timestock 正在跑 "
  4.     '你的程式碼
  5.     '你的程式碼
  6.     '你的程式碼
  7.     '你的程式碼
  8.     '你的程式碼
  9.     '你的程式碼
  10.     Application.StatusBar = "timestock 跑完了"
  11. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# t8899


   
if ..timestock 正在跑  then............  語法????

5#bobomi 建議   module 丟入一個 Public 變數名
timestock 正在跑時可執行一個副程式  ->   if 變數名=true  then ....
但你可能會說 "您的方式應該會佔資源.....??" 所以我 @-+/*
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2014-10-18 07:18 編輯

回復 13# t8899
試試看
  1. Option Explicit
  2. Dim The_Time As Date '這模組的私用變數
  3. Sub timestock()
  4.     Dim my As Date
  5.     If The_Time > Time Then
  6.        Exit Sub
  7.         '預防 上一次 OnTime尚未執行,再度執行一次OnTime
  8.     End If
  9.     Application.StatusBar = "執行 timestock  中..."
  10.     my = #12:01:00 AM#
  11.     The_Time = Time + my
  12.     Application.OnTime The_Time, "timestock"
  13.     Application.StatusBar = "下次執行 timestock  時間" & The_Time
  14. End Sub
  15. Sub ASTOP()
  16.     If The_Time < Time Then
  17.         MsgBox "沒有 OnTime 程序 ", , "提示訊息"
  18.     Else
  19.         Application.OnTime The_Time, "timestock", Schedule:=False
  20.         MsgBox The_Time & " 的 OnTime 程序 已停止", , "提示訊息"
  21.         Application.StatusBar = False
  22.         The_Time = 0
  23.     End If
  24. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 19# t8899
   
my = #12:01:00 AM#
是不是這問題 ??上午跑沒問題,下午循還2-3次會跳出??

鐵定不是,要附檔看看或是完整程式碼
  1. Sub Ex()
  2.     Dim A As Double
  3.     A = #12:01:00 AM#
  4.     MsgBox A = 60 / 86400
  5. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

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

回復 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

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

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

TOP

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

TOP

        靜思自在 : 得理要饒人,理直要氣和。
返回列表 上一主題