作者thunderclap (蛤)
看板Office
标题[算表] VBA执行效率
时间Fri Apr 12 08:31:44 2019
各位好,我想请问,我有一段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
是否这个也有影响?
我尝试过先整理资料再另存,没有改善
不太确定还有可能是什麽原因,请教各位高手了
感谢
-----
Sent from JPTT on my iPhone
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.9.72.99
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1555029128.A.AAA.html
※ 编辑: thunderclap (101.9.72.99), 04/12/2019 08:36:22
1F:→ soyoso: 个人觉得,有什麽原因也要测试原po的档案才会比较清楚 04/12 10:04
2F:→ newton41: ScreenUpdating=false试试看? 04/12 14:03
3F:→ newton41: 另外直接在A栏一次填入公式重整後复制贴上值也可以试试 04/12 14:05
4F:→ newton41: ,就不需要跑回圈。 04/12 14:05
5F:→ thunderclap: 也就是看起来没什麽会特别占空间的部分得直接看过档 04/12 14:48
6F:→ thunderclap: 案,我再测试看看好了 updating false似乎一样 04/12 14:49
7F:推 newacc: 因为第四步骤大量读取Range内容,可以试试看把资料存在Arr 04/12 19:28
8F:→ newacc: ay里再一次写入 04/12 19:28
※ 编辑: thunderclap (111.248.103.102), 04/12/2019 20:51:16
9F:推 smallstar78: 4跑回圈贴会耗时,应该可以用.copy的方式直接贴近来 04/13 19:52