ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 29206|回复: 63

为便于大家更好地交流,特编辑以下VBA编程基础要求供参:

[复制链接]

TA的精华主题

TA的得分主题

发表于 2002-4-30 23:02 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
7个部分:这次是 1. 1. 编写实代码 2. 命名变量和常量 3. 命名对象和控件 4. 命名函数和子例程 5. 组织代码及对代码进行格式编排 6. 注释代码 7. 设计可重复利用的代码 前言:使用命名规则 正式的命名规则有很多种,每一种都有各自的支持者和反对者。您可以采用现有的某种规则,也可以自己制定一套命名规则。重要的是,您所采用的规则应该便于其他 Office 开发人员理解,而且使用要一致。 对有用的命名规则的最低要求是,它应该能够标识并区别变量类型(对象变量、控件变量和数据类型)、变量作用范围、常量以及过程,并且它应当便于理解和使用。 1 编写实代码 “编写实代码”是指编写可实现预定功能、可重复利用、便于理解和维护的 Microsoft® Visual Basic® for Applications (VBA) 代码或脚本。很多开发人员将所有的时间和精力放在仅仅使代码能够工作上。如果您曾经努力理解自己或别人编写的代码,或者为其他应用程序重新编写相同的过程,那么您一定能够理解编写实代码可减轻许多工作。 Microsoft® Office 应用程序是否高效,最重要的考虑因素之一就是它设计得好不好。如果应用程序有用户界面,那么,在每次创建对话框或添加自定义工具栏时,都应当考虑界面的一致性和易用性。而且还必须了解所编代码的设计和结构。从如何命名变量到何时使用类模块,您在设计代码时所采用的方式方法将会对代码的可维护性和可用性产生重大影响。 2 命名变量和常量 通常,各种命名规则都用小写的前缀或后缀来指定变量的类型和作用范围。变量本身应当用有意义的名称来说明它是什么或要做什么。多字变量名由几个字连接在一起,每个字的第一个字母大写,并且不使用下划线。如果您用过变量名模板,其格式应当如 prefixNoun 或 prefixNounVerb。 常量名也应当有一定的意义,格式为 NOUN 或 NOUN_VERB。常量名均为大写,字之间用下划线分隔。尽管给常量名添加字符以指定数据类型和作用范围的做法不存在技术性错误,但通常不这么做。常量与变量都是数据的符号表示,在此意义上,二者完全相同。区别在于变量可以变化,而常量则保持不变。 变量名和常量名最多可以包含 255 个字符,但是,超过 25 到 30 个字符的名称比较笨拙。此外,要想取一个有实际意义的名称,清楚地表达变量或常量的用途,25 或 30 个字符应当足够了。 2.1 变量名 变量名使用大小写混合的格式 (Noun 或 NounVerb),以此指定变量是什么以及它要做什么。大小写混合格式被用作变量名的说明部分,在这里每个字的第一个字母大写而其余字母小写。 变量名还有两个或三个字符的前缀,用来指定变量的数据类型。例如,以下语句声明的变量都用前缀指定变量的数据类型: Dim strRecipientName As String Dim intItemsProcessed As Integer Dim blnContinueProcessing As Boolean 两个字符的前缀通常用来指定 Office 应用程序对象类型。例如: Dim xlApp As Excel.Application Dim olNameSpace As Outlook.NameSpace Dim wdNewDoc As Word.Document 在声明一般变量或对象变量时,要使用 "obj" 前缀。即使要创建代表 Microsoft® Office 应用程序的晚期绑定对象变量,也应当使用该前缀。例如: Dim objXLApp As Object Dim objWDDocument As Object Dim objOLMailItem As Object 全局变量和模块级变量还要再加一个字符前缀来表示它们的作用范围。变量的作用范围定义了变量的生存期和可见性。全局变量和模块级变量都有永久的生存期。就是说,只要应用程序不关闭,变量就一直占用分配给它的内存。过程内声明的变量只在声明它们的过程中有效,其生存期为过程代码的执行时间。但是,用关键字 Static 来声明变量的情况例外。 全局变量有小写的 "g" 作前缀,并在模块的“声明”部分用 Public 语句声明。它对应用程序中所有模块内的所有过程可见。例如,Public gstrPathToDataSource As String 是一个全局变量,它包含了一个字符串,而该字符串是应用程序中所使用的数据源的路径。 应当尽可能始终使用最小的作用范围来定义变量。只有在找不到其他途径来共享变量所包含的数据时,才应当使用全局变量。全局变量会使代码难以理解和维护。如果您使用的全局变量过多,且未经过仔细挑选,则可能需要重新设计代码,以便减少全局变量。 模块级变量有小写的 "m" 前缀,是在模块的“声明”部分用 Dim 或 Private 语句声明的。它们对声明时所处模块中的所有过程可见。例如,Dim mrstCustomerRecords As ADODB.Recordset 是用于客户记录的模块级对象变量。在类模块中,用 Private 语句声明的模块级变量具有前缀 "p_"。类模块中公共的模块级变量作为类属性出现,不应当有任何前缀表示它们的数据类型或作用范围。 过程级变量是在过程内用 Dim 语句创建的。例如,Dim intCurrentMailItem As Integer 是一个用作循环计数器的过程级变量。此外,过程级变量可以用 Static 关键字声明。即使声明静态变量的过程已经结束运行,静态变量仍然会保留它们的值。静态的过程级变量具有小写的 "s" 前缀。例如,Static scurTotalSales As Currency 将创建一个过程级静态变量,用于在一个计算当前销售额的过程中保存累加和。 用户定义类型变量在模块的“声明”部分中声明,声明时名称全部大写并且后跟 "_TYPE"。可以按如下方式声明用户定义类型: Type EMPLOYEEINFO_TYPE strFullName As String lngEmployeeID As Long datStartDate As Date strDepartmentCode As String * 4 curSalary As Currency End Type 应当使用 "udt" 前缀来声明 EMPLOYEEINFO_TYPE 类型的模块级变量。例如,Dim mudtEmployeeRecord As EMPLOYEEINFO_TYPE。 数组变量有小写 "a" 作前缀,而且,如果不是 Variant 型,则后跟一对圆括号。数组是可以包含多个值的变量。数组变量要使用 Dim 语句声明,例如,Dim alngNum() 是长整型的数组变量。当需要存储多个相同类型的值,而又不希望为它们分别创建单个变量的时候,数组会非常有用。 下面是一些使用前述常规命名规范的变量名称示例: 变量 数据类型 作用范围 strCompanyName 字符串 过程 rstCurrentOrders 对象 过程 intCurrentRecordCount 整型 过程 wdWordApplication 对象 过程 varClipboardData Variant 过程 curAmountPastDue 货币型 过程 blnProcessNextRecord 布尔型 过程 molOutlookMailItem 对象 模块 mcolCurrentUsers 对象 模块 gcnnDBConnection 对象 全局 gstrLogonID 字符串 全局 gastrContactNames() 字符串(数组) 全局 molOutlookMailItem 对象 模块 mcolCurrentUsers 对象 模块 gcnnDBConnection 对象 全局 gstrLogonID 字符串 全局 gastrContactNames() 字符串(数组) 全局 2.2 常量名 常量使用由全部大写的多个字组成的说明型名称,每个字之间用下划线分隔。声明常量时,要使用 Const 语句以及常量名、它的数据类型和它的值。例如,如下常量可以在模块的“声明”部分声明,以提供应用程序所使用的数据源的路径: Public Const DATABASE_PATH As String = "C:\Solutions\Source\AppData.mdb" 注意 如果使用 Public 关键字来声明常量,那么应用程序中任何模块的任何过程都可以使用该常量。如果不使用 Public 关键字,那么常量只有模块级的作用范围,这意味着它只能被声明它的模块所包含的过程使用。如果常量是在过程内声明的,那么它只能用于该过程内的代码,并且生存期仅为过程内代码的执行期间。 下面是一些使用前述常规命名规范的常量名称示例: ACCESS_CONNECTSTRING API_MAX_STRINGBUFFER SQL_STRING 注意 如果在类模块中创建公共枚举常量,可以使用不同的命名规则来将它们与其他常量区分开来。 除了您自己声明的常量外,Microsoft® Visual Basic® for Applications (VBA) 以及每个 Microsoft® Office 应用程序都包含了有预定义值的内置常量(即内部常量)。应当始终使用内部常量,而不用它们代表的值。同用户定义的常量一样,使用内部常量的好处是它们可以使您的代码更容易被理解。例如,比较下面两组代码示例,一组使用内部常量,另一组则没有使用内部常量。请判断内部常量是否可以使代码更容易理解。 If MsgBox("Proceed Now?", 48 + 512 + 3 + 16384, "Continue?")= 7 Then DoCmd.OpenForm "Customers", 0, , , 1, 3 End If If MsgBox("Proceed Now?", vbExclamation + vbDefaultButton3 + _ vbYesNoCancel + vbMsgBoxHelpButton, "Continue?")= vbNo Then DoCmd.OpenForm "Customers", acNormal, , , acFormEdit, acDialog End If 要查看 VBA 和每个 Office 应用程序的内部常量的完整列表,请打开“对象浏览器”,然后从“项目/库”对话框中选择合适的类型库,再在“搜索”文本框中键入相应的常量前缀,然后在“对象浏览器”工具栏上单击“搜索”。下表是从内部常量的完整列表中提取的部分示例。 应用程序/类型库 常量前缀 Access Ac Excel Xl FrontPage Fp Office Mso OfficeBinder Bind Outlook Ol PowerPoint Pp Word Wd VBA Vb 余下回分解.

TA的精华主题

TA的得分主题

发表于 2002-5-1 08:48 | 显示全部楼层
严重支持!请尽快发表完。

TA的精华主题

TA的得分主题

发表于 2002-5-1 09:05 | 显示全部楼层
好棒!好棒,静待下回分解!谢谢版主无私的分享!

TA的精华主题

TA的得分主题

发表于 2002-5-2 20:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢!

TA的精华主题

TA的得分主题

发表于 2004-3-8 06:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
什么时候才有续集?

TA的精华主题

TA的得分主题

发表于 2004-3-8 09:15 | 显示全部楼层
期待啊,期待啊,要迅速啊,不要等得花儿也谢了啊

TA的精华主题

TA的得分主题

发表于 2004-3-8 10:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
搂主辛苦啦!期待]续集!

TA的精华主题

TA的得分主题

发表于 2004-3-8 11:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
精采文章

TA的精华主题

TA的得分主题

发表于 2004-3-8 12:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-8-20 11:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 15:53 , Processed in 0.048276 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表