收藏 分享(赏)

VBA语法.doc

上传人:myw993772 文档编号:7655825 上传时间:2019-05-23 格式:DOC 页数:15 大小:54KB
下载 相关 举报
VBA语法.doc_第1页
第1页 / 共15页
VBA语法.doc_第2页
第2页 / 共15页
VBA语法.doc_第3页
第3页 / 共15页
VBA语法.doc_第4页
第4页 / 共15页
VBA语法.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、VBA语法技巧数据类型“数据类型”是指如何将数据存储在内存中。(1)Boolean表示逻辑数据,可以是 True或 False中的任一个值。占用 2字节的存储空间,取值范围为 True或 False,缺省值为 False。(2)Byte只能表示正数。占用 1字节的存储空间,取值范围为 0-255,缺省值为 0。(3)Currency一种保存货币值数据的特殊数字格式。占用 8字节的存储空间,取值范围为-922337203685477.5808-922337203685477.5807,缺省值为 0。(4)Date一种用于表示日期或时间的专用格式。占用 8字节的存储空间,取值范围为 100年 1月

2、 1日9999年 12月 31日,缺省值为 00:00:00。(5)Decimal一种包含以 10的幂为刻度的十进制数的变体子类型,只能通过 CDec转换函数创建,不是一种独立的数据类型。占用 14字节的存储空间,取值范围为79228162514264337593543950335(不带小数点)或7.9228162514264337593543950335(带 28位小数点),缺省值为 0。(Decimal数据类型是在 Excel 2000中引入的,在以前的版本中不能使用这种数据类型。该数据类型非常特殊,因为不能实际声明它,它是 Variant的子类型,必须使用 CDec函数将一个变量转换为

3、Decimal数据类型)(6)Double存储双精度浮点数,占用 8字节的存储空间,取值范围为负值:-1.79769313486232E3084.94065645841247E-324,正值:1.79769313486232E3084.94065645841247E-324,缺省值为0。(7)Integer表示从-32768-32767 之间的整数,其中一位表示符号,占用 2字节的存储空间,缺省值为 0。(8)Long表示存储为 4个字节空间的带符号的数,其中一位表示符号,取值范围为-2147483648-2147483647,缺省值为 0。(9)Object包含对某个对象的引用(地址),占用

4、 4字节的存储空间,可对任何对象引用,缺省值为 Nothing。(10)Single表示分数、带小数位或指数的数值等单精度数,占用 4字节的存储空间,取值范围为负值:-3.402823E381.401298E-45,正值:1.401298E-453.402823E38,缺省值为 0。(11)String可声明定长和变长的 String数据类型。其中,定长的 String数据类型占用的存储空间为字符串的长度,取值范围为 165400个字符,缺省值等于该字符串长度的空格数。变长的 String数据类型能动态地加长或缩短以存储要求的字符串数,占用的存储空间为 10字节加上字符串的长度,取值范围为 0

5、20亿个字符,缺省值为零长字符串(“”)。(12)VariantVariant字符串类型的存储空间为 22字节加上字符串的长度,其取值范围与变长字符串数据类型的取值范围相同,缺省值为 Empty。Variant数字型的存储空间为 16字节,其取值范围与 Double数据类型的取值范围相同,缺省值为Empty。(13)用户自定义类型允许用户创建一种特殊的数据类型,这种数据类型由 VBA的内部数据类型、数组、对象或其他用户定义类型组成,其存储空间为各个组成部分的存储空间的总和,取值范围与各个组成部分的数据类型的取值范围一致,缺省值为各个组成部分的缺省值。各数据类型之间也可以相互转换。常量(数)常量

6、即在程序执行过程中不发生改变的值或字符串。使用 Const语句声明常量。如:Const Rate=0.25Const NumMonths As Integer=12Public Const myName As String=”BabyPig”而最后一个语句声明了一个公共常量,应放在模块中所有过程之前声明。VBA自身包含有许多内置常数,它们的值都是 VBA预先定义好的,使用内部常数时无需定义这些常数的值。 几个特殊的常数由于有好几种不相同的“无效值”常数,VBA 语言提供了好几种方法,以检验某个变量是否为empty或 null值,或者设置某个变量为 empty或 null值。(1) vbNull

