返回列表 上一主題 發帖

[發問] 請教此程序為何錯誤?

[發問] 請教此程序為何錯誤?

請教此程序為何錯誤? Book1.zip (11.51 KB)

Sub timestock()
' Application.EnableEvents = False
    Application.ScreenUpdating = False
If TimeValue(The_Time) > TimeValue(Time) Then    '預防 上一次 OnTime尚未執行,再度執行一次OnTime
     Exit Sub
End If

' Time     '**** 執行的OnTime
' The_Time '**** 執行下一次OnTime

'------------------------------------------------------------------------------------------
Dim TIMEB, AG
TIMEB = 10
AG = (TimeValue(Now) * 60 * 60 * 24) - (Range("B2") * 60 * 60 * 24) '換為秒

  If AG > TIMEB Then
  On Error Resume Next
  Application.OnTime The_Time, "timestock", Schedule:=False
  If Err Then
     Application.OnTime The_Time, "timestock", Schedule:=True
  End If

      The_Time = 0
       Range("B2") = TimeValue(Now)
    MsgBox "重跑"
timestock
Exit Sub
End If                                                   '   333333
'--------------------------------------------------------------------------------

   
    my = #12:00:01 AM#
The_Time = Time + my
Application.OnTime The_Time, "timestock"
[a2] = [a2] + 1
Range("a1").Value = Format(The_Time, "hh:mm:ss")

End Sub

TOP

簡單的 code 複雜化

TOP

本帖最後由 bobomi 於 2015-4-4 21:43 編輯

最簡單的方法就是 "通通" 不用指定 Schedule:=False  就不會有這個問題了
If AG > TIMEB Then
  Application.OnTime The_Time, "timestock"
      The_Time = 0
       Range("B2") = TimeValue(Now)
    MsgBox "重跑"
timestock
Exit Sub
End If

TOP

最簡單的方法就是 "通通" 不用指定 Schedule:=False  就不會有這個問題了
If AG > TIMEB Then
  Applicat ...
bobomi 發表於 2015-4-4 21:41


Schedule:=False  還是沒辦法終止?
之前在別的程序中也經常發生.......改成公用變數就可以停止,,這次就不行了
我的需求是跑一段時間後跳出再重跑,所以Schedule:=False 一定要確認退出才行

TOP

本帖最後由 bobomi 於 2015-4-4 23:15 編輯

(1) 為何要跑一段時間後跳出呢
是因為你的 Sub timestock() 還沒計算完時,  Sub timestock() 卻又莫名重新計算一次嗎 ?



(2)

    my = #12:00:01 AM#
The_Time = Time + my
Application.OnTime The_Time, "timestock"

[a2] = [a2] + 1    ------------>    你這裡的真正原始 Code 是否是一段很耗時的計算, 會花蠻久的計算   ??????  
Range("a1").Value = Format(The_Time, "hh:mm:ss")

TOP

本帖最後由 t8899 於 2015-4-5 06:23 編輯
(1) 為何要跑一段時間後跳出呢
是因為你的 Sub timestock() 還沒計算完時,  Sub timestock() 卻又莫名重新 ...
bobomi 發表於 2015-4-4 23:10


上面是個測試
我是用ie連上某網站
Set Ie = CreateObject("InternetExplorer.Application")
Ie.Navigate "http://mis.twse.com.tw/stock/group.jsp?ex=tse&ind=TIDX#STATISTICS"
5秒網站會自動更新一次資料,我發現ie 停留10分會造成excel整個速度慢下來(滑鼠出現漏斗狀),所以必須跳出IE, 再重跑

>>>>[a2] = [a2] + 1    ------------>    你這裡的真正原始 Code 是否是一段很耗時的計算, 會花蠻久的計算   ?????
我把這行拿掉也沒用

TOP

Schedule:=False  還是沒辦法終止?
之前在別的程序中也經常發生.......改成公用變數就可以停止,,這次就不行了
t8899 發表於 2015-4-4 22:30


你的  Application.OnTime The_Time, "timestock", Schedule:=False 之所以會發出 Error Msg
是因為你的  Application.OnTime  早就已經自動被停止了
所以你再次對它下達停止的命令時, 它就會發出 Error Msg
因為 Application.OnTime 回呼進入執行 "timestock" 時 , EXCEL 就自動把它停止了


'=========
[a2] = [a2] + 1   
Range("a1").Value = Format(The_Time, "hh:mm:ss")



my = #12:00:01 AM#
The_Time = Time + my
Application.OnTime The_Time, "timestock"    ' ---> 把這個放到 sub timestock 的最後面來看看能不能解決

TOP

5秒網站會自動更新一次資料,我發現ie 停留10分會造成excel整個速度慢下來(滑鼠出現漏斗狀),所以必須跳出IE, 再重跑
t8899 發表於 2015-4-5 06:22



Ie.Navigate "http://mis.twse.com.tw/stock/group.jsp?ex=tse&ind=TIDX#STATISTICS"
讓 Ie.Navigate 只執行1次 ,  Ie.Navigate 不要出現在 sub timestock  , 而且保持 IE 永遠不被關閉

接下來用 Application.Otime  ....  

Sub   timestock()

    Call Ie.Refresh2  '用 Ie.Refresh2  取代掉 Ie.Navigate
    Do Until Ie.readyState = 4
    DoEvents
    Loop

    my = #12:00:01 AM#
    The_Time = Time + my
    Application.OnTime The_Time, "timestock"

End  Sub

TOP

本帖最後由 t8899 於 2015-4-5 13:15 編輯
Ie.Navigate "http://mis.twse.com.tw/stock/group.jsp?ex=tse&ind=TIDX#STATISTICS"
讓 Ie.Naviga ...
bobomi 發表於 2015-4-5 08:10


Ie.Refresh2  這是ie 的屬性 ??後面多一個2 ???

  你的  Application.OnTime The_Time, "timestock", Schedule:=False 之所以會發出 Error Msg
是因為你的  Application.OnTime  早就已經自動被停止了

它是執行到那一行被停止的??如何確認它已被停止了??
---------------------------------------------------
另外請教另一個問題附檔 Book1.zip (10.03 KB)
此例 Schedule:=False 也是錯誤,不過要請教另一個問題
執行IE345678 後,大約17秒會重新跑(原本設計這是正常),但執行中,為何切換到SHEET2時會連續一直出現"重跑"??
B2 的值當切換到SHEET2 就抓不到 ???(程序中有指定工作表)

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題