推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

日常VBA编程问答

   2023-07-10 网络整理佚名2260
核心提示:如果不使用特定的数据类型声明变量,VBA会创建类型的变量,这将比任何其他数据类型要求更多的内存。例如,下列代码会检查字符串中的第一个字符是否为空格:在创建已知元素的确定数组时,使用Array函数对于节约空间和时间以及写出更具效率的代码是非常理想的。即传递参数到方法和属性所调用的宏程序中。调用宏程序的语法基本相似,因此,下面介绍的方法所使用的语法同样适用于属性。

出现在模块代码顶部的语句要求在编写代码时声明所有出现的变量,从而减少使用变量时的内存需求并加快性能。

(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 =

擦除

:

成为

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON