内部审核检查表如何写:常用的VBA提速技巧

来源:百度文库 编辑:中财网 时间:2024/04/27 14:00:54
常用的VBA提速技巧  

一、让代 “专注”运行

1.Application.ScreenUpdating = False关闭屏幕更新

2.Application.EnableEvents = False 禁止触发事件

3.Application.Interactive = False 禁止交互模式

第一句大家都知道用了,没什么说的,第二句有时候是必需要用的,但也有可用可不用的情况,记得用上哦,第三句不被人注意,虽然效果不如前两句明显,但也还是有一定作用的。

无论用了哪一种,要记得在程序结束时改回来为True哦。

二、单元格(区域)写法的选择

单元格(区域)写法有3种,以A1单元格为例,可以使用

1.Cell对象写法:cells(1,1)

2.Range对象写法:Range(“A1”)

3.名称写法:[A1]

三种写法各有优缺点,但以取值速度论,cells(1,1)最快,[A1]写法最慢,Range(“A1”)比cells(1,1)稍慢(优点是在VBE中输入可以显示属性方法等快速输入信息)。

此外,要明示对象属性,这是一种好的编程习惯,不要依赖于对象的默认属性,下面两句,第二句要比第一句快得多:

x= cells(1,1)

x= cells(1,1).value

三、比较语句

1.分解IF语句

1)IF A AND B THEN写成

IF A THEN

IF B THEN

(2)IF A OR B写成

IF A THEN

...

ELSE IF B THEN

或者

IF A THEN GOTO D1

IF B THEN GOTO D1

GOTO D2

D1:

....

2.并列的条件使用elseif或select,elseif写起来麻烦,但速度优于select

3.将最可能的条件及容易计算的条件放在前面

1)上面分解后的A应当比B出现的机会更大,或者需要进行计算更容易计算出结果

2)select语句放在前面的case也应这样

4.Iif速度慢于if/else

四、循环语句

1.For 语句快于DO/WHILE,这是因为FOR语句的增量部分是VBA自带的,特别是步长为1的更明显

2.For/each快于for/to

五、使用WITH语句

with语句不仅仅是简化了写法,速度也大大提升了。

六、尽量不用Variant类型

这不用多说吧,使用Option Explicit是一个好习惯。

给返回值一个明确的类型,会对提速有好处。虽然有时候我们觉得不明显,这是很多人使用left$,而不用left,使用int%,而不用int的原因(你是否对这种写法好奇过?)。但如果你一开始你就没有DIM,这就很有必要了。

七、关注内存

对占用内存较多的对象变量,不要时要记住set=nothing

如果你对你的机器内存的容量没有信心,应避免使用递归程序,递归的过程会吃掉大量的内存。

八、使用工作表函数(方法)

有些工作表函数(方法)速度是很快的,比如FIND,VLOOKUP等,要记得使用它们,不要花力气去做不讨好的事。

当使用工作表函数时,操作对象应避免使用内存变量,那样反而慢。

九、划零为整

当需要对较大区域进行相同的操作时,可以先使用union等方法收集,一次进行。在Range对象上尤其明显,内容、格式变更,删除等等一个一个的处理要比把这些选定后一起处理慢得多的多。

十、使用内存数组

1.内存变量的运算速度大大快于RANGE对象。

1)将RANGE数据写入内存数组。下面两句将生成一个65536行,6列的数组。用这种方法产生的数组都是两维数组,即使引用的RANGE只有一行或一列。下标始于1,不受option base设置的影响。arr必需声明为Variant类型。

Dim arr()

arr=range(“A1:F65536”)

2)将内存数组数据写入RANGE。在内存数组经过计算处理后,写回时只需下句就可以了。

range(“A1:F65536”)= arr

2.非数组变量快于数组变量。当数组很大时,根据下标提取数值会比从单个变量慢得多,这时可以把需要多次使用的数组值先赋给内存变量。

3.减少使用REDIM的次数。REDIM是对数组操作中最费时的动作。可以先预算大小,不够或多余时再进行调整。