VB编程标准.doc_第1页
VB编程标准.doc_第2页
VB编程标准.doc_第3页
VB编程标准.doc_第4页
VB编程标准.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一部分 设计2第一章 创建对象和工程模板2第二章 设计模块和过程2第二部分 编程中使用的约定3第三章 命名约定3第四章 使用常量和枚举值4第五章 变量5第六章 对错误的处理6第三部分 代码结构7第七章 代码的格式化7第八章 代码注释9第九章 循环结构10第十章 控制代码流10第一部分 设计第一章 创建对象和工程模板一.使用和修改现有模板。VB提供的现有模板存放在主文件夹的Template文件夹中,对其相应子文件夹中的对象文件或项目文件进行修改和删除,就可更新现有模板。 二.创建自定义摸板。建立自定义模板文件夹(其子文件夹应与Template的子文件夹相同),将创建的对象文件和项目文件复制到相应子文件夹中。再在Options对话框中Environment选项卡上的Templates Directory中设定该文件夹。编程原则1.不要将对象模板中的特定应用程序或特定组件的值进行硬编码注意:A.不要将对象模板中的路径、应用程序名、版本号进行硬编码。例如可使用App.Path代替具体路径。B.通过为模板对象的设置属性来代替 Public 变量,以便接收来自主程序的数据。2.在对象模板中提供内容广泛的注释,尤其是在需要进行修改的地方加上“统一”的注释。例如:* NOTE:Place code here to pass the *success to the calling procedure.第二章 设计模块和过程一.创建具有强内聚力的模块。模块应该用来将具有一定共性的过程组织在一起,其过程应紧密关联。例如:mdlConnact模块包含CreateContact,DisplayContact,DeleteContact过程;mdlDatabase模块包含CloseDatabase,CreateDatabase, OpenDatabase 过程。二.创建松散连接和高度专用的过程。首先,应使所有过程都执行专门的任务,尽量创建执行特定任务的专用过程。其次,尽量使过程成为自成一体的独立过程,尽量减少过程之间的连接关系,既减少在过程中使用全局变量和模块级变量。再次,应提高过程被多个过程调用的扇入性,降低过程调用多个过程的扇出性,从而降低过程调试的困难程度。最后,应按字母顺序对模块中的过程进行排序。编程原则1.为过程和模块赋予表义性强的名字。注意:A.给过程命名时应该大小写字母混合使用。B.定义过程名时不应使用缩写。2.为每个过程赋予单个退出点。在一个过程中应只在结尾处(通常)退出,当在其他处需要退出时应使用GoTo语句跳转到结尾处再退出。注意:应创建完整的退出代码,即检查对正确退出有影响的某些变量的值,并相应地对其进行清除。3.为每个过程赋予明确的作用域。例如:Private Sub,Public Sub,Friend Sub等。4.使用过程参数在过程间传递数据, 减少在过程中使用全局变量和模块级变量。注意:A.在过程定义中明确指定每个参数的数据类型 。B.根据情况传递数据时使用ByVal或ByRef关键字。在使用ByRef传递数据时应加入一定的注释表明对原始变量进行引用。C.始终对参数进行检验,决不要假设传递的数据没有问题。例如:数据范围验证等。D.当参数正确值的范围较小时应使用枚举值。5.使用统一和直观明了的方式来调用过程。注意:A.Call关键字至用来调用Sub过程,而且 Sub过程也应必须使用Call调用。B.调用Function过程时,应加上括号即使不必须用,并对其返回值进行检索。例如:NO: ShellExecute frmMain.hwnd,”Open”,strFilename,0,0,1 Yes: Dim lngResult As Long LngResult = ShellExecute (frmMain.hwnd,”Open”,strFilename,0,0,1) 第二部分 编程中使用的约定第三章 命名约定一.数据类型后缀。在变量命名时通过后缀区别变量的数据类型,不直观,其中$=String,%=Long,&=Integer,!=Single,#=Doable。例如:FirstName$ 表示String数据类型。二. 匈牙利标记法。在命名时利用3个字符前缀来表示数据类型和控件类型。表3-1 表示数据类型的前缀数 据 类 型前 缀举 例Boolean(布尔值) blnblnLoggedInCurrency(货币) curcurSalaryControl(控件) ctrctrLastControlDouble(双精度实数) dbldblMilesErrObject(错误对象) errerrLastErrorSingle(单精度实数) sngsngYearsHandle(句柄) hwndhwndPictureLong(长整型数) lnglngOnHandObject(对象) objobjUserTableInteger(整型数) intintAgeString(字符串) strstrNameUse-defined Type(用户定义的类型) udtudtEmployeeVariant(including Dates)(变码(包括日期) vntvntDateHiredArray(数组) aastrEmployees表3-2 表示变量作用域的前缀前 缀描 述举 例g_全局变量g_strSavePathm_模块或窗体的局部变量m_blnDataChangedst_静态变量st_blnInhere(无前缀)过程的非静态局部变量intIndex表3-3 表示标准控件的前缀控 件前 缀举 例控 件前 缀举 例复选框chkchkPrint线条linlinVertical组合框cbocboTitle列表框lstlstResultCodes命令按钮cmdcmdCancelMDI子窗体mdimdiContact数据datdatBiblio菜单munmunFileOpen目录列表框dirdirSourceOLE容器oleolePhoto驱动器列表框drvdrvTarget选项按钮optoptSpanish文件列表框filfilSouce面板pnlpnlSettings图文框frafraLanguage图片框picpicDiskSpace窗体frmfrmMain剪贴图clpclpToolbar组按钮gpbgpbChannel形状shpshpCircle水平滚动条hsbhsbVolumn文本框txttxtAddress图像imgimgIcon计时器tmrtmrAlarm标注lbllblHelpMessage垂直滚动条vsbvsbRate表3-4 表示ActiveX的前缀 控 件前 缀举 例常用对话框dlgdlgFileOpen通信comcomFax与数据关联的组合框dbcdbcContacts网格grdgrdInventory与数据关联的网格dbgdbgPrices与数据关联的列表框dbldblSalesCode列表视图lvwlvwFilesMAPI消息mpmmpmSentMessageMAPI会话mpsmpsSessionMCImcimciVideo大纲outoutOrgChart报表rptrptQtrlEarnings微调控件spnspnPages树状视图tretreFolders表3-5 表示数据库对象的前缀对 象前 缀举 例数据库dbdbCustomers域(对象或对象集合)fldfldLastName索引(对象或对象集合)idxidxAge查询定义qryorySalesByRegion纪录集rstrstSalesByRegion报表rptrptAnnualSales表格定义tbltblCustomer第四章 使用常量和枚举值对过程中的数字进行硬编码时,有可能出现许多不易发现的错误。这种硬编码的数字通常称为“幻数”。首先,“幻数”在输入时很可能输错。例如:将10876输成18076等。其次,“幻数”很难更新。于是,应利用常量和枚举值代替“幻数”。一.使用常量。使用常量不仅可以消除“幻数”带来的问题,而且可使创建的代码更容易阅读。常量还非常适合赋予较宽的作用域(在一个应用程序中决不应该两次创建相同的常量),以便供引用它的所有过程使用。二.使用枚举值。枚举值与常量相似,它们都是被赋予值的实体。枚举值的行为特性类似模块中的公用常量组。在使用时,VB可以提供下拉列表框提供有效值,使用更简单方便。但在利用枚举类型作为过程参数时,要注意:过程还可以接受枚举值以外的长整型值,必须进行数据检验。编程原则1.给所有常量加上前缀c_和作用域指示符。例如:Public Const gc_KeyControl。2.无论什么作用域,均用常量取代“幻数”。 例如:Const c_Max_Recently_Used=4 For intCount = 1 To c_Max_Recently_Used 3.只要可能,均应使用枚举。4.使用控件数组时,应该创建与每个索引相关的常量(通过常量名称来反映索引代表的相关意义),来消除出错的可能性。5.枚举成员的前缀不应用来表示数据类型,而应用来表示应用程序前缀或公司特定的前缀。6.应注意在相应的设置或函数中使用相应的系统常量。系统常量是一些全局常量,它们是VB类型库的组成部分,不必对他们进行定义,或引用类型库,它们随时可供使用。例如:vbNormal=0,vbMinimized=1,vbMaximized=2等应在设置窗体状态时使用。7.当参数接受有限数量的值时,应使用枚举,并验证作为枚据类型传递的值。注意:A.不应利用幻数来验证数据。B.使用Select Case来验证一个值是一组离散值的一个有效成员时,不要忘记加上Case Else 子句,以便处理无效数据。第五章 变量编程原则1.定义有焦点的变量,使每个变量服务于“一个”定义明确的目的。2.为变量赋予表义性强的名字。3.在变量名中混合使用大小写。4.只对常用变量名和长变量名进行缩写。5.使用统一的量词后缀。例如First,Last,Next,Prev,Cur,Min,Max,Save,Tmp,Scr,Dst。其中 Save表示保存必须在以后清除的另一个变量,Cur表示一组变量中的当前变量。6.使用肯定形式的布尔变量。例如:NO:blnNotFound;YES:blnLoaded。7.显式说明变量,即必须用Dim、Private、Public或Static来说明每个变量。可Option Explicit来防止隐式变量的存在。8.用心选择数据类型定义变量。为变量选择最佳数据类型可以降低出错的可能性,减少对内存的需求量,加快代码的执行速度。使用数据类型时应该遵循以下规则:A.存储任何类型的文本,请均用 String 数据类型。B.如果只存放True和False这两个值,请用Boolean数据类型。C.若要存放不包含小数位、大于或等于-32768、小于或等于32767的数字,请使用Integer 数据类型。D.若存放不带小数位的数字,但是数字值大于或小于Integer数据类型允许的值,用Long数据类型。E.若要存放包含小数位的数字,请使用Single数据类型。如果需要存放的数字大于Single数据类型能存放的数字,则请使用Double数据类型。F.若要存放美元金额,请使用Currency数据类型。G.若要存放日期或时间值,请使用 Data数据类型。表5-1数据类型数 据 类 型取 值 范 围Byte(字节) 0255Boolean(布尔) True或FalseInteger(整型数) -3276832767Long(长整型数) -2 147 483 6482 147 483 647Single(单精度)负值为-3.402823E38-1.401298E-45正值为1.401298E-453.402823E38Double(双精度)负值为-1.79769313486232E308-4.94065645841247E-324正值为4.9406545841247E-3241.79769313486232E308Currency(货币)-922 337 203 685 477.5808922 337 203 685 477.5807Date(日期)100年1月1日至9999年12月31日Object(对象)任何对象引用Variable-lengthString(可变长度字符串)0至大约20亿个字符Variant(变形)数字:最大为Double范围的任何数字值 字符串:范围与可变长度字符串相同 9.只在绝对必要时才使用Variant数据类型。使用Variant比使用特定类型占用的内存多,操作速度慢,有时会使程序的可靠性降低。注意:A.如果可能,每行只说明一个变量,这样可减少无意创建Variant变量的可能性,并可增加代码的可读性。 例如:NO: Dim strName , strAddress As String NO: Dim intAge As Integer , strName As String , strAddress As String YES:Dim intAge As Integer Dim strName As String Dim strAddress As String其中第一次声明strName没有As(Type)子句,VB将默认其为Variant类型(定义函数时同样)第二次的可读性差。 B. 决不要将符号“+”用于字符串的并置运算,应使用“&”字符。10.尽量缩小变量的作用域。第六章 对错误的处理程序出错的可能性很大,基本上可分为两种类型:一种是编译错误,主要是由各种句法错误造成的。另一种是运行期错误,它是程序运行时产生的,未经处理的错误是致命的,它会导致整个应用程序运行瘫痪。通过创建错误处理的程序,在出现运行错误时,就能防止程序被中止,不至于瘫痪。一.Err对象。Err对象是个运行期对象,它包含了关于最新错误的信息。当程序遇到一个错误,或者当你使用Err对象的Raise方法故意引发一个错误时,便使Err对象的属性被设置为该错误的相应值。如果需要使用这些值,请将它们立刻用变量保存或立即对它们进行操作,因为Err对象的属性值可能被清除。例如:当遇到On Error语句,或使用Exit Sub 、Exit Function或ExitProperty语句退出一个过程后,Err对象的属性值就被清除了(或用Clear语句进行显式清除)。属 性说 明Number用于标识该错误的专用号码Source当前VB项目的名字Description表义性的错误消息。如果某个没有错误没有这个字符串,本属性就指明“应用程序定义的错误或对象定义的错误”HelpFile与错误相关的VB帮助文件所在的驱动器、路径和文件名HelpContextVB帮助文件用于该错误的上下文IDLastDllError在32位机Microsoft Windows操作系统上,上次调用动态连接库(DLL) 的系统错误代号码。LastDllError 属性是只读属性。二.错误处理程序的类型。为了防止中断代码的运行,在每个过程都应该拥有错误处理程序,而不管它包含多大的代码量。最好在代码中放一个OnError语句,作为代码的第一行,放在紧靠过程标题的后面和变量说明的前面。捕获错误,基本上可以使用下面两种方法:1.使用On Error Resume Next忽略错误。对错误进行处理的最简单(最危险)的方法是使用OnErrorResumeNext语句。它规定代码中的错误将完全被忽略,存在错误的代码将被跳过,然后继续执行下一个语句。但你仍然可以通过Err对象了解所发生的错误信息,并进行恰当的提示或进一步处理(只是处理语句必须紧跟在发生错误语句后面,并需编写大量的代码)。2.使用On Error GoTo转移执行的代码流。许多意料之外的错误如果被忽略了,将会使过程产生许多问题。所以在多数情况下,必须利用OnErrorGoTo语句将代码的执行转移到指定的处理程序。注意:A. On Error GoTo line 中的line必须是与On Error GoTo语句相同的过程中的一个语句。B.line可以是行号,但你必须用行号作为某个特定语句的标记(且不能为0),而且其语句不一定是行号所指的物理位置。line最好应是一个行标注,并且标注应该全部大写,并以“_ERR”作后缀。例如:4 Debug.Print(并不是指第4行语句)C.为了避免在没有产生错误时执行处理程序,应在处理程序前加上ExitSub等语句。而且为了过程保持一个退出点,应在处理程序中使用GoTo PROC_EXIT(退出点标注)退出过程,或经过处理 后使用Resume Next、Resume 或Resume语句返回到过程中继续执行或重新执行。3.错误处理程序与调用栈。为了了解错误如何在调用栈中向上移动,先介绍两个术语:“已激活的错误处理程序”,指OnError语句中最近指定的错误处理程序;“活动的处理程序”,指正在处理错误的进程中的处理程序。一旦错误处理程序被激活,它将保持激活状态,直到另一个错误处理程序被激活,或者包含错误处理程序的过程超出其作用域为止。注意:A.当包含错误处理程序的过程超出其作用域时(例如:调用了其他过程),在(其他过程)返回该过程继续执行的同时,该过程中上次被激活的错误处理程序将再次被激活。B.在多个嵌套的过程中,如果在一个过程中出现错误,而该过程并没有已激活的错误处理程序,那么就要检查调用带有错误的过程的那个过程,执行那个过程被激活的错误处理程序,然后在包含该处理程序的过程(那个过程)中继续执行。如果那个过程仍没有被激活的错误处理程序,将继续在调用栈向上进行,直到找出或者到达调用栈的顶部。如果到达了调用栈顶部还未找到的,该错误将被视为未捕获的错误。C.使用On Error GoTo 0,在运行时取消错误处理程序的激活状态。注意:这个语句后的错误将会在调用栈中向上传递,就像该过程中没有错误处理程序一样。4.中央错误处理程序。中央错误处理程序是在出现错误时调用的一个过程。其至少应能够向用户显示格式一致的错误信息,减少代码量。你还可以向其中添加一些功能。例如发电子邮件给技术人员等。但应注意其的通用性。5.利用中央错误处理程序,创建一个出错日志文件,以便对发生的错误有全面的了解。编程原则:1.使用On Error GoTo语句捕获意料之外的错误,应在所有过程中将其视为默认方法。2.使用On Error Resume Next语句捕获预料之中的错误。注意:应在预期错误产生前使用该语句,并在进行处理完后重新使用On Error GoTo语句捕获其他意料之外的错误。3.创建统一格式的错误处理程序块。注意:A.最好使用一个中央错误处理程序。B.使用MsgBox 语句应作为错误块的第一个语句。 否则Err对象有可能被清除。例如:NO: PROC_ERR: if. MsgBox ModuleName | ProcedureName & vbcrlf & Error: & Err.Number & YES:PROC_ERR: MsgBox ModuleName | ProcedureName & vbcrlf & Error: & Err.Number & C.在使用 Resume 结束处理程序块时,必须已经矫正了错误,否则可能产生死循环。D.错误处理代码块应该是过程的最后一部分代码,因此要结束过程应必须转移到PROC_EXIT标注处,保证每个过程只有一个退出点。第三部分 代码结构第七章 代码的格式化进行代码格式化时应注意:A.使代码便于阅读和理解。B.减少为理解代码的结构而必须做的工作。C.将代码分割成功能块和便于理解的代码段。D.不要强制读者进行假设。E.尽量使代码的结构具有正确而清楚的格式。编程原则:1.不要将多个语句放在同一行上。2.使用行接续符 _ ,消除极长的代码行。 A.一行上的字符不得超过90个。 B.不要对多行语句进行右对齐,始终要对空格后面的语句进行分割(即应以空格结尾)。 C.在两个表达式之间分割执行复杂表达式计算的语句。 例如:NO: if blnMoving And recStart_X = Int (X / intMag) And recStart _ Y = Int (Y / intMag) Then YES:if blnMoving _ And recStart X = Int (X / intMag) _ And recStart Y = Int (Y / intMag) Then 3.缩进后续行A.当你将变量设置为某个值时,所有后续行的缩进位置应该与第一行的变量值相同。如果将变量设置为一个复杂表达式的计算结果,那么在子表达式之间断行可能更好些。例如:NO: strSQL = SELECT tblAssemblyDetail.*,tblInventory. &_Description,tbl.tblIncerntory. & _ Name.YES: strSQL = SELECT tblAssemblyDetail.*,tblInventory.Description, & _ tblInvertory.Name. & _ tbInvertory. B.当分割一个很长的过程标题时,所有后续行均应缩进两个制表位(6个字符)。另外,你也可以将第一行后面的所有行缩进到第一个参数的起始位置。这两种缩进方法都可行的。请选择一种最适合你的方法,并始终一贯地使用它。C.当你调用一个过程时,后续行缩进到第一个参数的开始处。但当参数很长时,应缩进两个制表位。D.当你使变量或属性设置等于某个表达式的计算结果时,请从等号后面分割该语句,以确保该表达式尽可能放在同一行上。如果该语句包含多个表达式,最好在两个表达式之间断开语句。E.当你分割长的If语句时,应缩进两个制表位。4.运用语句所进来显示代码的组织结构。A.外层代码(最左边的代码)应该从代码窗口的左边缩进一个制表位。B.每个相连的嵌套结构应该比上层缩进一个制表位,作为一个过程结构的结尾语句(End if、Loop或Next),应该与该过程的起始句具有相同的缩进。 例如:For intCounter =0 To Forms_Count 1 If Forms(intCounter).Name = strForName Then m_blnIsFormLoaded = True GoTo ROC_EXIT End If Next intCounter C.当使用End if 时,在If语句后应缩进。 例如:If Left$(txtLocation.Text,4) = Fax: Then MAPIMess.ReciAddress = FAX: & txtRecipient.Text & & _ strFaxNumberD.在Else语句后应缩进,与if语句的缩进相同。(即Else与If对齐,从属语句与If语句的从属语句对齐)。 例如:If InStr(txtLocation.Text,) Then MAPIMess.RecipAddress = SMTP: & txtLocation.Text Else MAPIMess.RecipAddress =MS: & strServer & / & txtLocation.Text End IF E.在Select Case语句后应缩进。 例如:Select Case objTool.Name Case Is = Save Case Is = Exit End Select F.在Case语句后应缩进。 例如:Select Case objTool.Name Case Is = Save Call SaveDocument Case Is = Exit U nload Me End SelectG.在DoLoop循环体中,语句主体应缩进。 例如: Do While Not rstSales.EOF lstCategories.AddItem rstSales!Category rstSales.MoveNext Loop H.在 With语句后应缩进。 例如:With lstSortOrder .Clear .AddItem Ascending End With I.在调用RecordSet的Edit或AddNew方法后应缩进。 例如:rstAccounts.Edit rstAccounts!Name = strName rstAccounts!Address = strAddress rstAccounts.Update J.在BeginTrans方法调用之后应缩进。对BeginTrans方法的调用总是后随着CommitTrans方法或RollBack方法的调用。它们之间的所有代码均缩进一个制表位。 例如:Workspeces(0).BeginTrans Do While Not rstAccounts.EOF intCounter = intcounter +1 Loop Workspaces(0).CommitTrans K.对从属于行标注的代码进行缩进。行标注代码为外层代码缩进一个制表位,其从属语句再缩进一个制表位。 例如:PROC_EXIT: Exit Sub 5.对模块的Declarations部分中的代码进行缩进,显示其从属关系,但开始时不缩进(即“外层代码”不缩进)。A.对所有用户定义的数据类型说明的主体进行缩进一个制表位。 例如:Private Type RECT(不缩进) Left As Long Top As Long End Type B.对所有枚举说明的主体进行的缩进,类似于用户定义的数据类型。6.使用空行将相关语句组合在一起。A.在每个If Then构造的前面和后面(如果有注释则在注释前面)都应加入一个空行。B.在每个Select Case构造的前面和后面都应加入空行。并且除了第一个Case语句外,请在每个Case语句前面加一个空行。C.在每个循环的前面和后面都应加入一个空行。D.在说明变量块的后面插入一个空行,如果说明许多变量可以考虑用一个空行将相同数据类型的变量组隔开。E.在执行统一任务的各个语句组之间插入一个空行。F.在两个过程之间插入两个空行。第八章 代码注释编程原则:1.用文字说明代码的作用。注释应该用文字说明代码的作用和原因,而不应说明用什么方法如何去做,注释中不应使用变量名,除非你用文字说明了该变量。注意:不要将注释写成代码的重复。2.如果你想违背好的编程原则或一些常用的方法,请用注释说明为什么。3.在你估计代码中可能存在错误并要捕获它时,请用注释来说明何时可能出错和为什么。4.可在编写代码前先利用注释或伪代码形成一个大纲,再把代码添入相应的位置,最后调整注释形成标准的注释。5.纯色字符注释行只用于主要注释,并且应尽量少用。 纯色字符注释行即: * 或 $ 等6.不要形成注释框,这只会增加不必要的额外的工作量。 例如:* * if * * the * * 7.均使用“ *”来指明注释。例如:* default information. If the account exists, place8.增加注释的可读性。注释应该便于人们的理解,必须清楚地书写。A.使用完整的语句,不要用短语和句段来写注释。B.在注释中尽量避免使用缩写。C.在注释中可将整个单词或句子大写,以突出它们的重要性。9.对注释进行缩进,应与随后的语句相同(即与随后的语句对齐)。10.为每个过程添加一个注释标头。注释标头可以包含过程的作用、参数、返回值、原作者、版本信息、修改日期、修改人等。每一部分可以简明介绍也可根据需要透彻解释,但都应避免冗长的文字表述。所有过程都应采用统一的格式。建议使用如下格式: * Purpose : xxx * Accepts : yyy * Returns : zzzA.在过程注释标头中说明过程的作用。 例如:NO: * This function accepts. YES: * Purpose : Determine whether a. B.在过程标头中列出过程参数 例如:NO: * Accepts : The name of a form NO: * Accepts : strFormName.(参数名) YES:* Accepts : strFormName - the name of a form C.在过程标头中列出函数的返回值时,应将每种情况均做说明,不能省略。 11.使用内部注释说明代码的进程。这些用来说明代码细节、实现方法的注释一定要注意简明扼要(在过程内部,与说明对象紧密相连的注释行称为内部注释)。A.在每个if 语句前面加上注释。B.在每个Select Case语句前面加上注释。C.在每个循环的前面加上注释来说明它的作用。D.在修改了全局变量的每个语句前面加上注释,说明为何要修改它。12.用行尾注释来说明变量。行尾注释应该短小、简明,否则应改为内部注释。 例如:Do While intLocation 0 * Do while a space is found . Loop 第九章 循环结构编码指导原则:1.使用ForNext,使代码循环运行规定次数。循环次数固定,递增量不变的循环尽量使用For.Next循环。A.所有Next 语句应尽量带有计数器变量(循环变量)。例如:Next intCounterB.递增量(Step)应该尽量使用常量。 例如:Const c_Magnification=4 For intCount=0 To (intEditWidth +1) Step c_MagnificationC.循环结束后不要引用计数器变量。当ForNext循环结束时,计数器变量的最后值不等于结束值,如果引用它可能并不是你期望的值,从而产生错误。D.为了清楚起见,应对循环的代码主体进行缩进。E.如果你必须提早退出循环,请使用Exit For语句,不要用GoTo来退出循环。2.使用DoLoop,使循环按照未定次数来运行。A.请在循环的开始处计算 Do循环的退出条件。 例如: NO: Do YES: Do Until rstReports.EOF . . Loop Until rstReports.EOF Loop B.当你在While与Until之间进行选择时,请使用能实现最简单的条件的这个关键字。在大多数循环中,你既可以使用While,也可使用Until。但是,根据具体情况,其中的一个关键字将要求你使用 Not运算符来计算表达式的相反值。你应该尽可能使用简单表达式的值(不用Not)。C. 尽可能使用Do循环和For循环,而不要使用if.GoTo 和一个行标注的循环。D.请使用Exit Do语句在特殊时退出循环,而不要用GoTo语句。3.用DoLoop取代WhileWend。4.如果要循环运行一个集合的所有成员,请使用For EachNext。 A.不要用For EachNext来循环运行数据。因为这个循环的变量必须是Variant类型,如果循环数组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论