下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 office_VBA教程

office_VBA教程.pdf

office_VBA教程

cuixinlong55
2012-11-26 0人阅读 举报 0 0 暂无简介

简介:本文档为《office_VBA教程pdf》,可适用于IT/计算机领域

VBA一概述VBA(VisualBasicForApplications)是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。VBA是VisualBasic的一个子集,VBA不同于VB原因是VBA要求有一个宿主应用程序才能远行而且不能用于创建独立应用程序。而VB可用于创建独立的应用程序。VBA可使常用的过程或者进程自动化可以创建自定义的解决方案最适用于来定制已有的桌面应用程序。通常意义上的VBA就是在Office中包含着的一种加强Office功能的Basic语言。经过发展在Office中Word、Excel、Access、PowerPoint四个软件都有了自己的程序设计语言分别称为WordBasic、ExcelBasic、AccessBasic、PowerPointBasic(在Outlook中的开发语言为VisualBasicScriptingEdition)。通常统一称为VBA(VBforApplication)。二,宏宏是能够自动完成某个任务的一组指令这些指令放在一起就如同一个命令一样。宏与Dos中的批处理文件一样。批处理文件用于自动化用户完成的一组任务。VBA把需要重复进行的任务创建宏并编写其它涉及决策的任务的代码以完成任务自动化最后可以把这个过程保存成文件并发布。录制宏比从头开始编写代码要快得多。在实际开发中为节省时间可以先录制尽可能多的宏用它来建立应用程序的基础,然后再对录制下来的代码进行修改。录制宏:在VBA中可以采用宏录制器或编程的方式自动处理任务。不必了解宏录制器使用的编程语言便可以在VBE编辑宏。通过记录完成任务的步骤或者在VBA中编程都可以创建宏。Office应用程序例如word、Excel、PowerPoint、Access和Outlook都支持宏。Office应用程序提供的创建宏的工具是MacroRecorder(宏录制器)和VB编辑器。宏录制器用于自动化重复的任务而VB编辑器自动化那些涉及决策的任务。可以给宏指定符号(工具栏上的图标)、键(键盘上的键)或名字用于表示一列命令、活动或击键。录制宏有两种方式一是双击状态栏中的"录制"命令,或者鼠标单击工具宏录制新宏命令,WORD等将记录下您的操作并转换为VBA语言。修改宏:A,指定快捷键:B,指定宏的保存位置:Excel可保存宏到个人宏工作簿中C,Excel可将宏指定给按钮(视图|工具栏|窗体|点选按钮到页面|指定宏)图片(插入|图片|右击图片|指定宏)工具栏按钮(工具|自定义|命令|宏|自定义|拖动自定义按钮到工具栏|右击按钮可编辑图标和指定宏|关闭自定义)三使用控件设计用户界面首先要进行需求分析:应用程序的客户是谁使用的数据的来源数据保存在哪对数据怎么操作输出结果是什么然后根据用户需求来添加控件(标签,按钮,复选框,选项按钮列表框,组合框,滚动条控件,微调控件。)使用工作表还是用户窗体完全取决于个人的爱好和应用程序的用户。熟练Excel用户适合以工作表的形式工作。初级用户适合使用用户窗体。,向工作表添加控件:视图|工具栏|窗体|点选控件到工作表|右击工作表上的控件选设置控件格式。通过使用控件、设置格式和公式可以执行一些简单的自动化任务(至少对你的用户来说是这样)。,向用户窗体添加控件:()添加用户窗体:打开一个新的工作簿|工具|宏|VBE|VBE的工具栏上的“插入用户窗体”按钮(或者选择“插入|用户窗体”显示出新添加的用户窗体)()设置用户窗体的Name(一般前缀推荐取frm),Caption等属性()添加控件到用户窗体上:只要从工具箱中选择想要使用的控件然后使用鼠标把控件拖到窗体上就可以了。()设置控件的Name,Caption和其它相关属性:控件Name命名前缀规范:复选框chk,组合框cbo,命令按钮cmd或者btn,分组框grp或者fra,图像img,标签lbl,列表框lst,多页(MultiPage)mul,选项按钮opt,引用编辑(RefEdit)ref,滚动条hsb或者vsb(取决于是水平的还是垂直的),微调项spn,选项卡条(TabStrip)tab,文本框txt,切换按钮togA,命令按钮Default属性:一个窗体上只有一个命令按钮的Default属性可以设置为True。把Save(保存)Cancel(取消)按钮的Default属性设置为True。在窗体上当按下回车键时窗体将执行保存取消操作。B,控件的尺寸调整为一致并对齐:同时选中两个控件|点工具栏上“宽度相同”按钮旁边的向下箭头|选'两者都相同'|点“对齐”工具栏按钮旁边的向下箭头|选'左对齐'C,禁用控件:把Enabled(启用)属性设置为False就可以禁用控件。D,为控件分配Tab键切换顺序:设置TabIndex属性值可以从第一个控件起设置其TabIndex为,,也可以从最后一个控件起逆序设置每个TabIndex为(原理:当把某个控件的TabIndex属性值设置为时其他所有控件的TabIndex属性值都会加)E,为控件分配加速键(键盘访问键):在控件的标题字母中找出一个作为该控件的加速键把该字母赋值给控件的Accelerator属性当设置完成以后控件标题中该字母下会有下划线()运行用户窗体:按F键四使用VB编辑器VBE(MicrosoftVisualBasicEditor,VisualBasic编辑器,VB编辑器)就是我们设计调试VBA代码的编辑器,它是捆绑在Application(如WORD)应用程序中的一个程序。进入VBE的方式:ALTF工具宏VisualBasic编辑器命令工具宏宏对话框,创建或者编辑命令,也可以进入VisualBasic编辑器,使用工具栏,浏览代码功能:编辑|查找或替换书签标注需要查错添加代码更新或升级的代码区域。,使用在线帮助:帮助|MicrosoftVisualBasic帮助,使用对象浏览器:单击标准工具栏上的“对象浏览器”按钮。选视图|对象浏览器按F键。,设置编辑器选项:工具|选项|编辑器选项卡|自动显示快速信息,自动语法检测等五VBA语法基础VBA语法基础·VBA语法概述·参见VBA语法概述标识符:是一种标识变量、常量、过程、函数、类等语言构成单位的符号利用它可以完成对变量、常量、过程、函数、类等的引用。命名规则如下:A,字母打头由字母、数字和下划线组成如AbAbcB,字符长度小于(Excel以上中文版等可以用汉字且长度可达个字符)C,不能与VB保留字重名如public,private,dim,goto,next,with,integer,single等,运算符:是代表VB某种运算功能的符号。A,赋值运算符=B,数学运算符、(字符连接符)、(加)、(减)、Mod(取余)、(整除)、*(乘)、(除)、(负号)、^(指数)C,逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)D,关系运算符=(相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、IsE,位运算符Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含),数据类型:VBA共有种数据类型具体见下表此外用户还可以根据以下类型用Type自定义数据类型。数据类型类型标识符字节字符串型String$字符长度()字节型Byte无布尔型Boolean无整数型Integer长整数型Long单精度型Single!双精度型Double#日期型Date无公元货币型Currency小数点型Decimal无变体型Variant无以上任意类型可变对象型Object无,变量与常量:)VBA允许使用未定义的变量默认是变体变量Variant。)在模块通用说明部份加入OptionExplicit语句可以强迫用户进行变量定义。)变量定义语句及变量作用域Dim变量as类型'定义为局部变量如DimxyzasintegerPrivate变量as类型'定义为私有变量如PrivatexyzasbytePublic变量as类型'定义为公有变量如PublicxyzassingleGlobal变量as类型'定义为全局变量如GloblalxyzasdateStatic变量as类型'定义为静态变量如Staticxyzasdouble一般变量作用域的原则是那部份定义就在那部份起作用模块中定义则在该模块那作用。)常量为变量的一种特例用Const定义且定义时赋值程序中不能改变值作用域也如同变量作用域。如下定义:ConstPi=assingle,数组:是包含相同数据类型的一组变量的集合对数组中的单个变量引用通过数组索引下标进行。在内存中表现为一个连续的内存块必须用Global或Dim语句来定义。定义规则如下:Dim数组名(lowertoupper,lowertoupper,…)astypeLower缺省值为。二维数组是按行列排列如XYZ(行列)。除了以上固定数组外VBA还有一种功能强大的动态数组定义时无大小维数声明在程序中再利用Redim语句来重新改变数组大小原来数组内容可以通过加preserve关键字来保留。如下例:Dimarray()asdouble:Redimarray():array()=:Redimpreservearray(,),注释和赋值语句)注释语句是用来说明程序中某些语句的功能和作用VBA中有两种方法标识为注释语句。ü单引号’如:’定义全局变量可以位于别的语句之尾也可单独一行üRem如:Rem定义全局变量只能单独一行)赋值语句是进行对变量或对象属性赋值的语句采用赋值号=如X=:Formcaption=”我的窗口”。对对象的赋值采用:setmyobject=object或myobject:=object,书写规范:)VBA不区分标识符的字母大小写一律认为是小写字母)一行可以书写多条语句各语句之间以冒号:分开)一条语句可以多行书写以空格加下划线来标识下行为续行)标识符最好能简洁明了不造成歧义。,判断语句)If…Then…Else语句IfconditionThenstatementsElseelsestatements如:IfA>BAndC<DThenA=BElseA=C如:Ifx>Thenx=x或者可以使用块形式的语法:IfconditionThenstatementsElseIfconditionnThenelseifstatementsElseelsestatementsEndIf如:IfNumber<ThenDigits=ElseIfNumber<ThenDigits=ElseDigits=EndIf)SelectCase…Case…EndCase语句如:SelectCasePidCase“A”Price=Case“A”Price=……CaseElsePrice=EndCase)Choose函数:choose(index,choce,choice,…,choicen)可以用来选择自变量串列中的一个值并将其返回index必要参数数值表达式或字段它的运算结果是一个数值且界于和可选择的项目数之间。choice必要参数Variant表达式包含可选择项目的其中之一。如:GetChoice=Choose(Ind,"Speedy","United","Federal"))Switch函数:Switch(expr,value,expr,value,exprn,valuen)switch函数和Choose函数类似但它是以两个一组的方式返回所要的值在串列中最先为TRUE的值会被返回。expr必要参数要加以计算的Variant表达式。value必要参数。如果相关的表达式为True则返回此部分的数值或表达式没有一个表达式为TrueSwitch会返回一个值。,循环语句)ForNext语句以指定次数来重复执行一组语句Forcounter=startToendStepstep'step缺省值为statementsExitForstatementsNextcounter如:ForWords=ToStep'建立次循环ForChars=To'建立次循环MyString=MyStringChars'将数字添加到字符串中NextChars'IncrementcounterMyString=MyString""'添加一个空格NextWords)ForEach…Next语句:主要功能是对一个数组或集合对象进行让所有元素重复执行一次语句ForEachelementIngroupStatementsExitforStatementsNextelement如:ForEachrangInrangeWithrangeinteriorcolorindex=pattern=xlSolidEndwithNext这上面一例中用到了With…EndWith语句目的是省去对象多次调用加快速度语法为:WithobjectstatementsEndWith)Do…loop语句在条件为true时重复执行区块命令Do{while|until}condition'while为当型循环until为直到型循环顾名思义不多说啦StatementsExitdoStatementsLoop或者使用下面语法Do'先do再判断即不论如何先干一次再说StatementsExitdoStatementsLoop{while|until}condition,其他类语句和错误语句处理A,其他循环语句:结构化程序使用以上判断和循环语句已经足够建议不要轻易使用下面的语句虽然VBA还支持。)Gotoline该语句为跳转到line语句行)Onexpressiongosubdestinatioinlist或者onexpressiongotodestinationlist语句为根据exprssion表达式值来跳转到所要的行号或行标记)Gosubline…line…Return语句Return返回到Gosubline行如下例:Subgosubtry()DimnumNum=inputbox(“输入一个数字此值将会被判断循环”)Ifnum>thenGosubRoutine:Debugprintnum:ExitsubRoutine:Num=numReturnEndsub)while…wend语句只要条件为TRUE循环就执行这是以前VB老语法保留下来的如下例:whilecondition'whileI<statements'I=Iwend'WendB,错误语句处理:执行阶段有时会有错误的情况发生利用OnError语句来处理错误启动一个错误的处理程序。语法如下:OnErrorGotoLine'当错误发生时会立刻转移到line行去OnErrorResumeNext'当错误发生时会立刻转移到发生错误的下一行去OnErroGoto'当错误发生时会立刻停止过程中任何错误处理过程,过程和函数:过程是构成程序的一个模块往往用来完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。VBA具有四种过程:Sub过程、Function函数、Property属性过程和Event事件过程。A,Sub过程:Sub过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例:{{Subpassword(ByValxasinteger,ByRefyasinteger)Ify=theny=xyelsey=xyx=xEndsubSubcallpassword()DimxasintegerDimyasintegerx=y=Callpassword(x,y)‘调用过程方式:Call过程名(参数,参数…)过程名参数,参数…debugprintx,y‘结果是、y按地址传递改变了值而x按值传递未改变原值Endsub}}B,Function函数:函数实际是实现一种映射它通过一定的映射规则完成运算并返回结果。参数传递也两种:按值传递(ByVal)和按地址传递(ByRef)。如下例:Functionpassword(ByValxasinteger,byrefyasinteger)asbooleanIfy=theny=xyelsey=xyx=xify=thenpassword=trueelsepassword=falseEndFunctionSubcallpassword()DimxasintegerDimyasintegerx=y=ifpasswordthen‘调用函数:作为一个表达式放在=右端作为参数使用debugprintxendifEndsubC,Property属性过程和Event事件过程:这是VB在对象功能上添加的两个过程与对象特征密切相关也是VBA比较重要组成技术比较复杂可以参考相关书籍。,内部函数在VBA程序语言中有许多内置函数可以帮助程序代码设计和减少代码的编写工作。A.测试函数IsNumeric(x)‘是否为数字,返回Boolean结果TrueorFalseIsDate(x)‘是否是日期,返回Boolean结果TrueorFalseIsEmpty(x)‘是否为Empty,返回Boolean结果TrueorFalseIsArray(x)‘指出变量是否为一个数组。IsError(expression)‘指出表达式是否为一个错误值Is(expression)‘指出表达式是否不包含任何有效数据()。IsObject(identifier)‘指出标识符是否表示对象变量B.数学函数Sin(X)、Cos(X)、Tan(X)、Atan(x)三角函数单位为弧度Log(x)返回x的自然对数Exp(x)返回exAbs(x)返回绝对值Int(number)、Fix(number)都返回参数的整数部分区别:Int将转换成而Fix将转换成Sgn(number)返回一个Variant(Integer)指出参数的正负号Sqr(number)返回一个Double指定参数的平方根VarType(varname)返回一个Integer指出变量的子类型Rnd(x)返回之间的单精度数据x为随机种子C.字符串函数Trim(string)去掉string左右两端空白Ltrim(string)去掉string左端空白Rtrim(string)去掉string右端空白Len(string)计算string长度Left(string,x)取string左段x个字符组成的字符串Right(string,x)取string右段x个字符组成的字符串Mid(string,start,x)取string从start位开始的x个字符组成的字符串Ucase(string)转换为大写Lcase(string)转换为小写Space(x)返回x个空白的字符串Asc(string)返回一个integer代表字符串中首字母的字符代码Chr(charcode)返回string其中包含有与指定的字符代码相关的字符D.转换函数CBool(expression)转换为Boolean型CByte(expression)转换为Byte型CCur(expression)转换为Currency型CDate(expression)转换为Date型CDbl(expression)转换为Double型CDec(expression)转换为Decemal型CInt(expression)转换为Integer型CLng(expression)转换为Long型CSng(expression)转换为Single型CStr(expression)转换为String型CVar(expression)转换为Variant型Val(string)转换为数据型Str(number)转换为StringE.时间函数Now返回一个Variant(Date)根据计算机系统设置的日期和时间来指定日期和时间。Date返回包含系统日期的Variant(Date)。Time返回一个指明当前系统时间的Variant(Date)。Timer返回一个Single代表从午夜开始到现在经过的秒数。TimeSerial(hour,minute,second)返回一个Variant(Date)包含具有具体时、分、秒的时间。DateDiff(interval,date,date,firstdayofweek,firstweekofyear)返回Variant(Long)的值表示两个指定日期间的时间间隔数目Second(time)返回一个Variant(Integer)其值为到之间的整数表示一分钟之中的某个秒Minute(time)返回一个Variant(Integer)其值为到之间的整数表示一小时中的某分钟Hour(time)返回一个Variant(Integer)其值为到之间的整数表示一天之中的某一钟点Day(date)返回一个Variant(Integer)其值为到之间的整数表示一个月中的某一日Month(date)返回一个Variant(Integer)其值为到之间的整数表示一年中的某月Year(date)返回Variant(Integer)包含表示年份的整数。Weekday(date,firstdayofweek)返回一个Variant(Integer)包含一个整数代表某个日期是星期几,文件操作)文件Dir(pathname,attributes)pathname可选参数用来指定文件名的字符串表达式可能包含目录或文件夹、以及驱动器。如果没有找到pathname则会返回零长度字符串("")attributes可选参数。常数或数值表达式其总和用来指定文件属性。如果省略则会返回匹配pathname但不包含属性的文件。)删除Killpathname从磁盘中删除文件,pathname参数是用来指定一个文件名RmDirpathname从磁盘中删除删除目录pathname参数是用来指定一个文件夹)打开OpenpathnameFormodeAccessaccesslockAs#filenumberLen=reclength能够对文件输入输出(IO)。pathname必要。字符串表达式指定文件名该文件名可能还包括目录、文件夹及驱动器。mode必要。关键字指定文件方式有Append、Binary、Input、Output、或Random方式。如果未指定方式则以Random访问方式打开文件。access可选。关键字说明打开的文件可以进行的操作有Read、Write、或ReadWrite操作。lock可选。关键字说明限定于其它进程打开的文件的操作有Shared、LockRead、LockWrite、和LockReadWrite操作。filenumber必要。一个有效的文件号范围在到之间。使用FreeFile函数可得到下一个可用的文件号。reclength可选。小于或等于(字节)的一个数。对于用随机访问方式打开的文件该值就是记录长度。对于顺序文件该值就是缓冲字符数。说明对文件做任何IO操作之前都必须先打开文件。Open语句分配一个缓冲区供文件进行IO之用并决定缓冲区所使用的访问方式。如果pathname指定的文件不存在那么在用Append、Binary、Output、或Random方式打开文件时可以建立这一文件。如果文件已由其它进程打开而且不允许指定的访问类型则Open操作失败而且会有错误发生。如果mode是Binary方式则Len子句会被忽略掉。重要在Binary、Input和Random方式下可以用不同的文件号打开同一文件而不必先将该文件关闭。在Append和Output方式下如果要用不同的文件号打开同一文件则必须在打开文件之前先关闭该文件。)读入Input#filenumber,varlist从已打开的顺序文件中读出数据并将数据指定给变量Get#filenumber,recnumber,varname将一个已打开的磁盘文件读入一个变量之中。)写入Write#filenumber,outputlist将数据写入顺序文件Print#filenumber,outputlist将格式化显示的数据写入顺序文件中Put#filenumber,recnumber,varname将一个变量的数据写入磁盘文件中。)关闭Closefilenumberlist关闭Open语句所打开的输入输出(IO)文件注意如果今后想用Input#语句读出文件的数据就要用Write#语句而不用Print#语句将数据写入文件。因为在使用Write#时将数据域分界就可确保每个数据域的完整性因此可用Input#再将数据读出来。使用Write#还能确保任何地区的数据都被正确读出。Write与Print#语句不同当要将数据写入文件时Write#语句会在项目和用来标记字符串的引号之间插入逗号。Write#语句在将outputlist中的最后一个字符写入文件后会插入一个新行字符即回车换行符(Chr()Chr())。)其他文件函数LOF(filenumber)返回一个Long表示用Open语句打开的文件的大小该大小以字节为单位。EOF(filenumber)返回一个Integer它包含Boolean值True表明已经到达为Random或顺序Input打开的文件的结尾。Loc(filenumber)返回一个Long在已打开的文件中指定当前读写位置Seek(filenumber)返回一个Long在Open语句打开的文件中指定当前的读写位置参见VBA语法基础(上)VBA语法基础下六VBA对象模型VBA对象模型一概述对象(object)是一些相关的变量和方法的软件集。VBA是一种面向对象的编程语言。对象是VisualBasic的结构基础VBA应用程序就是由许多对象组成。VBA对象模型就是应用程序对象布局的层次因为一些对象包含在其他对象中这就决定了其外观显示为树状或者为层次结构。对象可分为集合对象和独立对象两种。独立对象代表一个Word元素如文档、段落、书签或单独的字符。集合也是一个对象该对象包含多个其他对象通常这些对象属于相同的类型例如一个集合对象中可包含文档中的所有书签对象。修改与对象相关的方法或属性就可以定制对象也可修改整个的对象集合。VBA对象模型把后台复杂的代码和操作封装在易于使用的对象、方法、属性和事件中这样开发者只需要面对相对简单和直观的对象语法。提高了应用程序的简单性和可重复利用性。二MicrosoftOffice对象模型VBA将MicrosoftOffice中的每一个应用程序都看成一个对象。每个应用程序都由各自的Application对象代表。,在Word中Application对象中包容了Word的菜单栏、工具栏、Word命令等的相应对象以及文档对象等等。,Excel对象模型:在Excel中Application对象中包容了Excel的菜单栏、工具栏等的相应对象以及工作表对象和图表对象等等。,在Access中Application对象中包容了Access的菜单栏、工具栏等的相应对象以及报表对象和窗体对象等等。,在PowerPoint中Application对象中包容了PowerPoint的菜单栏、工具栏等的相应对象以及演示文档对象等等。三VBA对象模型基础语法属性:属性是对象的一种特性或该对象行为的一个方面。例如文档属性包含其名称、内容、保存状态以及是否启用修订。若要更改一个对象的特征可以修改其属性值。设置修改对象属性的值:<object><property>=<value>CustFrmCaption=CustomerForm访问获取对象属性的值:<variable>=<object><property>DimvarAsVariantVar=CustFrmCaption方法:方法是对象可以执行的动作。例如只要文档可以打印Document对象就具有PrintOut方法。方法通常带有参数以限定执行动作的方式。如果对象共享共同的方法则可以操作整个对象集合。引用对象方法:<object><methond><argumentlist>ActiveDocumentCheckGrammarDocumentsOpenFileName:="c:Reportdoc"事件:VBA效力于事件驱动的编程模型。程序是为响应事件而执行的。事件是一个对象可以辨认的动作像单击鼠标或按下某键等并且可以写某些代码针对此述动作来做响应。事件可以由系统触发,也可以由用户做动作或程序代码的结果可能导致事件的发生。使用对象变量:在进行程序设计时采用这样的原则:如果需要输入同样的对象的名字全称两次以上就创建一个对象变量以节省输入时间。把对象赋给变量:Set<variable>=<object>DimDocAddAsObjectSetDocAdd=DocumentsAddDimDocAdd=Nothing'释放内存,使用集合对象:在大多数情况下集合都是复数形式的单词。(Excel没有Ranges对象可以添加一个这样的对象。但是不能添加更多的Ranges因为Excel已经做了定义和限制。)Add方法可以添加集合项目。Count属性可以表示集合中元素的数目。四VBE中的对象工具和选项A,对象浏览器:View视图>ObjectBrower对象浏览器B,在线帮助OnlineHelp:VBE>Help>MicroSoftVisualBasicHelp或按F键C,ListPropertiesmethods(列表属性/方法)选项:VBE>Edit编辑>ListPropertiesmethods(列表属性/方法)选项D使用对象库:Tools工具>References引用>选择要添加的库参考:VBA集合对象的安全包装http:thesourceofallevilcomchinaMSDNlibraryarchivestechnicdevelopvbdasp七模块作为一个单元保存在一起的定义、过程、函数和事件处理程序的集合称为模块。每个应用程序都是模块的集合。模块充当了项目的基本构件。它们是存储代码的容器。如果统筹安排模块内的代码,将有利于维护、调试和重复使用代码。如下共有三种类型的模块:,用户窗体:是用于为应用程序提供用户界面,采用.frm扩展名存储的用户窗体。窗体模块包含窗体中的所有控件及其属性。也可以为窗体和控件指定常量和变量声明、过程以及事件过程。窗体模块中的所有声明都默认是Private(私有)不能在窗体外访问。,标准模块:是用于存储通用过程以便其他模块中的过程可以调用采用.bas扩展名存储的代码模块。它们包含常量、类型、变量、过程和函数的声明。标准模块中所有声明都默认是Public(公共的)可以在模块外全局访问。当录制宏时如果不存在该模块Excel会自动为你创建。如果愿意也可以添加附加的模块。Excel和VBA并不关心过程位于哪个模块中只要过程位于打开的工作簿中即可。,类模块:类模块的使用方式与窗体模块相似。两者之间惟一差别是类模块中不包含可见组件。使用类模块可以创建自己的对象。类是对某个对象的定义。它包含有关对象动作方式的信息包括它的名称、方法、属性和事件。要为每个类编写代码必须使用类模块。窗体是类模块的示例。窗体是指包含属性(如字体、名称和标题)、方法(如单击)、预定义行为的对象。当创建窗体时它会成为代码的独立模块。同样所有控件例如命令按钮和文本框都是它们各自类的对象。变量命名前缀规范:数据类型短前缀长前缀ArrayaaryBooleanfbinBytebbitCurrencyccurDateTimedtdtmdatDoubleddblIntegerIintLongllngObjectoobjSinglesngStringsstrVariantvvar八测试与错误处理,测试:()测试代码检查它是否正确。为确保代码能够正常作用必须在指定时间周期内采用不同的样本数据运行它。()如果代码没有按照预想方式正常作用就需要调试它。可以用VBA提供的调试工具调试代码。()尽力模拟代码运行的不同环境并检查其正确性。重点是检查代码的可移植性。()在成功地测试了代码之后可以对观察到的现象进行存档例如代码末正常运行的环境。,错误类型:Error(错误可捕获并用代码处理)并非Bug(程序错误无法捕获)A,语法错误(如输入时关键字或标点符号拼写错误)B,编译错误(如使用对象的方法时该对象并不支持这个方法)C,运行期间错误(如除、打开或关闭并不存在的文档、关闭未打开的文档)D,逻辑错误(逻辑锗误是最难查找的错误类型它们是由程序中使用的逻辑引起的。它们并不显示任何错误消息所以不能提供错误线索及发生的位置。然而有时它们会产生运行期间错误以便确定已经产生锗误的语句。如果编写了模块代码而且该代码包含很多函数而且一个函数调用另一个函数那么不得不调查所有过程以识别错误位置。),调试工具:要确保代码中的变量和表达式按照预想的方式运行可以使用VBA中的各种调试工具跟踪它们。VBE有如下不同的调试工具。()中断模式:A,进入中断模式方法:在过程的开始位置按下F键。使用断点(F键或者单击当前空白指示器栏)。使用Stop语句。当过程运行时按下CtrlBreak键。使用运行期间错误MsgBox对话框。B,退出中断模式方法:从Run(运行)菜单中选择"RunSub|Userform"〔运行子过程用户窗体)或者按下F键或者单击Debug工具栏上的"RunSub|Userform"按钮。从Run菜单中选择Reset(重新设置)选项或者单击Debug工具栏上的Reset按钮()单步执行过程:A,单步执行过程:从Debug菜申中选择StepInto(逐语句)选项单击Debug工具栏上的StepInto按钮按下F键B,跳过过程(跳过已测试无误的过程节省时间):从Debug菜单中选择Stepver选项按下ShintF键单击Debug工具栏上的StepOver按钮C,跳出过程(跳过程剩余部份):从Debug菜单中选择stepOut选项按下Ctrl十shift十F键单击Debug工具栏上的StepOut按钮D,运行到光标处(跳过一组语句):从Debug菜单中选择RugToCursor选项按下CtrlF键E,设置下一条语句为光标所指语句(要警惕会忽略不执行中间的语句):从Debug菜单中选择SetNextStatement或者按下Ctrl十F键。F,SbowNextStatement选项指明下一个将要执行的语句是什么。当需要在Code窗口中监视很多过程、却丢失了跟踪时这个特征就显得非常有用。()监视过程。A,Locals(本地)窗口(显示当前过程中使用所有变量及其值还会显示当前加载窗体和控件的属性。):从Vew(视图)菜单中选LocalsWindow选项单击Debug工具栏上的localswindow按钮B,CallStack对话框(查看所有活动的过程调用):从View菜单中选CallStack选项按下CtrlL键单击Debug工具栏上的CallStack按钮C,Immediate(立即)窗口(可查询并设置变量值,创建或撤销对象,执行单行命令如Debugprintoutputlist):从View菜单中选择ImmediateWindow选项按下CtrlG键单击Debug工具栏上的ImmediateWindow按钮D,Watches窗口(是一个调试工具在中断模式下可使用它更改变量和表达式的值,以查看不同的值如何影响代码):从View菜单中选择WatchWindow选项单击Debug工具栏上的WatchWindow按钮参考:E,AutoDataTips(自动显示数据提示)工具:Toos(工具)菜单中选择Options(选项)Editor(编辑器)选项卡中的AutoDataTips选项。就可以激活变量值自动显示(即在中断模式期间只需把光标放在code窗口中的变量之上该变量的值会自动以提示的方式显示出来。),预防错误A,使用注释B,缩进代码:Tab键或启用Toos(工具)菜单选Options(选项)Editor(编辑器)选项卡中的AutoIndent(自动缩进)C,使代码模块化D,显式声明变量:使用OptionExplicit语句或启用Toos(工具)菜单选Options(选项)Editor(编辑器)选项卡中的RequirevariableDeclaration(需声明变量)复选框。E,避免使用变体Variant(当

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/17

office_VBA教程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利