-3

我正在运行一个使用 5 个宏和大量公式的程序。我在这里向您寻求帮助的一些宏。将程序放在一起后有很多滞后。我的意思是,如果我们删除一行,我们必须等待 1 到 2 分钟才能完成该过程。关于我应该看什么的任何想法?我知道这听起来有些模糊,但我不知道从哪里开始寻找解决滞后的问题。我看的是计算机、服务器还是程序?

4

1 回答 1

1

来自 Visual Basic 概念(帮助的一部分)

通过优化 Visual Basic 解析对象引用的方式,可以使 Visual Basic 应用程序运行得更快。Visual Basic 处理对象引用的速度可能受以下因素影响:

ActiveX 组件是作为进程内服务器还是进程外服务器实现的。

对象引用是早期绑定还是后期绑定。一般来说,如果一个组件已作为可执行文件(.exe 文件)的一部分实现,则它是一个进程外服务器并在其自己的进程中运行。如果它被实现为动态链接库,那么它就是一个进程内服务器,并且与客户端应用程序在同一进程中运行。

使用进程内服务器的应用程序通常比使用进程外服务器的应用程序运行得更快,因为应用程序不必跨越进程边界来使用对象的属性、方法和事件。有关进程内和进程外服务器的更多信息,请参阅“进程内和进程外服务器”。

如果对象引用使用声明为特定类的变量的对象变量,则它们是早期绑定的。如果对象引用使用声明为通用 Object 类的变量的对象变量,则对象引用是后期绑定的。使用早期绑定变量的对象引用通常比使用后期绑定变量的对象引用运行得更快。


请参阅 Microsoft 人员的此链接。这是特定于 excel 而不是 VBA。Autocalc 和其他计算选项/屏幕更新等。

http://blogs.office.com/2009/03/12/excel-vba-performance-coding-best-practices/


最小化点

因此,如果您对性能感兴趣,请尽量减少点(每个点都是一个查找),尤其是在循环中。

有两种方法。一种是如果您要多次访问,则将对象设置为最低的对象。

例如(较慢)

set xlapp = CreateObject("Excel.Application")
msgbox xlapp.worksheets(0).name

(更快,因为每次使用对象时都会省略一个点)

set xlapp = CreateObject("Excel.Application")
set wsheet = xlapp.worksheets(0)
msgbox wsheet.name

第二种方式是with语句。您一次只能有一个处于活动状态。

这会跳过 100 次查找。

with wsheet
For x = 1 to 100
 msgbox .name
Next
end with

字符串连接

并且不要一次连接一个字符。从 VBScript 程序员那里看到这个。它需要 50,000 字节和多次分配和释放才能生成 100 个字符的字符串。

http://blogs.msdn.com/b/ericlippert/archive/2003/10/20/53248.aspx

于 2014-08-21T02:45:49.170 回答