返回列表 上一主題 發帖

[發問] 如何讓計時器馬上中斷跳出??

[發問] 如何讓計時器馬上中斷跳出??

本帖最後由 t8899 於 2014-1-18 13:36 編輯

在執行馬上中斷跳出 (exit sub)
Application.OnTime Now + TimeValue("00:02:00"), "BBB"
Application.OnTime Time + #12:02:00 AM#, "bbb"

計時器.rar (9.76 KB)
初新者~指教囉~

TOP

本帖最後由 GBKEE 於 2014-1-19 16:13 編輯

回復 2# wl02353427
  1. Option Explicit
  2. Dim Msg As Boolean
  3. Sub startTimer()
  4.     Msg = False
  5.     Application.OnTime Now + TimeValue("00:00:01"), "Increment_count"
  6. End Sub

  7. Sub Increment_count()
  8.     If Msg Then Exit Sub
  9.     hiji = Now()
  10.     Range("A1") = hiji
  11.     'Range("A3").Value = Range("A3")+1 '計數器
  12.     startTimer
  13. End Sub
  14. Sub stopTimer()
  15.     Msg = True
  16.     'Application.OnTime Now + TimeValue("00:00:01"), "Increment_count", schedule:=False
  17.     '連按二次OnTime會有錯誤
  18. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# wl02353427
ONTIME 方法失敗?? 6666.rar (14.19 KB)
Application.OnTime Time + #12:00:10 AM#, "timestock", schedule:=False

TOP

回復 3# GBKEE

感謝GBKEE前輩的更正,前輩的方法還真的是簡潔有力,小弟還真是沒按過兩次....真是不清楚,也沒有想到if的這個用法,真是受益良多。
初新者~指教囉~

TOP

回復  wl02353427
GBKEE 發表於 2014-1-18 20:35


Dim my As Date
    If Sheet6.Range("V14").Value = 1 Then my = #12:01:00 AM#
    If Sheet6.Range("V14").Value = 2 Then my = #12:02:00 AM#
   

Application.OnTime Time + my, "timestock"


終止為何錯誤??(型態不符合)
Application.OnTime EarliestTime:=TimeValue(my), _
Procedure:="timestock", Schedule:=False

TOP

本帖最後由 GBKEE 於 2014-1-19 15:36 編輯

回復 6# t8899
OnTime 方法 VBA的說明範例
  1. 本範例設定 15 秒後執行 my_Procedure 程序,從現在開始計時。
  2. Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"               
  3. 本範例設定 my_Procedure 在下午 5 點開始執行。
  4. Application.OnTime TimeValue("17:00:00"), "my_Procedure"               
  5. 本範例取消前一個範例對 OnTime 的設定。
  6. Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
  7.     Procedure:="my_Procedure", Schedule:=False
複製代碼
Module2
  1. Option Explicit
  2. Public The_Time As Date
  3. Public Ie As Object
  4. Sub W1232222()
  5.     Set Ie = CreateObject("InternetExplorer.Application")
  6.     Ie.Navigate "http://newmis.twse.com.tw/stock/group.jsp?ex=tse&ind=TIDX#STATISTICS"
  7.     Do While Ie.Busy Or Ie.ReadyState <> 4: DoEvents: Loop
  8.     timestock
  9. End Sub
  10. Sub timestock()
  11.     Dim i As Integer, S As Integer, K As Integer, j As Integer, Element
  12.     If Sheets("sheet2").Range("A1") = 1 Then
  13.         Ie.Quit
  14.         Set Ie = Nothing
  15.         Sheets("sheet2").Range("A1") = 2
  16.         MsgBox "跳離IEOK"
  17.         Exit Sub
  18.     End If
  19.     The_Time = Time + #12:00:10 AM#             'OnTime的時間
  20.     Application.OnTime The_Time, "timestock"
  21.     Application.ScreenUpdating = False
  22.     Do While Ie.Busy Or Ie.ReadyState <> 4: DoEvents: Loop
  23.     Set Element = Ie.document.getelementsbytagname("table")
  24.     With Sheets("sheet2")
  25.         .Range("C1:C4").ClearContents
  26.         For S = 2 To 2                    '已找出網頁的table內容在 0-3 中
  27.             For i = 0 To Element(S).Rows.Length - 1
  28.                 K = K + 1
  29.                 j = 2
  30.                 .Cells(K, j + 1) = Element(S).Rows(i).Cells(j).innerText
  31.             Next
  32.         Next
  33.     End With
  34. End Sub
複製代碼
Sheet2
  1. Private Sub CommandButton1_Click()
  2.     If Not Ie Is Nothing Then
  3.         Application.OnTime The_Time, "timestock", schedule:=False
  4.         Ie.Quit
  5.         Set Ie = Nothing
  6.     End If
  7. End Sub
  8. Private Sub CommandButton2_Click()
  9.     W1232222
  10. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  t8899
OnTime 方法 VBA的說明範例Module2Sheet2
GBKEE 發表於 2014-1-19 15:20

研究已超過2小時,還抓不出錯誤!
請指導,謝謝! 9999.rar (12.22 KB)

TOP

回復 8# t8899
  1. Option Explicit  '強迫程式宣告使用的變數,可以找出沒有宣告的變數,易於程式碼的偵錯
  2. Dim tome As Date '在模組端Dim 是這模組的私有變數,這模組的程式都可以引用到的
  3. Sub timestock()
  4.     'Dim tome As Date      '在程式內的 Dim 是這程式的私有變數,這程式所有Dim的變數內容,在程式執行完畢後,會被釋放掉,其他程式引用不到的
  5.     tome = TimeValue(Now) + TimeValue("00:00:05")
  6.     Application.OnTime tome, "sheet2.timestock"
  7.     MsgBoxTest 0, "test ", "提示訊息", vbInformation, 0, 1500
  8. End Sub
  9. Private Sub CommandButton1_Click()
  10.     If tome > 0 Then
  11.         Application.OnTime EarliestTime:=TimeValue(tome), _
  12.             Procedure:="sheet2.timestock", Schedule:=False
  13.             tome = 0
  14.     End If
  15. End Sub
  16. Private Sub CommandButton2_Click()
  17.     timestock
  18. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 t8899 於 2014-1-19 18:18 編輯

我懂了,程式執行完變數就被釋放掉,尤於要再等5秒才會再執行, 這中間 執行 Schedule:=False 找不到變數....
類似這種等待時間再重覆執行的程序,最好用 public 宣告讓變數不要被釋放

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題