还剩5页未读,继续阅读
文本内容:
(数据类型数据类型〃是指如何将数据存储在内存中)表示逻辑数据,可以是l Boolean或中的任一个值,占用字节的存储空间,取值范围为或缺省值为True False2True Fais e,False(()只能表示正数占用字节的存储空间,取值范围为缺省值为)2Byte10—255,03Curr一种保存货币值数据的特殊数字格式占用字节的存储空间,取值范围为一e ncy8922337(缺省值为)一种用于表
203685477.5808—9223372036854775807,04Date示日期或时间的专用格式占用字节的存储空间,取值范围为年月日——年8100119999月日,缺省值为(有关在中使用日期和时间的详细介绍请见后面的一123100:00:00VBA)系列文章()一种包含以的幕为刻度的十进制数的变体子类型,只能通过5Decimal10转换函数创建,不是一种独立的数据类型占用字节的存储空间,取值范围为CDec14±792(不带小数点)或±
281625142643375935439503357.9228162514264337593((带位小数点),缺省值为数据类型是在中引543950335280Decima1E xc el2000入的,在以前的版本中不能使用这种数据类型该数据类型非常特殊,因为不能实际声明它,(它是的子类型,必须使用函数将一个变量转换为数据类型))Va riant CDecDecima16D存储双精度浮点数,占用字节的存储空间,取值范围为负值ouble8正值-
1.79769313486232E308--
4.94065645841247E—324,
1.79769313486232E308缺省值为()表示从一之间的整—
4.94065645841247E—324,
0.7Integer32768-32767数,其中一位表示符号,占用字节的存储空间,缺省值为()表示存储为个字节
20.8Long4空间的带符号的数,其中一位表示符号,取值范围为一缺省值为2147483648-2147483647,()包含对某个对象的引用(地址),占用字节的存储空间,可对任何对象引用,
0.9Object4缺省值为()表示分数、带小数位或指数的数值等单精度数,占用字节Nothin g10Single4的存储空间,取值范围为负值:一正值3402823E38—
1.401298E-45,:
1.401298缺省值为()可声明定长和变长的数据类型其E-45——
3.402823E38,011Strin gString中,定长的数据类型占用的存储空间为字符串的长度,取值范围为个字St ri ng1——65400符,缺省值等于该字符串长度的空格数变长的数据类型能动态地加长或缩短以存储要String求的字符串数,占用的存储空间为字节加上字符串的长度,取值范围为亿个字符,100——20缺省值为零长字符串(有关数据类型及处理和操作字符串数据的内置函数的详细介String VBA)(绍请见后面的一系列文章.)字符串类型的存储空间为字节加上字12VariantV aria nt22符串的长度,其取值范围与变长字符串数据类型的取值范围相同,缺省值为Empt yo Varian数字型的存储空间为字节,其取值范围与数据类型的取值范围相同,缺省值为t16Double)(有关门数据类型的进一步介绍见后面的一系列文章()用户自定义Empty Vaa nt13类型允许用户创建一种特殊的数据类型,这种数据类型由的内部数据类型、数组、对象或VBA其他用户定义类型组成,其存储空间为各个组成部分的存储空间的总和,取值范围与各个组成部分的数据类型的取值范围一致,缺省值为各个组成部分的缺省值(有关用户自定义类型的进一步介绍请见后面的一系列文章.)各数据类型之间也可以相互转换(有关数据类型转换(的详细介绍请见后面的一系列文章)(有关数字数据类型、、B yt e I ntegerLong Single、、)及相应的内置函数的详细介绍请见后面的一D ou b1e Curr e ncyDecimal VariantVBA系列文章)常量(数)常量即在程序执行过程中不发生改变的值或字符串使用语句声明常量,如ConstCons tRate=0o25Const Nu mM o nths AsI nte ger=12P ub1i cConst myNameA sStri〃〃而最后一个语句声明了一个公共常量,应放在模块中所有过程之前声明ng=BabyPig VBA自身包含有许多内置常数,它们的值都是预先定义好的,使用内VBA部常数时无需定义这些常数的值,■几个特殊的常数由于有好几种不相同的无效值“常数,VB语言提供了好几种方法,以检验某个变量是否为或值,或者设置某个变量为A emptynull empty(或值)和「函数一起使用,用于确定变量是否包含null lvbNuU VaType null(()赋值或检测字符,字符的值为「)常2vbNu1IChar nullnuU Ch0,g|J vbNu1IChar(数相当于将变量赋值为()可用于检测变量,确定它的值是否是一个字符)Ch r0,null3vbNu赋值或检测零长(空)字符串()关键字将值赋给变量后,可1I String4Null nul1variant⑸以通过调用函数来检测变量是否是值检测某个变量是否IsNu IINull vbEmpty vdr ian t(初始化)关键字只能和对象变量一起使用,以确定变量是否具有有效的对象6Noth i ng引用,此外,关键字还可以用于销毁当前的对象引用(关于常量的介绍还可见《Not hingExce)编程系列之数据类型():常量》1VBA1变量变量的主要作用是存取数据、提供了数据存放信息的容器,根据变量的作用域不同,可分为局部变量、全局变量,见后面的变量(常量)作用域和生存期介绍变量命名要注意以下几点、有效性变量以字母开头,中间可以出现数字和一些标点符号,除下划线(_)作为连字符1外,变量名称不能有空格、加号(+)、减号(-)、逗号(,)、句点(.)等符号、不2VBA区分大小写但在变量命名时,最好体现该变量的作用、不能使用中的关键字作为变量3VBA、变量名称中不能有特殊类型的声明字符(#、$、%、或!)、变量名称最多可以包含
4.5254个字符(有关的命名规则的详细介绍请见后面的一系列文章)VBA声明变量其语法为:〈变量名〉v数据类型〉或:〈变量名〉v数据类型〉或:Dim AsPrivate AsPublic〈变量名〉〈数据类型〉可以在一行中声明多个变量,每个变量之间用逗号分隔开还有一As种声明变量的方法是,将一个字符加在变量名称后面,从而声明变量的数据类型如Dim My表示将变量声明为整型一些类型声明符为数据类型类型Var%My Var声明字符Integer%LongS($在模块前加入ingle Double#C urrenc y@S tr ingOp语句,将强制声明所使用的所有变量t i onEx plici t对象变量在使用对象模型的属性、方法和事件之前,必须创建一个对包含所需属性、方法和事件的类的引用可以先声明一个局部对象变量以存储该对象引用,然后把对象引用赋给该局部变量声明对象变量的方法和声明其他类型的变量基本上一样有三种声明对象变量的方法:()V库名〉.〈类名〉此方法指向类的类型库,但没有给该变量赋予1D i m myObj ec t As任何类的实例此时,变量丫型戊被赋值为|\川四若要用这种方式引用类,就必01011须利用引用〃对话框向工程添加一个对类模块的引用若要将类的实例引用赋予该变量,必须在使用该变量之前用语句赋值如〈库名〈类名〉()Set Set myObject=2Dim myObject〈库名〉.〈类名〉此方法将类的新实例引用赋给变量.As New0b ject同样,要用这种方式引用类,必须先利用引用”对话框向工程添加一个对类模块的引用3此方法将变量声明为一般的数据类型,这在不Dim my ObjectA s0b jec tmyObject0bj ect能预先知道要创建的对象的数据类型时十分有用此时,变量被赋值为.若0bject No thin g要将对象引用赋值给该变量,必须使用函数或函数可以用CreateObject G e tobjectPrivate或语句替换语句,且对象变量的作用域规则和其他类型的变量一样声明对象变Pub1i cDim量可以显著地简化代码且加快代码的执行速度有关对象模型的基础知识见知编程系Exce BA列之对象模型初步理解和使用对象模型一文2Excel集合对象Collec ti on集合对象是其他对象的一个容器一般有四个方法方法添加一项到集合中.除了可1Add以指定数据外还可以指定键值,通过键值可以访问集合中的成员.方法返回集合中的2Count项的个数,方法通过集合中的索引即集合中项的序号或键假设该项添加到集合时指3Item定了检索集合中的成员方法通过集合中的索引或键删除集合中的成员.可以使4Re move用构造和构造很方便地处理对象和集合,其介绍可参见With…End WithFor Eac h…Ne xt Ex编程系列之对象模型:初步理解和使用对象模型一文celVB A2Exc el运算符运算符是用于完成操作的一系列符号,包括算术运算符、比较运算符、逻辑运算符、字符串运算符等可用于连接一个或多个语言元素,或者完成一些运算以形成一个表达式.表达式表达式就是变量、常量、运算符的集合,可分为算术表达式、字符串表达式、赋值表达式、布尔表达式等详细的内容请见编程系列:运算符和表达式VBA数组数组是一组拥有相同名称同类元素定义数组后,即创建了数组数组中单个的数据项称为数组元素,用于访问数组元素的编号称为数组索引号,最小索引号和最大索引号称为边界在VBA中,根据数组元素是否变化,分为固定大小的数组和动态数组,根据数组的维数又可分为一维数组和多维数组、创建数组用语句来定义固定大小的数组,即声明一个数组如1Dim Dim上面的代码创建一个名为含有个数组元素的一维数组myArray9As IntegermyArr a y10注意,所有数组的下界均从开始,因此上面的代码所创建的数组元素从到VBA0myArr ay0在语句中不指明数组元素的个数来声明动态数组,如myA rray9Dim Di mmyDyn amicA rro使用关键字重新定义数组的大小:也可ay AsInte gerReDim ReDi mmyD y namicArray10以用关键字同时声明一个动态数组并指定该数组的元素个数:ReDim ReDim myDynamicAr ra没有限制重新定义动态数组大小的次数,但在重新定义数组大小时,y5A sIn te ge rVBA原有的数组数据就会丢失如果需要保留原来的数据,可以使用关键字Preserve ReDimPrese需要注意的是,如果重新定义数组时减小了数组的大小,则会丢失r ve myDynami cAr ray5被缩减了的那部分元素的数据当然,与声明变量一样,也可以用语句声明公共数组Publ iC、确定数组的边界可以使用函数和函数分别获取数组的最大边界和最小边2UBound LBound界默认情况下,的数组的下界是从开始的,可以在模块的声明部分使用VBA0Opt i on Base语句来改变模块中数组的起始边界如该语句使数组元素的索引号从开始Op t ion Base11也可以在定义数组时指定数组的上界和下界,如v数组名〉(〈下界〉v上界〉)〈数Dim toAs据类型〉、多维数组多维数组可以在每个数组元素中存储一组数据,因此,多维数组的每个数3组元素都包含一个数组与一维数组相同,可以使用下面的两种方法创建多维数组()1D(〈数组名〉(〈数组元素数〉,〈数组元素数>)〈数据类型〉)(数im12,……As2Dim)组名〉(〈下界〉〈上界>,〈下界〉〈上界〉,……〈数据类型〉与一维数组相to t0As似,多维数组也可以是动态的、引用数组中的元素可以使用数组名称和一个索引号来引用4数组中的某个特定的元素(有关数组的进一步介绍及其应用请见后面的一系列文章)内置函数中包含各种内置函数,可以简化计算和操作在表达式中使用函数的方式与使用工V BAVBA作表公式中函数的方式相同在代码中,也可以使用很多工作表函数,即使用VB AExcel对象调用工作表函数但是不能使用具有与内置函数功能相同的工WorksheetFunc tion VBA作表函数(有关内置函数的进一步介绍及应用请见后面的一系列文章)基本语句、控制程序流程语句()语句该语句将执行的程序转到指定的标签所在的语句指令,11G oTo但不能转移到过程之外的指令,例如,在进行错误捕捉时,发生错误后,程序转移至标签所在处执行()语句这种类型的语句用于条件判断中,当满足条件时,执行相应的语2If…Then句;当条件不满足时,执行其它的操作.基本语法为〈条件〉〈条件If Then满足时的执行语句〉语句有几种形式分别用于不同的情况
①当只有一个条件时,If…Then可使用下面的结构:开〈条件〉〈条件满足时的执行语句〉[条件不满足时的执行语Then Elsev句〉]其中,日子句可选如果该语句不在同一行中,则应在后面加上语句,即:se End If If〈条件>[指令]或条件〉[指令][指令]当条件为真Then EndIf Ifv Then Else EndI f时,执行后面的语句并结束语句的执行,否则执行日后Then If…Then se面的语句或结束语句的执行
②当有两个或多个条件时,可使用嵌套的If...Then If…T结构〈条件〉[指令旧〈条件>[指令][][指令]hen IfThen s eIf1Th enElse上面只是两层嵌套,可以根据情况使用多层嵌套,当条件为真时,执行后面的语句EndIfThen并结束语句的执行,否则判断条件当条件为真时,执行后面的语句并结If...Th en1,1The n(束语句的执行,否则执行日后面的指令)语句当需要作出三种If…Then se3Sele ct Case或三种以上的条件判断时,最后使用语句其基本语法为:<测试表Sei ectCase Select Case达式〉仁条件表达式][指令][2561Cas条件表达式][指令]……[][指令]当某个条件表达式与测试e2Case ElseEnd Se1ect表达式相匹配时,则执行其后的指令,否则执行日(如果有的话)后的指令,然后结束se Seiect块的执行.此外,语句还可以嵌套.(有关程序控制语句的进一步介绍和示例CaseSelectCase请见后面的一系列文章)、循环语句循环即重复执行某段代码在中,有多种可以构成2VBA循环的语句结构()循环其语法如下〈计数器=开始数〈结束数〉1For...Nex t For ATo[步长][指令][][指令][计数器]从开始到结束,反复执行和step Exit For Next For之间的指令块,除非遇到语句,将提前跳出循环其中,步长和语句以及Next Exit Fo rExitFor后的计数器均为可选项循环中可以再包含循环,即循Next For...Next For…N extFor…Next(环可以嵌套使用.)循环只有在满足指定的条件时才执行循环,有2Do Whi IeDo Whi1e两种形式:■第一种形式[Do Wh条件][指令][][指令]当条件满足时执行指令■第二种形式[指令]ile Exit Do Loop Do[][指令][条件]先执行指令,然后再判断条件,如果条件满足则再次Exit DoLoop While(执行指令其中语句表示提前退出指令块)循环与循环一Exit Do3Do UntilDo Whi1e样,也有两种形式;■第一种形式[条件][指令][Do Unti1Exi][指令]■第二种形式[指令][][指令][条件]t DoL oopDoEx itDoL oop Unti I(执行指令,直到条件满足时退出循环)循环其语法为〈条件》4While...Wend Whi1e[指令]当条件满足时,则执行指令.(有关循环语句的进一步介绍和示例请见后面的一Wend系列文章)过程过程由一组完成所要求操作任务的语句组成子过程不返回值,因此,不能作为参数的组成VBA部分其语法为:[][]〈过程名〉([参数])[指令][P riva te|Public StaticS ub Exit(][指令]说明)为可选,如果使用声明过程,则该过程只能Sub EndSub:1Private Private(被同一个模块中的其它过程访问)为可选如果使用声明过程,则表明该2Public Public过程可以被工作簿中的所有其它过程访问但是如果用在包含语句的模Option PrivateMo dule块中,则该过程只能用于所在工程中的其它过程()为可选如果使用声明过.3Stati cStati c((程,则该过程中的所有变量为静态变量,其值将保存)为必需表示过程开始)4S ub5〈过程名〉为必需可以使用任意有效的过程名称,其命名规则通常与变量的命名规则相同()参数为可选代表一系列变量并用逗号分隔,这些变量接受传递到过程中的参数值如果6((没有参数,则为空括号)为可选表示在过程结束之前,提前退出过程)7Ex itSub8为必需表示过程结束,如果在类模块中编写子过程并把它声明为它将成为该End SubP ublic,类的方法(关于过程的详细介绍和示例见后面的一系列文章)函数函数()是能完成特定任务的相关语句和表达式的集合当函数执行完毕时,它会向调functi on用它的语句返回一个值如果不显示指定函数的返回值类型,就返回缺省的数据类型值声明函数的语法为[][]〈函数名〉([参数])[P ri va te|P ub lieStatic FunctionAs类型][指令][函数名=表达式][][指令][函数名=表达式]Exit FunctionEnd Function说明()为可选如果使用声明函数,则该函数只能被同一个模块中的其它:1Private Private(过程访问)为可选如果使用声明函数,则表明该函数可以被所有2Pub liePublic ExcelVBA工程中的所有其它过程访问不声明函数过程的作用域时,默认的作用域为()Publico3St atic(为可选.如果使用声明函数,则在调用时,该函数过程中的所有变量均保持不变)S tatic4(为必需表示函数过程开始)〈函数名,为必需可以使用任意有效的函数名称,Function5(其命名规则与变量的命名规则相同)参数为可选代表一系列变量并用逗号分隔,这些6(变量是传递给函数过程的参数值参数必须用括号括起来)类型为可选指定函数过程7(返回的数据类型)为可选表示在函数过程结束之前,提前退出过程8ExitFu netion()为必需表示函数过程结束,通常,在函数过程执行结束前给函数名赋9End Function值.函数可以作为参数的组成部分.但是,函数只返回一个值,它不能执行与对象有关的动作如果在类模块中编写自定义函数并将该函数的作用域声明为这个函数将成为该类的方法Public,(关于过程的详细介绍和示例见后面的一系列文章)Fun ction事件处理过程要对一个控件事件编写事件处理程序,应先打开窗体的代码窗口并从可用对象的下拉列表中选择所需的控件然后,从该控件的可用事件下拉列表中选择所用的事件止匕时,对事件处理程序的定义语句就会自动出现在代码窗口中,就可以直接编写事件处理程序了在中,有下Ex eel面几类事件,即应用程序事件、工作簿事件、工作表事件、图表事件、用户窗体事件等.Excel(关于中事件处理的介绍请见后面的一系列文章)Excel类模块类模块是存放共享变量以及共享代码的存储库创建一个类模块,实际上也是在创建一个COM(组件对象模型)接口,因此,类模块允许通过一个由属性、方法和事件组成的可编程接口向外界描述应用程序,同时保证保留对应用程序的控制权也就是说,类模块能够让程序实现封装〃,这样,在其它工程中可以直接使用某类模块而不需要访问源代码止匕外,可以使用类来创建自己的库,如果要使用的话,只需要在任何新的工程中添加一个对该类的引用就行To并且,如果要改变程序,只需对类模块改动就行了,而不需要在程序的每个部分都作改动(有关类模块知识的详细介绍请见后面的一系列文章)属性过程属性过程()是特殊的过程,用于赋予和获取自定义属性的值.属性过程p roperty pro cedure只能在对象模块如窗体或类模块中使用有三种属性过程:给属性赋值P rope rtyLet Proper ty获取属性的值将对象引用赋给属性引用Get Property Set调用子过程和函数过程子过程可以用下面三种方法调用,第一种使用语句(参数参数CdU Ca11Do Something1,)如果使用语句,就必须用小括号将参数列表括起来•第二种是直接利用过程2,……C all名:参数参数……此时,不用在参数列表两边加上括号如果不想使用函数DoSomething1,2,的返回值,可以用上述任一种方法调用函数否则,可以用函数名作为表达式的组成部分,如()如果用函数调用作为表达式的一部分,参If GetFunctionR esu11p ar amet er=l Then数列表必须放在小括号中,第三种是使用方法(关于过程调用更详细的介绍和示例请见Run后面的一系列文章)在过程间传递参数在很多情况下,需要在子过程或函数中调用另一个自定义函数或子过程,这时,在被调用过程中就要用到在调用过程中使用的某个变量因此,可把该变量作为参数传递给被调用过程不管被调用过程是在同一模块、同一工程中的过程,还是在远程服务器上的类中的一个方法,从一个过程向另一个过程传递变量的原理都是一样的被调用过程(而不是调用过程)决定了变量如何从调用过程传递到被调用过程.、允许用两种不同的方式在过1VB A程和组件之间传递参数,在子过程或函数的定义部分,可以指定参数列表中的变量的传递方式(按引用)或者(按值).()这是中在过程间传递变量的默认ByR ef ByVa11ByRef VBA方法.是指按引用传递变量,即传递给被调用过程的是原变量的引用因此,如果改变B yRef了被调用过程中的变量值,其变化就会反映到调用过程中的那个变量,因为它们实际上是同一(个变量)如果使用关键字传递变量,被调用过程获得的就是该变量的独立副2ByVai ByVai本因此,改变被庙用过程中该变量的值不会影响调用过程中该变量原来的值、2Opt io nal参数关键字用来指定某个特定的参数并不一定要传递,即为可选参数但是,该参数Opt ional必须放在最后、使用关键字能够使过程按受一组数目可变的参3Pa ramArray ParamArra y数参数必须是参数列表中的最后一个参数,而且不能在使用了关键ParamArra yOpti on aI字的参数列表中使用参数Param Array变量(常量)作用域和生存期有时需要在工程内的所有过程中使用某个变量,而有时某些变量又只需要在某些特定的过程中用到,变量的这种可见性称为变量作用域,变量存在和作用的时间,称为变量的生存期变量或常数在程序中声明的位置决定了变量的作用域和生存期.总的说来,在模块的声明部分用Private关键字声明的变量可以被模块中的所有过程使用;在模块的声明部分用关键字声明的Pub1ic变量可以被整个工程使用;若某个对象引用指向某类模块,则在该类模块的声明部分用Pu blie关键字声明的变量可以被整个工程使用;在子过程或函数中用语句声明的变量只能被声明Dim(这些变量的过程使用)过程级作用域在一个过程(即子过程或函数)内声明的变量只能1在该过程内使用,其生存期在执行了或语句后结束.因此,可以在不同End SubEnd Function的过程中定义具有相同名称的不同变量声明过程级作用域的变量,在过程中用语句声明Dim变量此外,还有一种具有过程级作用域的特殊变量,称为静态变量.静态变量是在过程中定义的,尽管这种变量也具有过程级作用域,但是它具有模块级的生存期这意味着只能在定义静态变量的过程内使用这些变量,但是变量的值在两次过程调用之间是保持不变的,用关Static键字声明静态变量:还可以声明一个过程为静态过程,在这种情Sta ti cIngExcu ted AsLong况下,在过程中声明的所有变量都被认为是静态变量,而且它们的值在两次过程调用之间都会保持不变,如()()模块级或私Sta ti cProced ureMyProce dure DimiC tr AsIntege r2有作用域具有模块级作用域的变量可以被某个模块内的所有子过程和函数使用,也可以在模块级生存期内保存在内存中在模块的声明部分(即任何子过程或函数外),用语句或Dim Private(语句声明变量来创建一个具有模块级作用域的变量)作用域关键字只能3Friend F riend用于在对象模块(如类模块或窗体模块)中的变量和过程的声明,用声明的变量允许工Friend程中的其他对象模块访问原模块中的变量或方法/旦是不需要用语句声明这些变量或Pub1ic方法,()公共作用域在过程外使用语句声明的变量可以被当前工程中的所有模块使用.4Public注释注释”就是嵌入在代码中的描述性文本,完全忽略注释中的文本要在代码中插入注释,VBA只需在前面加上单引号,即在一行中以单引号开始.注释应该表达有用的信息。
个人认证
优秀文档
获得点赞 0