Excel VBA编程 代码优化

时间:2022-07-14 00:14:15 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
Excel VBA编程 代码优化

代码运行速度慢是VBA程序的一个缺点,这也可能是程序语言本身的一个原因,但也可以找到一些方法优化VBA代码,并使程序尽可能快的运行。在Excel中,可从如下几个方面来优化VBA代码: 1.优化变量

变量定义后,就会在内存中开辟一块空间来存放变量的值,根据变量类型和不同,所占用的内存空间也不相同,所以变量类型的定义一定要准确。可采用下面的方法来优化变量:



要节省内存资源,必须始终用特定的数据类型声明所有变量。如果不使用特定的数据类型声明变量,VBA会创建Variant类型的变量,这将比任何其他数据类型要求更多的内存。

清楚每种数据类型需要多少内存以及它可以存储的值的范围。除使用较小的数据类型会导致隐性转换的情况外,应始终使用尽可能小的数据类型。例如,因为Integer类型的变量将被转换成Long类型的变量,应该将那些存储整型值的变量声明为Long类型,而不是Integer类型。

除非确实需要,应避免使用浮点数据类型。尽管Currency数据类型更大,但它比 Single 数据类型快,因为Currency数据类型不使用浮点处理器。

如果在一个过程中多次引用一个对象,可以创建对象变量,并将对给对象的引用指派给它。因为对象变量存储对象在内存中的位置,VBA将不必再次查找其位置。

2.优化程序结构

程序的结构也就是程序流程的控制,一般分为顺序结构、分支结构和循环结构三种,合理的设计程序的结构也会减少系统资源的占用,加快程序执行的速度。

顺序结构是最常见的程序结构。应当注意,要以最优的方式组织语句出现的先后次序。 选择结构用于根据对条件进行判断,以执行不同的分支。分支语句一定要符合程序的逻辑,还应避免多层(嵌套)分支中无效的条件,即永远执行不到的语句块,且程序的流程要清晰、易读。

循环语句结构最难控制,要优化循环结构的程序代码,可以采取下面的方法:



分析循环以查看是否正在不必要地执行一些消耗内存的重复操作。例如,是否可以在循环外(不是在循环中)设置某些变量,每次都通过循环执行的转换过程是否可以在循环之外执行。 考虑是否必须在满足特定的条件时才执行循环。如果是,也许可以更早地退出循环。例如,假设正在对一个不应该包含数字字符的字符串进行数据验证。如果循环要检查字符串中的每个字符以确定其中是否包含数字字符,那么您可以在找到第一个数字字符时立即退出循环。

如果必须在循环中引用数组的元素,可以创建一个临时变量存储该元素的值,而不是引用数组中的值。从数组中检索值比从相同类型的变量读取值要慢。

最后,将有可能在多个地方执行的相同代码,封装到过程或者函数中,采用过程调用的方式运行这些代码,就会起到简化代码的作用。另外,在删除所有无关的代码时,这在所录制宏中表现得尤为明显。在录制宏时,经常会产生一些与所实现的功能无关的代码,可以将这些代码删除,以使得代码得以简化。 3.优化对象

VBA程序中,很多情况下会使用到对象,如WorkBookSheetRange等。对象的引用所浪费的时间在程序中是最长的,所以优化对象是很重要的。可以使用如下几种情况来优化对象:



尽可能的避免长对象的引用 对象属性最好不要出现在循环中

将长对象的引用赋值给对象变量,通过对象变量来调用对象,可减少对多个对象的引用。


在循环中使用对象属性,将浪费大量的时间用户读取属性的值。应在循环的外部将对象属性值赋值给变量,然后,在循环中使用变量进行操作。



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

除非必须使用集合,否则应尽量使用数组来代替集合。因为集合也是一个对象,而数组的读取速度要比对象快许多倍。



尽可能少使用“.”

在对对象操作时,有可以要引用多个对象,如:

Worksheet("Book1").Sheets("Sheet1").Range("A1").Value = 20 简化后的代码为:

Sheet1.Range("A1").Value=20 Sheet1.Cells(1, 1) = 30

4其它的优化

VBA语句中,除了上述的常用的优化方法外,还有很多其它的优化方法:



展开小的循环体

编码的时候,有可能遇到这种情况:一个循环体只会循环23次,而且循环体由几行代码组成。在这种情况下,可以把循环展开,来减少循环占用额外的CPU时间。



避免很小的函数

调用只有几行代码的函数也是不划算的。因为,调用函数所花费的时间或许比执行函数中的代码需要更长的时间。在这种情况下,你可以把函数中的代码拷贝到原来调用函数的地方。



使用Len()检验空串

尽管有多种方法可检验空串,但首选的是使用Len()函数。为了测试零长度的串,可以选择把字符串与””比较,或者比较串的长度是否为0,但这些方法比用Len()函数要用更多的执行时间。




本文来源:https://www.wddqw.com/doc/95535708a8956bec0975e3f0.html