Board logo

標題: [發問] 多個巨集,自動化問題 [打印本頁]

作者: spermbank    時間: 2012-10-24 01:36     標題: 多個巨集,自動化問題

大家好:
程式大致上為
Sub 程式1()
...
Application.OnTime Now + TimeValue("00:00:10"), "程式2"
Sub End
Sub 程式2()
...
Application.OnTime Now + TimeValue("00:00:10"), "程式3"
Sub End

Sub 程式3()
Sub End

執行程式1-X個巨集約2分鐘

Sub 程式4()
Sub End

執行程式4約1分鐘

Sub 程式5()
Sub End

執行程式5約1分鐘

Sub 程式6()
Sub End

執行程式6約8分鐘

Sub 自動化()
    程式1
    程式4
    程式5
    程式6
Sub End

為什麼我利用自動化巨集來執行程式1、4-6
照道理說應該會是程式1跑完才會執行程式4及陸續執行程式5和6
可是問題來了
程式1未跑完就執行程式4-5

實在找不出原因
請各位大大指教
作者: GBKEE    時間: 2012-10-24 06:32

回復 1# spermbank
問題是沒有看到你程式的內容,
可按 F8 一行一行執行 Sub 自動化() 找出原因.
作者: c_c_lai    時間: 2012-10-24 07:15

回復 1# spermbank
Application.OnTime 的 Priority 應優先於一般程式碼之緣故。
作者: mark15jill    時間: 2012-10-24 08:22

若是單純以 程式銜接來看...
    Application.Run "活頁簿1!巨集1"
    Application.Run "活頁簿1!巨集2"
作者: c_c_lai    時間: 2012-10-24 08:54

回復 4# mark15jill
因為執行之程式碼為:
  1. Sub 自動化()
  2.     程式1
  3.     程式4
  4.     程式5
  5.     程式6
  6. Sub End
複製代碼
所以才會有#1樓主所述的狀況引發。
作者: spermbank    時間: 2012-10-24 23:15

若是因為Application.OnTime 的 Priority 應優先於一般程式碼之緣故
請問有解嗎? 因為程式很大,一改我的腦袋就亂了。
作者: c_c_lai    時間: 2012-10-25 12:02

若是因為Application.OnTime 的 Priority 應優先於一般程式碼之緣故
請問有解嗎? 因為程式很大,一改我的腦 ...
spermbank 發表於 2012-10-24 23:15

執行緒的優先順序是由系統內部去控制管理的,一般在應用上,
使用者是無法駕馭的,況且它屬系統排程控管項,而且程式4、
程式5、程式6等的排程都可能比程式1執行處理的時段還短。
以往在實務處理上,都盡可能去考量、與避除這些困惱問題,
執行它們時都會先讓主模組執行完後,再去處理後續的程式段。
作者: kimbal    時間: 2012-10-26 00:04

留意一下GBKEE大大說的

簡單來說 Application.OnTime 是會讓系統運行方向由1變為2
Application.OnTime ...以下的 會"立即"運行.

如果程式4一定要在程式3() 後運行, 那其中一個方法是在程式3()呼叫程式4

如果只是想系統等後一下, 可以用application.wait
作者: spermbank    時間: 2012-10-27 01:15

謝謝各位大大的意見分享,我大概了解囉,謝謝。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)