热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爲什麽VBA程序這麽慢,跑出來頂級配置的電腦要用1個小時左右?請問有沒有好的解決方案?

我電腦配置:AMDAuthon1800+,256DDR,KT333主板,7200轉硬盤我為別人做了一套品質管理系統,其中一個重要的功能就是生成Excel報表。報表有三種:1.一種是
我電腦配置:
AMD Authon 1800+,256DDR,KT333主板,7200轉硬盤
我為別人做了一套品質管理系統,其中一個重要的功能就是生成Excel報表。
報表有三種:
1.一種是日報,日報有四個Sheet,全部是自己創建,然後從數據庫里抓數直接往Cell里填,全部生成大概要4—6分鐘的時間。
但黨我分別作了三個FlexGrid用來顯示四個sheet里的數據,每個FlexGrid顯示完全部數據只要3-10秒,然後我分別將FlexGrid里的數據往四個Excel文件里填,平均每個要30秒左右。這和起來的時間是3分鐘左右,但這不符合用戶要求。

2.周報就要了我的命。周報大概有30多個sheet。數據增多了,全部運行完要65分鐘左右!!!!!天啊!!!
但如果對每個sheet顯示分別用FlexGrid顯示,在生成當個的Excel文件,也比較快。
我在周報里有一個模版sheet。每次要新增sheet的時候我在程序先將模版sheet拷貝,然後生成一個新的Sheet,這樣就避免了格式的定義。

3.月報更慢。形式和周報一樣。

問題:
1.VBAExcel編程的數度瓶頸是什麽?如何提高VBA程序速度???
2.VBAExcel編程要注意些什麽?
3.如果是用打開一個Excel文件然後往裏面填數據的方法是不是比創建一個Excel文件要快的多?但是如果涉及到一個Excel文件要有動態的多個Sheet(Sheet格式一樣),那怎麽弄 ?

請兄弟姐妹還要Microsoft專家幫忙,救小弟一命!

13 个解决方案

#1


同道中人啊,我以前用VBA也是这样的慢,后来改为数据库就变快了。读取Excel数据的主要代码如下:
  
  Dim db As DAO.Database
  Dim rs As DAO.Recordset  
  Dim SourcePath as String
  Dim data(100,5)       '100,5可以改,也可以定义为动态数组
  dim i,j as integer

  SourcePath="d:\book1.xls"
  Set db = OpenDatabase(SourcePath, False, True, "Excel 8.0;")
  Set rs = db.OpenRecordset("sheet1$", dbOpenTable)
  
  i=0
  do not rs.eof
    i=i+1
    for =j to 5
      data(i,j)=rs.field(j-1)
    next j
    rs.movenext
  loop 
  
  往Excel里写数据也可以用数据库方式。
 

#2


兄弟,我是往Excel里寫數據,而不是從Excel往外調數據

#3


改用插件速度好像会快些,当然,要Disable掉Screenupdating。

#4


henryw() :
什麽插件??怎麽用?多謝!

#5


对不起,可能我说的不清楚。自己写com add-in,用VB好像更自由一些。
此外,直接写入Excel的方式能否改成先将结果写到一个文本文件中,然后再用Excel导入,再做格式化,如此速度可能会快一些。

#6


老大,不行的,我有幾十個 sheet的內容要顯示,不好倒到文本文件中去!

#7


建议使用F1Book控件,显示数据用此控件,然后可以使用控件的导出功能,导成excel表格或者其他的很多类型,速度比较快。

#8


coolsky(天心) 
我的Excel文檔有嚴格的格式限制.所以你將的方法是不行的

#9


SOS

#10


非常简单啦!
先将计算结果放在数组中,在数组中计算是非常快的!
然后用Range对象的FormulaArray属性将数组一次性复制到整个Range对象中。
这样做非常快!
详细情况自己去看Excel的帮助文件吧。

如还不清楚,可发邮件给我 user_hj@hotmail.com

#11


user_hj(office之友) ,
我先去試試.
不懂再向你請教!
多謝!

#12


user_hj(office之友) ,
我先去試試.
不懂再向你請教!
多謝!

#13


user_hj(office之友)老大,你果然牛.
速度是快了一倍.
請你道http://www.csdn.net/expert/topic/915/915177.xml?temp=.2821466
上去領分.再次感謝.

另外感謝諸位兄弟姊妹!
另外有點補充我受難的心得:
===================================================
如何提高VBA程序速度
===================================================
1.最好用模版Excel文件,因為自己創建的如果要頁面設置的話,速度會像生小孩一樣慢!
2.最好不要用Cell對象來操作,用Range對象會快些.
3.像user_hj(office之友)個們所說,先将计算结果放在数组中,在数组中计算是非常快的!然后用Range对象的FormulaArray属性将数组一次性复制到整个Range对象中。這很管用.速度會提高一倍!!!!!多謝他!
4.將Application.ScreenUpdating属性设为False.速度會提高15%-25%.

好了,我就寫這麼多,歡迎大家交流,和补充.
我新開了個交流的帖子,希望大家去發表意見.
http://www.csdn.net/expert/topic/934/934155.xml?temp=.2673151
我的Mail:liangxyb@163.net

推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 广度优先遍历(BFS)算法的概述、代码实现和应用
    本文介绍了广度优先遍历(BFS)算法的概述、邻接矩阵和邻接表的代码实现,并讨论了BFS在求解最短路径或最短步数问题上的应用。以LeetCode中的934.最短的桥为例,详细阐述了BFS的具体思路和代码实现。最后,推荐了一些相关的BFS算法题目供大家练习。 ... [详细]
author-avatar
手机用户2602922607
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有