网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.API函数在VB中的应用.
.VB访问SQLServer的探讨.
.树视TreeView树视的使用技巧.
.在VB中使用水晶报表的一种简易编.
.在VB中控制Word.
.自己的邮件自己发.
.用VisualBasic开发数据库浏览器.
.VisualBasic5.0中实现视频画中画.
.如何调用chm格式的帮助文件.
.用VB改变屏幕的分辨率和刷新频率.
.SQL的基本操作(1.数据类型).
.呼叫子程序(Subroutine).
.Web动画图像分解在VB动画设计中的.
.VisualBasic中实现绘图区的大十字.
.你真正理解AllowUnroundedFloati.
.Whois示例程序.
.人民币小写转大写.
.查找替换所选字符.
.使用Cleanup方法避免循环引用.
.在VB中异步执行程序.

避免VBA陷阱--有时,VBA使你避免危险

发表日期:2006-2-27


作为Access-Office-VBADVISOR的技术编辑,我见过许多编程风格。我常常惊异于VBA程序员能够找到不同的方法来执行相同的任务,同时我也对VBA能够容忍如此差的技术而感到沮丧。VBA是一种相当宽容的语言,几乎能够运行一切那些糟糕的程序员所赋予它的任务。

在我评价和测试本刊的文章之前,请首先关注五、六个我最经常遇到的编程错误。有一些编程手段对于每一个VBA代码都是必不可少的。

毫无疑问,我所遇到的最常见的问题如下:

Dimrs1,rs2AsRecordset

此处到底是什么类型的变量呢?在其他编程语言里,等价的语句将导致两个数据记录型变量,而在VBA中,你得到的是一个数据记录(rs2)和另一个变量(rs1)。虽然变量rs1运行时毫无错误,并且程序运行顺利,但是程序还是处于一种相当不确定的状态中。

一个变量应当是参数可变的一种特定数据类型,它能够被赋予任何没有问题的数值,因此,变量rs1能够按照下面表述的形式接受任何数据记录型赋值:

Setrs1=CurrentDb.OpenRecordset(“tblEmloyees”,dbOpenDynaset)

问题在于每当代码中的rs1被执行时,VBA引擎都必须指明rs1变量的具体数值,在VBA决定如何处理该变量时,需要消耗额外的CPU时钟周期。而且,所有变量都会比等价的单个数据类型占据更多的内存。这些变量会降低应用程序的性能,使运行更加缓慢。

此处还有一个例子,变量strMsg具有如下定义:

DimstrMsg

任何包含strMsg的语句都将肯定比strMsg已经被定义为一个字符串的情况下要运行的缓慢。

如果你对变量指定数据类型,对其进行定义的基础是要使你的应用程序运行的更快、更可靠。

另外一个常见的问题是糟糕的代码缩排。下述代码段让人难以理解,如果将For…Next和If…EndIf循环进行仔细地缩排效果就会好得多:

Fori=1to20

IfCondition1Then

CallSomeOperation1

IfCondition2Then

CallAnotherOperation

EndIf

EndIf

CallAthirdOperation

Next

逻辑相关的语句,尤其是那些被当作独立单元进行执行的语句,应当缩进两格。如果你没有花一点时间指明一段逻辑相关的语句之间的逻辑关系,你可能会消耗更多的时间,因此进行适当的代码缩排是值得的。

接下来的问题不太好用书面形式进行表述。因为刊物页面的幅宽有限,我不能将我所见到的长达470个字符的语句展示给你们。假设页面是标准的65个字符的幅宽,那么仅仅这个单句,就要换行8次,因此在编辑时,就要不得不向右滚动屏幕8次才能看清全句。尽管能够这样做,你也不可能一下把握全句的逻辑关系。显然,采用少量的分隔符将本长句划分为一些更短的句子,将便于管理。

与长句类似,但并不象那么严重的一个问题如下:

DimiAsInteger,strAsString,rs_

AsRecordset,dbAsDatabase,db1AsDouble

在单行中进行许多定义,尤其当最后一个句子的末尾远远超出了编辑窗口的右端边界,将使得在大量的定义中查找某一个定义变得更加困难。

此处还有一个常常易犯的编程问题:

If(Condition)Then

 rs.AddNew

 rs.FirstName=txtFirstName

 rs.LastName=txtLastName

 rs.Address=txtAddress

 rs.City=txtCity

 rs.State=txtState

 rs.ZipCode=txtZipCode

 rs..Update

EndIf

VBA提供特别的With…Endwith结构处理同一个对象的多个成分:

If(Condition)Then

 Withrs

  .AddNew

  !FirstName=txtFirstName

  !LastName=txtLastName

  !Address=txtAddress

  !City=txtCity

  !State=txtState

  !ZipCode=txtZipCode

.Update

 EndWith

EndIf

采用With…EndWith结构不仅可以使得表述简单,而且执行起来相当快。一旦VBA获得rs对象的句柄,那么With…EndWith代代码码块中的每一个成分将执行得更快。

VBA的诸多优点中有一条是其对语句的使用方式具有较高的宽容性,在C或Pascal程序中可能会引起崩溃的代码也许能够在VBA中毫无错误地得以运行,但是这样的灵活性常常会付出代价。体系结构糟糕的VBA程序或其子程序比精心构造的程序运行得要缓慢,并且效率低下,另外调试和维护起来也更加困难。以上所有问题在矫正时都只需耗费少许的时间,但是花在学习和提高VBA代码编制技术上的时间将由更快的执行速度和更容易的日常维护来获得补偿。->

上一篇:用VB创建Excel报表 人气:9489
下一篇:Excel中Basic程序的运行 人气:3728
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