ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 613|回复: 1

[转帖] vba代码运行效率

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-4-7 18:57 | 显示全部楼层 |阅读模式
来自    https://blog.csdn.net/hancat/article/details/1335053

提高VB代码的运行速度




,(VB/access Vba)

本文描述了如何通过一些技术手段来提高编程代码的执行效率。这些手段可以分为两个大的部分:编码技术和编译优化技术。本文从编码技术和编译技术来讨论。大家发现有好的代码,也请回贴或更新。


  第一部分:编码技术。
下面的这些方法(到现在为止共27种)可以帮助你提高代码的运行速度:
  1. 使用整数(Integer)和长整数(Long)
  提高代码运行速度最简单的方法莫过于使用正确的数据类型了。也许你不相信,但是正确地选择数据类型可以大幅度提升代码的性能。在大多数情况下,程序员可以将Single,Double和Currency类型的变量替换为Integer或Long类型的变量,因为VB处理Integer和Long的能力远远高于处理其它几种数据类型。下面是排序:
Long 最快
Integer .
Byte .
Single .
Double .
Currency 最慢

  在大多数情况下,程序员选择使用Single或Double的原因是因为它们能够保存小数。但是小数也可以保存在Integer类型的变量中。例如程序中约定有三位小数,那么只需要将保存在Integer变量中的数值除以1000就可以得到结果。根据我的经验,使用Integer和Long替代Single,Double和Currency后,代码的运行速度可以提高将近10倍。

  2. 避免使用变体

  对于一个VB程序员来说,这是再明显不过的事情了。变体类型的变量需要16个字节的空间来保存数据,而一个整数(Integer)只需要2个字节。通常使用变体类型的目的是为了减少设计的工作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。

  在这里顺带提一句,对于Object对象也存在同样的问题。请看下面的代码:

Dim FSO
Set FSO = New Scripting.FileSystemObject

  或

Dim FSO as object
Set FSO = New Scripting.FileSystemObject

  上面的代码由于在申明的时候没有指定数据类型,在赋值时将浪费内存和CPU时间。正确的代码应该象下面这样:

Dim FSO as New FileSystemObject
  3. 尽量避免使用属性

  在平时的代码中,最常见的比较低效的代码就是在可以使用变量的情况下,反复使用属性(Property),尤其是在循环中。要知道存取变量的速度是存取属性的速度的20倍左右。下面这段代码是很多程序员在程序中会使用到的:

Dim intCon as Integer
For intCon = 0 to Ubound(SomVar())
Text1.Text = Text1.Text & vbcrlf & SomeVar(intCon)
Next intCon

  下面这段代码的执行速度是上面代码的20倍。

Dim intCon as Integer
Dim sOutput as String
For intCon = 0 to Ubound(SomeVar())
sOutput = sOutput & vbCrlf &
SomeVar(intCon)
Next
Text1.Text = sOutput

同样地,像这样的代码 . . .

Do Until EOF(F)
   Line Input #F, nextLine
   Text1.Text = Text1.Text + nextLine
Loop

. . . 比下面的代码慢得多:

Do Until EOF(F)
   Line Input #F, nextLine
   bufferVar = bufferVar + nextLine
Loop
Text1.Text = bufferVar

然而,下面的代码完成了相同的功能,而且还要快:

   Text1.Text = Input(F, LOF(F))

如上述,几种方法都实现了同样的任务;同时,最好的算法也是最优的。

  4. 尽量使用数组,避免使用集合

  除非你必须使用集合(Collection),否则你应该尽量使用数组。据测试,数组的存取速度可以达到集合的100倍。这个数字听起来有点骇人听闻,但是如果你考虑到集合是一个对象,你就会明白为什么差异会这么大。

 






vba代码运行效率.zip

7.48 KB, 下载次数: 9

txt文件

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-4-7 21:56 来自手机 | 显示全部楼层
干得漂亮,我觉得变量进行字符串连接还是慢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 22:36 , Processed in 0.036820 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表