Board logo

標題: 為什麼程式跑到一半都會停住不繼續了? [打印本頁]

作者: sasho    時間: 2010-7-30 11:47     標題: 為什麼程式跑到一半都會停住不繼續了?

最近利用一個excel活頁簿去操作其他個活頁簿

流程是這樣:

開啟活頁簿(主要的程式) --> 藉由VBA去開啟另外一個活頁簿(次要的)  --> 在次要的活頁簿上進行工作  --> 工作結束後再跳回主要的活頁簿,並將次要的活頁簿存檔關閉

程式有時候會跑到一半就停住了,從主活頁簿跳到次活頁簿就突然停住不繼續工作了,從新執行後又回復正常,雖然不是常發生,但想請問大家這是什麼原因呢?

謝謝
作者: jackdream    時間: 2010-7-30 11:51

回復 1# sasho

列程式碼給大夥研究看看..
作者: sasho    時間: 2010-7-31 00:41

本帖最後由 sasho 於 2010-7-31 00:43 編輯

Workbooks.Open Filename:="C:\DATA\" & date & ".xls"
Workbooks(code & ".xls").Activate

在主要的活頁簿(book1.xls)執行上方的程式碼
上面兩行是我從原本的活頁簿(book1.xls)跳到專門在儲存資料的活頁簿(code,xls)所下的指令
後面接續的是一些處理的程序
程式常常會跑到這邊就停住不會往下跑了,,可以請問是什麼原因造成的嗎?
感謝
作者: basarasy    時間: 2010-7-31 06:43

本帖最後由 basarasy 於 2010-7-31 08:46 編輯

回復 3# sasho

      試試在code.xls 的A1入                     =SUBSTITUTE(LEFT(CELL("filename",A1),FIND("]",CELL("filename",A1))-1),"[","")
就會有code.xls 的LINK   
eg.  C:\code.xls
   
    Workbooks.Open Filename:="C:\code.xls"
MyCodeName= ActiveWorkbook.Name
Workbooks(MyCodeName).Activate
作者: kimbal    時間: 2010-7-31 15:55

回復 3# sasho


    Workbooks.Open Filename:="C:\DATA\" & date & ".xls"
Workbooks(code & ".xls").Activate

檔名是 日期+".xls" 還是 code +".xls"

估計你要的是
  1. Workbooks.Open Filename:="C:\DATA\" & code & ".xls"
  2. Workbooks(code & ".xls").Activate
複製代碼

作者: sasho    時間: 2010-7-31 16:16

不好意思 打錯了

應該是:
Workbooks.Open Filename:="C:\DATA\" & code & ".xls"
Workbooks(code & ".xls").Activate

其中code是變數,整個程式執行並不會有問題,因為整個跑下來並沒有錯誤發生
只是有時候程式執行後我就把excel丟在旁邊讓他自己跑,
然後去聊MSN
但有可能聊一聊就發現程式停住了沒有繼續跑
如果是程式執行後就沒有做其他事情的話那就不會發生以上的問題
所以想說,是不是利用VBA做多個活頁簿控制的時候,會有這樣的小bug產生?
作者: kimbal    時間: 2010-7-31 16:46

回復 6# sasho


這個有很多可能性... 你確定是這句出問題嗎? 可否發一下完整代碼?
作者: Hsieh    時間: 2010-7-31 17:17

回復 6# sasho


Workbooks.Open Filename:="C:\DATA\" & code & ".xls"
Workbooks(code & ".xls").Activate
原則上Workbooks(code & ".xls").Activate這句是多餘的
執行Workbooks.Open Filename:="C:\DATA\" & code & ".xls"
作用中活頁簿就是Workbooks(code & ".xls")
你程式不跑要用逐行來偵錯

除非是Workbooks(code & ".xls").的檔案很大或有其他開啟問題
否則這2行是找不到問題的
作者: sasho    時間: 2010-8-5 11:37

感謝各位前輩的解答..

不過我想大家可能誤會我的意思了,我再說明一下好了

我目前利用一個excel當作主程式去控制其他(700多個)excel工作簿

將所有的程式碼通通寫在主程式當中,其他的活頁簿就只是當作資料庫作儲存而已

這個程式跑起來的時候,如果沒有去使用MSN的話,是沒有問題的

問題是,當我把程式開啟後,丟在旁邊執行而視窗則拉到MSN聊天的話

那程式就會跑到一半就停住(停住而已,並沒有出現錯誤訊息)

而停住的地方就是在關閉上一個當作資料庫的活頁簿,開啟新的資料庫活頁簿之後

開啟之後就停住了,本來應該會有後續的操作,但在這種情況時,程式就不會繼續跑了

所以我想,應該不是自己寫的程式碼有什麼問題(因為如果不使用MSN可以很順利跑完)

可以請教大家是什麼原因嗎?

謝謝

P.s 總共有將近700M的檔案,所以不方便上傳,sorry
作者: kimbal    時間: 2010-8-5 14:01

就如hsieh大所說,
你可以先試試用偵錯模式來跑,
發現程式停了, 可以按ctrl+break把程式停一下, 看看停在那裡.

你也可以只發一下代碼上來看看的~
作者: basarasy    時間: 2010-8-5 15:12

回復 9# sasho


    方法 1. 只好不用msn.
    方法 2. 買台強勁的電腦.
作者: HUNGCHILIN    時間: 2010-8-5 19:53

本帖最後由 HUNGCHILIN 於 2010-8-14 14:25 編輯

這是個很好的資料分析問題
在分析大量資料的時候可能會需要此技巧
開啟匯入主檔關閉 檔案迴圈
計算個別匯出個別檔存檔


以我自己為例我以往分析成本時
檔案在每次計算完成本後 可以匯出成本計算結果
一個月可能算個幾萬件,所以可能有數萬個成本計算結果檔
如果要作月分析怎辦,要全部一起匯進計算檔然後作個別分析與總合分析

此時分析作完可以用VBA個別單獨匯出數萬個 EXCEL檔 當然我改變了.XLS 名
變為其他像是.CPC 等
你這問題在計算完匯出存檔數萬筆資料的途中
如果使用了其他程式時就會可能會出現

如果你發現資料做錯怎麼辦,重新匯數萬筆資料然後匯出數萬筆?
可能作一次單靠EXCEL VBA 自己跑程式
不管他都要兩個多小時才能完成

所以當多資料時我們不能使用多檔 唯一解決的辦法是
VBA內必須要有往返功能
1.成本計算完後可以單獨匯出 "單獨計算結果出表 excel檔" (也是資料檔)
2.有多個資料檔時可以匯整成單獨一個 "匯整資料檔DATA excel檔" (這樣就可以不用每次要匯入數萬筆資料)
   此時1單獨的  "單獨計算結果出表" (也是資料檔) 就可以刪除了
3.而"匯整資料檔DATA excel檔" 可以同時計算功能 "製成多個成本計算的結果出表 excel檔(自己一張大表)"
4.你若要"單獨計算結果出表"時亦可以從"匯整資料檔DATA"轉換成"單獨計算結果出表"

故你可以將數萬筆分散在數萬個EXCEL檔的DATA
集中在一個EXCEL檔內
亦可以從這一個集中檔
轉換成數萬個單獨的檔
如果你能做到這點應該就差不多了

這樣才能減少一次儲存數萬個檔的困擾
要用一個檔來裝數萬個檔的資料,

還有我的電腦常壞就是因為計算很複雜cpu&記憶體用多
電腦容易過熱
你用這方式來計算
電腦要多吹電風扇




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