出现在模块代码顶部的语句要求在编写代码时声明所有出现的变量,从而减少使用变量时的内存需求并加快性能。
(1) 为了节省内存资源,所有变量必须始终使用特定的数据类型进行声明。 如果未声明具有特定数据类型的变量,VBA 将创建该类型的变量,这比任何其他数据类型需要更多的内存。
(2)知道每种数据类型需要多少内存以及它可以存储的值的范围。 您应该始终使用尽可能小的数据类型,除非使用较小的数据类型会导致隐式转换。 例如,因为类型的变量会被转换为Long类型的变量,所以存储整数值的变量应该声明为Long类型,而不是type。
3、缩小变量范围,及时释放变量
主要是对象变量用完后及时释放。 例如,
As , AnObj As
= 新
=
= '释放对象变量
4. 尽可能使用早期绑定
5.关闭屏幕刷新
6. 将计算模式设置为手动
7. 使用 ...Next 循环
8.使用With...语句
9、执行循环时考虑如何尽可能节省资源
10. 最小化 OLE 引用
11.避免对象激活或者不需要先选择
12. 复制或粘贴声明
使用宏录制代码时,首先选择一个区域,然后执行.Paste。 使用 Copy 方法时,您可以在一条语句中指定要复制的内容以及复制到的位置。
例如,要将范围 B5:C6 的内容复制到以单元格 B8 开头的范围,使用宏记录器的代码为:
范围(“B5:C6”)。
。复制
范围(“B8”)。
。粘贴
修改后的最佳代码为:
范围("B5:C6").:=范围("B8")
13.使用“。” 尽可能少
例如,引用单元格数据时,可以使用以下代码:
暗淡我只要
福里=1到10
("Book1.xls").("").Cells(1,i).Value=i
内斯蒂
但下面的代码运行效率更高,因为代码中引用对象和对象的调用命令只执行一次,而上面的代码要执行10次。
迪姆瓦斯
暗淡我只要
Setws=("Book1.xls").("")
福里=1到10
ws.Cells(1,i).Value=i
内斯蒂
14.合理使用留言框和表格
15.尽可能加快数字的计算速度
16.提高字符串操作的性能
(1) 尽可能少地使用连接操作。 您可以使用等号左侧的 Mid 函数来替换字符串中的字符,而不是连接它们。 使用 Mid 函数的缺点是替换字符串必须与要替换的子字符串长度相同。 例如,
暗淡如
=“这是一个测试”
Mid(, 11, 4) = "帐篷"
(2)VBA提供了很多内部字符串常量,可以用来代替函数调用。 例如,可以使用常量来表示字符串中的回车/换行组合,而不是使用 Chr(13) 和 Chr(10) 。
(3)字符串比较操作的执行速度很慢。 有时,可以通过将字符串中的字符转换为 ANSI 值来避免这些操作。 例如,以下代码检查字符串中的第一个字符是否为空格:
如果 Asc() = 32 那么
上面的代码将比以下代码更快:
如果 Left(, 1) = " " 那么
17. 使用Asc()检查ANSI的值
在 VBA 中,可以使用 Chr$() 函数将数字转换为字符并确定 ANSI 值,但最好使用 Asc() 函数将字符串转换为数字,然后确定其 ANSI 值。 如果需要进行有限数量的此类检查,则程序代码的效率可能不会受到太大影响,但如果需要在多个循环中执行此类检查,则将节省处理时间并有助于程序代码更加高效。 快速执行。
18. 使用 Len() 检查空字符串
尽管有多种方法可以检查空字符串,但首选方法是使用 Len() 函数。 要测试零长度字符串,可以选择将字符串与“”进行比较,或者比较字符串的长度是否为0,但这些方法比使用Len()函数需要更多的执行时间。 当 Len() 函数应用于字符串且函数返回值 0 时,表示该字符串为空或零长度字符串。
此外,由于非零值在 If 语句内被视为 True,因此直接使用 Len() 函数而无需与“”或 0 进行比较,从而减少了处理时间,因此执行速度更快。
19. 高效使用数组
使用VBA数组而不是单元格区域来处理数据,即可以先将数据写入数组,然后使用语句将数组中的数据传输到单元格区域。
使用 Array 函数非常适合节省空间和时间,并且可以在创建已知元素的确定数组时编写更高效的代码。 例如,
昏暗的名字作为
Names=Array("范", "阳", "武", "沉")
此外,应尽可能使用固定大小的数组。 如果您确实选择使用动态数组,则应避免每次向数组添加元素时都更改数组的大小,最好每次更改一定数量的元素。
问题2:当方法或属性中设置的要运行的宏带有参数时,如何将参数传递给这些宏程序? 即向方法和属性调用的宏程序传递参数。
回答:
因为使用的语法。 或者 。 调用宏基本类似,下面描述的方法所使用的语法也适用于属性。
为了便于理解,下面介绍使用类似的代码,但传递给被调用宏程序的参数不同,从而说明向宏程序传递不同参数的方法。 例如,以下代码将使宏从现在起 2 秒后运行:
.Now + ("00:00:02"),""
问题3:如何禁用的关闭按钮?
答:例如,下面的示例提示用户只能通过单击 上的“确定”按钮来关闭 。 可以在VBE编辑器中插入一个,并在上放置一个名为“Ok”的按钮,在代码模块中输入以下代码进行调试。
'******************************************************** **
(如,如)
'参数表示事件发生的原因
'如果其值等于,则表示用户点击了X图标按钮
如果=那么
“请单击“确定”按钮关闭此表单”
= 正确
万一
'******************************************************** **
()
=================================================== ====================
问题 4:宏执行的操作可以撤消吗?
答:可以,但不会通过 Excel 的内置函数自动执行。 可以在运行宏程序之前使用VBA代码记录单元格或单元格区域的原始内容,并在“撤消”命令中调用它来恢复程序运行之前的状态。
您可以使用该对象的方法作为宏结束之前的最后一个代码,这允许您指定“撤消”菜单项中显示的文本以及单击该文本时要运行的过程。 如下代码所示:
."撤消上一个宏","恢复宏程序"
为了说明上述方法,下面列出了一个完整的示例。 示例完整代码及代码说明如下:
'******************************************************** **
'自定义类型存储运行宏所做的更改
作为
作为
作为
作为
() 作为
'******************************************************** **
()
' 在所有选定的单元格中插入 X
Dim i As , cl As 范围
If () "Range" then Exit Sub
。 = 假
重新调暗 (.Count)
设置组织WB =
设置组织WS =
我 = 1
'记录宏程序对工作表进行更改之前的状态
对于每个 cl 输入
(我)。 = 分类。
(我)。 = 分类。
我=我+1
下一个CL
'在选定的单元格中填写X
。 =“X”
'指定“撤消”菜单项中的文本以及选择该命令时要执行的宏程序
。 "撤消上一次宏过程操作",""
'******************************************************** **
'将工作表恢复到原始状态
()
暗淡如
。 = 假
出错时转到
组织WB。
组织WS。
出错时转到 0
'恢复通过运行宏所做的更改
对于 i = 1 至 ()
范围((i).)。 =(一)。
接下来我
设置组织WB =
设置组织WS =
擦除
:
成为