7、和 VarType函数一起使用,用于确定变量是否包含 null。(2) vbNullChar赋值或检测 null字符,null 字符的值为 Chr(0),即 vbNullChar常数相当于将变量赋值为 Chr(0),可用于检测变量,确定它的值是否是一个 null字符。(3) vbNullString赋值或检测零长(空)字符串。(4) Null关键字将 null值赋给 variant变量后,可以通过调用 IsNull函数来检测变量是否是 Null值。(5) vbEmpty检测某个 variant变量是否初始化。(6) Nothing关键字只能和对象变量一起使用,以确定变量是否具有有效的对象引用,

8、此外,Nothing 关键字还可以用于销毁当前的对象引用。变量变量的主要作用是存取数据、提供了数据存放信息的容器。根据变量的作用域不同,可分为局部变量、全局变量,见后面的变量(常量)作用域和生存期介绍。变量命名要注意以下几点:1、有效性。变量以字母开头,中间可以出现数字和一些标点符号,除下划线( _ )作为连字符外,变量名称不能有空格、加号(+)、减号(-)、逗号(,)、句点(.)等符号。2、VBA 不区分大小写。但在变量命名时,最好体现该变量的作用3、不能使用 VBA中的关键字作为变量。4、变量名称中不能有特殊类型的声明字符(#、$、%、&或!)。5、变量名称最多可以包含 254个字符。声明

9、变量其语法为:Dim As 或:Private As 或:Public As 可以在一行中声明多个变量,每个变量之间用逗号分隔开。还有一种声明变量的方法是,将一个字符加在变量名称后面,从而声明变量的数据类型。如Dim MyVar%表示将变量 MyVar声明为整型。一些类型声明符为:数据类型 类型声明字符Integer %Long &Single !Double #Currency String $在模块前加入 Option Explicit语句,将强制声明所使用的所有变量。对象变量在使用对象模型的属性、方法和事件之前,必须创建一个对包含所需属性、方法和事件的类的引用。可以先声明一个局部对象变量

10、以存储该对象引用,然后把对象引用赋给该局部变量。声明对象变量的方法和声明其他类型的变量基本上一样。有三种声明对象变量的方法:(1) Dim myObject As .此方法指向类的类型库,但没有给该变量赋予任何类的实例。此时,变量 myObject被赋值为Nothing。若要用这种方式引用类,就必须利用“引用”对话框向工程添加一个对类模块的引用。若要将类的实例引用赋予该变量,必须在使用该变量之前用 Set语句赋值。如:Set myObject=.(2) Dim myObject As New .此方法将类的新实例引用赋给 Object变量。同样,要用这种方式引用类,必须先利用“引用”对话框向工

11、程添加一个对类模块的引用。(3) Dim myObject As Object此方法将 myObject变量声明为一般的 Object数据类型,这在不能预先知道要创建的对象的数据类型时十分有用。此时,Object 变量被赋值为 Nothing。若要将对象引用赋值给该变量,必须使用CreateObject函数或 GetObject函数。可以用 Private或 Public语句替换 Dim语句,且对象变量的作用域规则和其他类型的变量一样。声明对象变量可以显著地简化代码且加快代码的执行速度。集合(Collection)对象集合对象是其他对象的一个容器。一般有四个方法:(1) Add方法添加一项到集

12、合中。除了可以指定数据外还可以指定键值,通过键值可以访问集合中的成员。(2) Count方法返回集合中的项的个数。(3) Item方法通过集合中的索引(即集合中项的序号)或键(假设该项添加到集合时指定了)检索集合中的成员。(4) Remove方法通过集合中的索引或键删除集合中的成员。可以使用 WithEnd With构造和 For Each Next构造很方便地处理对象和集合,其介绍可参见ExcelVBA编程系列之对象模型(2):初步理解和使用 Excel对象模型一文。运算符运算符是用于完成操作的一系列符号,包括算术运算符、比较运算符、逻辑运算符、字符串运算符等。可用于连接一个或多个语言元素,

13、或者完成一些运算以形成一个表达式。表达式表达式就是变量、常量、运算符的集合,可分为算术表达式、字符串表达式、赋值表达式、布尔表达式等数组数组是一组拥有相同名称同类元素。定义数组后,即创建了数组。数组中单个的数据项称为数组元素,用于访问数组元素的编号称为数组索引号,最小索引号和最大索引号称为边界。在 VBA中,根据数组元素是否变化,分为固定大小的数组和动态数组,根据数组的维数又可分为一维数组和多维数组。1、创建数组用 Dim语句来定义固定大小的数组,即声明一个数组。如Dim myArray(9) As Integer上面的代码创建一个名为 myArray含有 10个数组元素的一维数组。注意,所有

14、 VBA数组的下界均从 0开始,因此上面的代码所创建的数组元素从 myArray(0)到 myArray(9)。在 Dim语句中不指明数组元素的个数来声明动态数组,如Dim myDynamicArray() As Integer使用 ReDim关键字重新定义数组的大小:ReDim myDynamicArray(10)也可以用 ReDim关键字同时声明一个动态数组并指定该数组的元素个数:ReDim myDynamicArray(5) As IntegerVBA没有限制重新定义动态数组大小的次数,但在重新定义数组大小时,原有的数组数据就会丢失。如果需要保留原来的数据,可以使用 Preserve关键

15、字:ReDim Preserve myDynamicArray(5)需要注意的是,如果重新定义数组时减小了数组的大小,则会丢失被缩减了的那部分元素的数据。当然,与声明变量一样,也可以用 Public语句声明公共数组。2、确定数组的边界可以使用 UBound函数和 LBound函数分别获取数组的最大边界和最小边界。默认情况下,VBA 的数组的下界是从 0开始的,可以在模块的声明部分使用 Option Base语句来改变模块中数组的起始边界。如Option Base 1该语句使数组元素的索引号从 1开始。也可以在定义数组时指定数组的上界和下界,如Dim ( to ) As 3、多维数组多维数组可以

16、在每个数组元素中存储一组数据,因此,多维数组的每个数组元素都包含一个数组。与一维数组相同,可以使用下面的两种方法创建多维数组:(1)Dim (,) As (2)Dim ( to , to ,) As 与一维数组相似,多维数组也可以是动态的。4、引用数组中的元素可以使用数组名称和一个索引号来引用数组中的某个特定的元素。内置函数VBA 中包含各种内置函数,可以简化计算和操作。在 VBA 表达式中使用函数的方式与使用工作表公式中函数的方式相同。在 VBA 代码中,也可以使用很多 Excel 工作表函数,即使用 WorksheetFunction 对象调用工作表函数。但是不能使用具有与 VBA 内置函

17、数功能相同的工作表函数。基本语句1、控制程序流程语句(1) GoTo语句该语句将执行的程序转到指定的标签所在的语句指令,但不能转移到过程之外的指令。例如,在进行错误捕捉时,发生错误后,程序转移至标签所在处执行。(2) IfThen语句这种类型的语句用于条件判断中,当满足条件时,执行相应的语句;当条件不满足时,执行其它的操作。基本语法为:If Then If Then语句有几种形式分别用于不同的情况:当只有一个条件时,可使用下面的结构:If Then Else 其中,Else 子句可选。如果该语句不在同一行中,则应在后面加上 End If语句,即:If Then指令End If或:If Then

18、指令Else指令End If当条件为真时,执行 Then后面的语句并结束 IfThen语句的执行,否则执行 Else后面的语句或结束 IfThen语句的执行。当有两个或多个条件时,可使用嵌套的 If Then 结构:If Then指令ElseIf Then指令Else指令End If上面只是两层嵌套,可以根据情况使用多层嵌套。当条件为真时,执行 Then后面的语句并结束IfThen语句的执行,否则判断条件 1,当条件 1为真时,执行 Then后面的语句并结束 IfThen语句的执行,否则执行 Else后面的指令。(3) Select Case语句当需要作出三种或三种以上的条件判断时,最后使用

19、Select Case语句。其基本语法为:Select Case Case 条件表达式 1指令Case 条件表达式 2指令Case Else指令End Select当某个条件表达式与测试表达式相匹配时,则执行其后的指令,否则执行 Else(如果有的话)后的指令,然后结束 Select Case块的执行。此外,Select Case 语句还可以嵌套。2、循环语句循环即重复执行某段代码。在 VBA中,有多种可以构成循环的语句结构。(1) For Next 循环其语法如下:For To step 步长指令Exit For指令Next 计数器从开始到结束,反复执行 For和 Next之间的指令块,除非

20、遇到 Exit For语句,将提前跳出循环。其中,步长和 Exit For语句以及 Next后的计数器均为可选项。ForNext循环中可以再包含 ForNext循环,即 ForNext循环可以嵌套使用。(2) Do While循环只有在满足指定的条件时才执行 Do While循环。有两种形式: 第一种形式Do While 条件指令Exit Do指令Loop当条件满足时执行指令。 第二种形式Do指令Exit Do指令Loop While 条件先执行指令,然后再判断条件,如果条件满足则再次执行指令。其中 Exit Do语句表示提前退出指令块。(3) Do Until循环与 Do While循环一样

21、,也有两种形式; 第一种形式Do Until 条件指令Exit Do指令Loop 第二种形式Do指令Exit Do指令Loop Until 条件执行指令,直到条件满足时退出循环。(4) While Wend循环其语法为:While 指令Wend当条件满足时,则执行指令。过程过程由一组完成所要求操作任务的 VBA语句组成。子过程不返回值,因此,不能作为参数的组成部分。其语法为:Private|Public Static Sub (参数)指令Exit Sub指令End Sub说明:(1) Private为可选。如果使用 Private声明过程,则该过程只能被同一个模块中的其它过程访问。(2) Pu

22、blic为可选。如果使用 Public声明过程,则表明该过程可以被工作簿中的所有其它过程访问。但是如果用在包含 Option Private Module语句的模块中,则该过程只能用于所在工程中的其它过程。(3) Static为可选。如果使用 Static声明过程,则该过程中的所有变量为静态变量,其值将保存。(4) Sub为必需。表示过程开始。(5) 为必需。可以使用任意有效的过程名称,其命名规则通常与变量的命名规则相同。(6) 参数为可选。代表一系列变量并用逗号分隔,这些变量接受传递到过程中的参数值。如果没有参数,则为空括号。(7) Exit Sub为可选。表示在过程结束之前,提前退出过程。

23、(8) End Sub为必需。表示过程结束。如果在类模块中编写子过程并把它声明为 Public,它将成为该类的方法。函数函数(function)是能完成特定任务的相关语句和表达式的集合。当函数执行完毕时,它会向调用它的语句返回一个值。如果不显示指定函数的返回值类型,就返回缺省的数据类型值。声明函数的语法为:Private|Public Static Function (参数) As 类型指令函数名=表达式Exit Function指令函数名=表达式End Function说明:(1) Private为可选。如果使用 Private声明函数,则该函数只能被同一个模块中的其它过程访问。(2) Pu

24、blic为可选。如果使用 Public声明函数,则表明该函数可以被所有 Excel VBA工程中的所有其它过程访问。不声明函数过程的作用域时,默认的作用域为 Public。(3) Static为可选。如果使用 Static声明函数,则在调用时,该函数过程中的所有变量均保持不变。(4) Function为必需。表示函数过程开始。(5) 为必需。可以使用任意有效的函数名称,其命名规则与变量的命名规则相同。(6) 参数为可选。代表一系列变量并用逗号分隔,这些变量是传递给函数过程的参数值。参数必须用括号括起来。(7) 类型为可选。指定函数过程返回的数据类型。(8) Exit Function为可选。表

25、示在函数过程结束之前,提前退出过程。(9) End Function为必需。表示函数过程结束。通常,在函数过程执行结束前给函数名赋值。函数可以作为参数的组成部分。但是,函数只返回一个值,它不能执行与对象有关的动作。如果在类模块中编写自定义函数并将该函数的作用域声明为 Public,这个函数将成为该类的方法。事件处理过程要对一个控件事件编写事件处理程序,应先打开窗体的代码窗口并从可用对象的下拉列表中选择所需的控件。然后,从该控件的可用事件下拉列表中选择所用的事件。此时,对事件处理程序的定义语句就会自动出现在代码窗口中,就可以直接编写事件处理程序了。在 Excel 中,有下面几类事件,即 Exce

26、l 应用程序事件、工作簿事件、工作表事件、图表事件、用户窗体事件等。类模块类模块是存放共享变量以及共享代码的存储库。创建一个类模块,实际上也是在创建一个 COM(组件对象模型)接口。因此,类模块允许通过一个由属性、方法和事件组成的可编程接口向外界描述应用程序,同时保证保留对应用程序的控制权。也就是说,类模块能够让程序实现“封装”,这样,在其它工程中可以直接使用某类模块而不需要访问源代码。此外,可以使用类来创建自已的库,如果要使用的话,只需要在任何新的工程中添加一个对该类的引用就行了。并且,如果要改变程序,只需对类模块改动就行了,而不需要在程序的每个部分都作改动。属性过程属性过程(propert

27、y procedure)是特殊的过程,用于赋予和获取自定义属性的值。属性过程只能在对象模块如窗体或类模块中使用。有三种属性过程:Property Let给属性赋值Property Get获取属性的值Property Set将对象引用赋给属性引用调用子过程和函数过程子过程可以用下面三种方法调用。第一种使用 Call 语句:Call DoSomething(参数 1,参数 2,)如果使用 Call 语句,就必须用小括号将参数列表括起来。第二种是直接利用过程名:DoSomething 参数 1,参数 2,此时,不用在参数列表两边加上括号。如果不想使用函数的返回值,可以用上述任一种方法调用函数。否则,

28、可以用函数名作为表达式的组成部分,如If GetFunctionResult(parameter)=1 Then如果用函数调用作为表达式的一部分,参数列表必须放在小括号中。第三种是使用 Run 方法。在过程间传递参数在很多情况下,需要在子过程或函数中调用另一个自定义函数或子过程,这时,在被调用过程中就要用到在调用过程中使用的某个变量。因此,可把该变量作为参数传递给被调用过程。不管被调用过程是在同一模块、同一工程中的过程,还是在远程服务器上的类中的一个方法,从一个过程向另一个过程传递变量的原理都是一样的。被调用过程(而不是调用过程)决定了变量如何从调用过程传递到被调用过程。1、VBA 允许用两种

29、不同的方式在过程和组件之间传递参数。在子过程或函数的定义部分,可以指定参数列表中的变量的传递方式:ByRef(按引用)或者 ByVal(按值)。(1) ByRef这是 VBA中在过程间传递变量的默认方法。ByRef 是指按引用传递变量,即传递给被调用过程的是原变量的引用。因此,如果改变了被调用过程中的变量值,其变化就会反映到调用过程中的那个变量,因为它们实际上是同一个变量。(2) ByVal如果使用 ByVal关键字传递变量,被调用过程获得的就是该变量的独立副本。因此,改变被庙用过程中该变量的值不会影响调用过程中该变量原来的值。2、Optional 参数Optional关键字用来指定某个特定的

30、参数并不一定要传递,即为可选参数。但是,该参数必须放在最后。3、ParamArray使用 ParamArray关键字能够使过程按受一组数目可变的参数。ParamArray 参数必须是参数列表中的最后一个参数,而且不能在使用了 Optional关键字的参数列表中使用 ParamArray参数。变量(常量)作用域和生存期有时需要在工程内的所有过程中使用某个变量,而有时某些变量又只需要在某些特定的过程中用到,变量的这种可见性称为变量作用域。变量存在和作用的时间,称为变量的生存期。变量或常数在程序中声明的位置决定了变量的作用域和生存期。总的说来,在模块的声明部分用 Private关键字声明的变量可以被

31、模块中的所有过程使用;在模块的声明部分用 Public关键字声明的变量可以被整个工程使用;若某个对象引用指向某类模块,则在该类模块的声明部分用 Public关键字声明的变量可以被整个工程使用;在子过程或函数中用Dim语句声明的变量只能被声明这些变量的过程使用。(1) 过程级作用域在一个过程(即子过程或函数)内声明的变量只能在该过程内使用,其生存期在执行了 End Sub或End Function语句后结束。因此,可以在不同的过程中定义具有相同名称的不同变量。声明过程级作用域的变量,在过程中用 Dim语句声明变量。此外,还有一种具有过程级作用域的特殊变量,称为静态变量。静态变量是在过程中定义的,

32、尽管这种变量也具有过程级作用域,但是它具有模块级的生存期。这意味着只能在定义静态变量的过程内使用这些变量,但是变量的值在两次过程调用之间是保持不变的。用 Static关键字声明静态变量:Static lngExcuted As Long还可以声明一个过程为静态过程,在这种情况下,在过程中声明的所有变量都被认为是静态变量,而且它们的值在两次过程调用之间都会保持不变,如Static Procedure MyProcedure()Dim iCtr As Integer(2) 模块级或私有作用域具有模块级作用域的变量可以被某个模块内的所有子过程和函数使用,也可以在模块级生存期内保存在内存中。在模块的声明部分(即任何子过程或函数外),用 Dim语句或 Private语句声明变量来创建一个具有模块级作用域的变量。(3) Friend作用域Friend关键字只能用于在对象模块(如类模块或窗体模块)中的变量和过程的声明。用 Friend声明的变量允许工程中的其他对象模块访问原模块中的变量或方法,但是不需要用 Public语句声明这些变量或方法。(4) 公共作用域在过程外使用 Public语句声明的变量可以被当前工程中的所有模块使用。注释“注释”就是嵌入在代码中的描述性文本,VBA 完全忽略注释中的文本。要在代码中插入注释,只需在前面加上单引号,即在一行中以单引号()开始。注释应该表达有用的信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报