[算表] VBA執行效率 excel

作者: thunderclap (蛤)   2019-04-12 08:31:44
各位好,我想請問,我有一段VBA執行到最後速度會非常的慢
不曉得是哪個部分佔了太多記憶體沒清除
這段扣做的事情如下
1. 從某3個url自動下載檔案並且另存,共有三個檔案。
2. 打開已經有的一個template檔,把上述三個檔案的資料複製貼上到這個template的
第一張sheet
(複製結束都有用application.cutcopymode false)
3. 從template另存一個新的檔案x
4. X這個檔案裡面插入第一欄,用for next迴圈把第一格的值等於後面每一格以分號相連
(例如A1 = B1;C1;D1....) 這裡用的是offset, for i = 1 to 20
檔案的本身大概只有700*20格而已,照理說量非常小。
問題出在4這個步驟,看得出來執行到這的時候每秒大概只跑的出兩列
也就是我700列得執行超過五分鐘
但我如果把同一段扣剪下,改成我手動把X打開再執行
那麼這個步驟可以秒殺,因此我想是前面的步驟佔了記憶體?
一開始執行這一整段程式碼的檔案本身已經有好幾個module
是否這個也有影響?
我嘗試過先整理資料再另存,沒有改善
不太確定還有可能是什麼原因,請教各位高手了
感謝
作者: soyoso (我是耀宗)   2019-04-12 10:04:00
個人覺得,有什麼原因也要測試原po的檔案才會比較清楚
作者: newton41 (Newton)   2019-04-12 14:03:00
ScreenUpdating=false試試看?另外直接在A欄一次填入公式重整後複製貼上值也可以試試,就不需要跑迴圈。
作者: thunderclap (蛤)   2019-04-12 14:48:00
也就是看起來沒什麼會特別佔空間的部分得直接看過檔案,我再測試看看好了 updating false似乎一樣
作者: newacc (XD)   2019-04-12 19:28:00
因為第四步驟大量讀取Range內容,可以試試看把資料存在Array裡再一次寫入
作者: smallstar78 (smallstar)   2019-04-13 19:52:00
4跑迴圈貼會耗時,應該可以用.copy的方式直接貼近來

Links booklink

Contact Us: admin [ a t ] ucptt.com