使VBA代码更快且更简洁方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使VBA代码更快且更简洁方法

使VBA代码更快且更简洁的方法 fanjy 发表于 2006-8-28 13:49:28 前言 本文是对《如何优化代码并使VBA程序尽可能快的运行》一文的补充,您在阅读本文时,可对照参考。 在本文中,列举了大量的代码和示例。但在本文中所讨论的代码并不是本文的中心内容,它们只是用作测试代码运行速度,以说明本文的相关内容。因此,您可以将本文中的代码粘贴或输入到您的工作簿中进行测试,当然您也可以下载本文的附件——优化代码示例.xls进行调试。注意,您所运行的计算机的环境和配置不同,速度也会有所差异。同样,您要得出准确的结果,也需要对代码进行多次的运行和进行最终平均速度的比较。 有必要对代码进行优化吗? 这可能不是绝对必要的,但依赖于您要做的工作……如果您正好编写了一个快速且简短的或者是一次性使用且与速度和/或简洁要求无关的代码,您就不需要优化代码。 但另一方面,如果您处理一个带有很多数据、工作簿、工作表等大的工程,再次检查您第一次编写好的代码,看看是否您的代码需要优化,而这样做总是值得的。 最终,您将养成编写代码的好习惯,将会使您的代码更简洁、运行更快速、并且容易为您自已和他人阅读和调试。同时,由于您的代码简洁,因而输入更快,工作效率更高。 减少OLE引用 调用每个VBA方法或属性都需要一个或多个OLE引用,这样在代码中会有多个点运算符,而每次代码调用都需要对这些点运算符进行解析,这将花费更多的时间。因此,在调用方法或属性时减少引用长度将是使您的程序运行更快的一种好方法。 例如,下面的代码包含有三个点运算符,因此Workbooks(1)需要调用三次属性。 Workbooks(1).Sheets(1).Range(c5).Value = 10 而下面的代码包含有一个点运算符,这意味着ActiveWindow仅需调用一次属性。 ActiveWindow.Left = 200 在接下来所讲述的内容中有些示例证实了减少点运算符的数量能创建更快运行速度的代码。 使用对象变量 当您一遍又一遍的使用相同对象引用时,您可以将该对象引用设置成一个变量,然后使用该变量代替对象引用。这样,您在代码中只需对该对象变量进行引用即可。 例如,下面的示例在每行中调用Workbook对象的Sheets属性、Range属性和Value属性三次,当您循环1000次时,总共要调用属性6000次。 Sub DoThis1() Dim Start As Double, Finish As Double Start = Timer -------------------------------------- Dim N As Long For N = 1 To 1000 Workbooks(Book1).Sheets(1).Range(c5).Value = 10 Workbooks(Book1).Sheets(1).Range(d10).Value = 12 Next -------------------------------------- Finish = Timer MsgBox 本次运行的时间是 Finish - Start End Sub 您能在循环开始前通过设置Workbooks(“Book1”).Sheets(1)作为一个对象变量来优化上面的例子,下面的示例在每行仅调用一个Range属性,当循环1000次时,总共只调用该属性2000次。 注意,“Value”是一个缺省属性,通常不需要明确指定它,它将被自动调用。因此,该属性在下面的代码中被忽略。然而,就养成良好的编程习惯而言,还是建议您最好写明该属性。 Sub DoThis2() 快约35%以上 Dim Start As Double, Finish As Double Start = Timer -------------------------------------- Dim ThisBookSheet As Object, N As Long Set ThisBookSheet = Workbooks(Book1).Sheets(1) For N = 1 To 1000 ThisBookSheet.Range(c5) = 10 ThisBookSheet.Range(d10) = 12 Next -------------------------------------- Finish = Timer MsgBox 本次运行的时间是 Finish - Start End Sub 您可以比较这两个示例的运行速度,它们都得到同样的结果,但在我的机子上运行时,第二个示

文档评论(0)

130****9768 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档