通过本文主要向大家介绍了arcgis vba编程基础,excel vba编程基础,excel中vba基础编程,vba编程基础知识,excel vba基础教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
11.3.1 了解 Visual Basic 语法
本节解释最常见的语法元素。
11.3.1.1 Activate 方法的语法
语法:object.Activate
在 Activate 方法的语法中,object 是一个所提供信息的占位符,在此例中的代码会返回一个对象。例如,下面的过程会在活动的文档中激活第二个窗口。
Sub MakeActive()
Windows(2).Activate
End Sub
11.3.1.2 MsgBox 函数的语法
语法:MsgBox(prompt[, buttons] [, title] [, helpfile, context])
在 MsgBox 函数的语法中,括号内的参数是此函数的命名参数。方括号所包含的参数是选择性的(在Visual Basic 中不用键入方括号)。在 MsgBox 函数中,唯一必须提供的参数(prompt)是做为提示的文本。
在代码中可以利用位置或名称来指定函数与方法的参数。若利用位置来指定参数,则必须根据语法中的顺序,利用逗号来分隔每一个参数,例如:
MsgBox "Your answer is correct!",0,"Answer Box"
若以名称来指定参数,则须使用参数名称或跟着冒号与等号(:=),最后再加上参数值。可以任何的顺序来指定命名参数,例如:
MsgBox Title:="Answer Box", Prompt:="Your answer is correct!"
函数以及某些方法的语法会利用圆括号将参数封闭起来。这些函数和方法会返回值,所以必须用圆括号将参数封闭起来,才可以赋值给变量。如果忽略返回值或是没有传递所有的参数,则可以不用圆括号。方法若不返回值,则不用将参数用圆括号封闭起来。上述准则不管是使用命名参数或位置参数都适用。
在下面的示例中,MsgBox 函数的返回值是一个号码,它被存储在变量 myVar 中,以用来指示选择的按钮。因为需要用到返回值,所以调用时必须使用圆括号。而另一个消息框则是用来显示变量的值。
Sub Question()
myVar = MsgBox(Prompt:="I enjoy my job.", _
Title:="Answer Box", Buttons:="4")
MsgBox myVar
End Sub
11.3.1.3 选项语句的语法
语法:Option Compare {Binary | Text | Database}
在 Option Compare 语句的语法中,大括号和垂直线指示三项中的强制性选择(在Visual Basic 的语句中不用键入大括号)。例如,下列的语句指出在模块中,字符串的比较是根据文本的排序顺序而不区分大小写。
Option Compare Text
11.3.1.4 Dim 语句的语法
语法: Dim varname[ ( [subscripts] ) ] [As type] [, varname[([subscripts])] [As type]] . . .
在 Dim 语句的语法中,Dim 是必备的关键字。而唯一必备的元素是 varname(变量名)。例如,下列的语句创建三个变量:myVar、 nextVar 和 thirdVar。它们会自动被声明成 Variant 变量。
Dim myVar, nextVar, thirdVar
下面的示例声明了一个String 型的变量。它包含了数据类型,如此可以节省内存并且可帮助从代码中找出错误。
Dim myAnswer As String
若在一个语句中声明好几个变量,则必须包含每一个变量的数据类型。变量在声明时若少了数据类型,则会自动地声明为Variant 。
Dim x As Integer, y As Integer, z As Integer
在下列的语句中,x 与 y 都被指定成 Variant 数据类型,只有 z 被指定成 String 数据类型。
Dim x, y As Integer,Z As String
如果声明一个数组变量,则必须包含圆括号,但下标则是可选的。下列的语句中定义了一个动态数组 myArray。
Dim myArray()
11.3.2 有效地利用数据语法
表11-1 列出VBA 所支持的数据类型,以及存储空间的大小与范围。
注意:
任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节的Integer 数据元所组成的一维数组中的数据,占 8个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。包含一数组的 Variant 比单独的一个数组需要多 12 个字节。
注意:
使用 StrConv 函数把字符串数据从一种类型转换为另一种类型。
除非有其他的指定,否则未声明变量会被指定成 Variant 数据类型。这个数据类型可使写程序变得较容易,但它并不总是使用中最有效率的数据类型。
若有下列情形时必须考虑使用其他的数据类型:
程序非常大并且使用很多变量。
程序的执行速度必须尽可能得快。
将数据直接写到随机存储文件中。
除了 Variant 之外,支持的数据类型包括 Byte、Boolean、 Integer、Long、Single、Double、Currency、Decimal、Date、Object 以及 String。可使用 Dim 语句去声明一个指定类型的变量,例如:
Dim X As Integer
上述语句声明变量 X 是一个整型,其范围介于-32,768~32,767 之间。如果试着去设置超出此范围的数值给 X ,则会有错误发生。如果试着去指定一个分数给 X,则此分数会自动四舍五入。例如:
X = 32768 ' 产生错误。 X = 5.9 ' 设置 x = 6。
11.3.3 Visual Basic 的命名规则
当在 Visual Basic 的模块中为过程、常数、变量以及参数命名时,可以使用下列的规则:
第一个字符必须使用英文字母。
不能在名称中使用空格、句点(.)、惊叹号(!)、或 @、&、 $,# 等字符。
名称的长度不可以超过 255 个字符。
通常,使用的名称不能与 Visual Basic 本身的 Function 过程、语句以及方法的名称相同。必须退出使用与程序语言的关键字相同的名称。若所使用的内在语言函数,语句或方法与所指定的名称相冲突,则必须显示地识别它。常规会将内建函数,语句或方法的名称之前加上关联的类型库的名称。例如,如果有一个名为 Left 的变量,则只能用 VBA.Left 来调用 Left 函数。
不能在范围的相同层次中使用重复的名称。例如,不能在同一过程中声明两个命名为 age 的变量。然而,可以在同一模块中声明一个命名为 age 的私有变量和命名为 age 的过程级别的变量。
注意:
Visual Basic 不区分大小写,但它会在名称被声明的语句处保留大写。
11.3.4 声明变量、常数和数组
11.3.4.1 声明变量
通常会使用 Dim 语句来声明变量。一个声明语句可以放到过程中以创建属于过程的级别的变量。或在声明部分可将它放到模块顶部,以创建属于模块级别的变量。
下面的示例创建了变量 strName 并且指定为 String 数据类型。 Dim strName As String
如果该语句出现在过程中,则变量 strName 只可以在此过程中被使用。如果该语句出现在模块的声明部分,则变量 strName 可以被此模块中所有的过程所使用,但是不能被同一工程中不同的模块所含过程来使用。为了使变量可被工程中所有的过程所使用,则在变量前加上 Public 语句,如以下的示例:
Public strName As String
变量可以声明成下列数据类型中的一种:Boolean、Byte、 Integer、Long、Currency、Single、Double、Date、String(变长字符串)、String * length (定长字符串)、Object 或 Variant。如果未指定数据类型,则 Variant 数据类型被赋予默认。也可以使用 Type 语句来创建用户自定义类型。
可以在一个语句中声明几个变量。而为了指定数据类型,必须将每一个变量的数据类型包含进来。在下面的语句中,变量 intX、 intY、与 intZ 被声明为 Integer 类型。
Dim intX As Integer, intY As Integer, intZ As Integer
在下面的语句中,变量 intX 与 intY 被声明为 Variant 类型;只有intZ 被声明为 Integer 类型。
Dim intX, intY, intZ As Integer
在声明语句中,不一定要提供变量的数据类型。若省略了数据类型,则会将变量设成 Variant 类型。
使用 Public 语句:可以使用 Public 语句去声明公共模块级别变量。
Public strName As String
公有变量可用于工程中的任何过程。如果公有变量是声明于标准模块或是类模块中,则它也可以被任何引用到此公有变量所属工程的工程中使用。
使用 Private 语句:可以使用 Private 语句去声明私有的模块级别变量。
Private MyName As String
私有变量只可使用于同一模块中的过程。
注意:
在模块级别中使用 Dim 语句与使用 Private 语句是相同的。不过使用 Private 语句可以更容易地读取和解释代码。
使用Static 语句:当使用 Static 语句取代 Dim 语句时,所声明的变量在调用时仍保留它原先的值。
使用Option Explicit 语句:在 Visual Basic 中可以简单地通过一个赋值语句来隐含声明变量。所有隐含声明变量都为 Variant 类型,而Variant 类型变量比大多数其他类型的变量需要更多的内存资源。如果显式地声明变量为指定的数据类型,则应用程序将更有效。显式声明所有变量减少了命名冲突以及拼写错误的发生率。
如果不想使Visual Basic 生成隐含声明,可以将Option Explicit 语句放置于模块中所有的过程之前。这一个语句要求对模块中所有的变量做显式地声明。如果模块包含Option Explicit 语句,则当 Visual Basic 遇到一个先前未定义的变量或拼写错误,它会发生编译时间的错误。
可以设置 Visual Basic 程序环境中的某个选项,使得自动在所有新的模块中包含 Option Explicit 语句。
注意: 需显式地声明固定大小的数组与动态数组。
为自动化声明一个对象变量:当使用一个应用程序去控制另外一个应用程序的对象时,应该设置一个对于其他应用程序的类型库的引用。若设置一个引用,则可以根据它们最常指定的类型来声明对象变量。例如,如果是在 Microsoft Word 中,当对 Microsoft Excel 类型库做一引用设置时,可以在 Microsoft Word 中声明 Worksheet 类型的变量来表示 Microsoft Excel 中的Worksheet 对象。
如果使用其他的应用程序去控制 Microsoft Access 对象,在多数情况下,可以根据它们最常指定的类型来声明对象变量。也可以使用关键字
本节解释最常见的语法元素。
11.3.1.1 Activate 方法的语法
语法:object.Activate
在 Activate 方法的语法中,object 是一个所提供信息的占位符,在此例中的代码会返回一个对象。例如,下面的过程会在活动的文档中激活第二个窗口。
Sub MakeActive()
Windows(2).Activate
End Sub
11.3.1.2 MsgBox 函数的语法
语法:MsgBox(prompt[, buttons] [, title] [, helpfile, context])
在 MsgBox 函数的语法中,括号内的参数是此函数的命名参数。方括号所包含的参数是选择性的(在Visual Basic 中不用键入方括号)。在 MsgBox 函数中,唯一必须提供的参数(prompt)是做为提示的文本。
在代码中可以利用位置或名称来指定函数与方法的参数。若利用位置来指定参数,则必须根据语法中的顺序,利用逗号来分隔每一个参数,例如:
MsgBox "Your answer is correct!",0,"Answer Box"
若以名称来指定参数,则须使用参数名称或跟着冒号与等号(:=),最后再加上参数值。可以任何的顺序来指定命名参数,例如:
MsgBox Title:="Answer Box", Prompt:="Your answer is correct!"
函数以及某些方法的语法会利用圆括号将参数封闭起来。这些函数和方法会返回值,所以必须用圆括号将参数封闭起来,才可以赋值给变量。如果忽略返回值或是没有传递所有的参数,则可以不用圆括号。方法若不返回值,则不用将参数用圆括号封闭起来。上述准则不管是使用命名参数或位置参数都适用。
在下面的示例中,MsgBox 函数的返回值是一个号码,它被存储在变量 myVar 中,以用来指示选择的按钮。因为需要用到返回值,所以调用时必须使用圆括号。而另一个消息框则是用来显示变量的值。
Sub Question()
myVar = MsgBox(Prompt:="I enjoy my job.", _
Title:="Answer Box", Buttons:="4")
MsgBox myVar
End Sub
11.3.1.3 选项语句的语法
语法:Option Compare {Binary | Text | Database}
在 Option Compare 语句的语法中,大括号和垂直线指示三项中的强制性选择(在Visual Basic 的语句中不用键入大括号)。例如,下列的语句指出在模块中,字符串的比较是根据文本的排序顺序而不区分大小写。
Option Compare Text
11.3.1.4 Dim 语句的语法
语法: Dim varname[ ( [subscripts] ) ] [As type] [, varname[([subscripts])] [As type]] . . .
在 Dim 语句的语法中,Dim 是必备的关键字。而唯一必备的元素是 varname(变量名)。例如,下列的语句创建三个变量:myVar、 nextVar 和 thirdVar。它们会自动被声明成 Variant 变量。
Dim myVar, nextVar, thirdVar
下面的示例声明了一个String 型的变量。它包含了数据类型,如此可以节省内存并且可帮助从代码中找出错误。
Dim myAnswer As String
若在一个语句中声明好几个变量,则必须包含每一个变量的数据类型。变量在声明时若少了数据类型,则会自动地声明为Variant 。
Dim x As Integer, y As Integer, z As Integer
在下列的语句中,x 与 y 都被指定成 Variant 数据类型,只有 z 被指定成 String 数据类型。
Dim x, y As Integer,Z As String
如果声明一个数组变量,则必须包含圆括号,但下标则是可选的。下列的语句中定义了一个动态数组 myArray。
Dim myArray()
11.3.2 有效地利用数据语法
表11-1 列出VBA 所支持的数据类型,以及存储空间的大小与范围。
注意:
任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节的Integer 数据元所组成的一维数组中的数据,占 8个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。包含一数组的 Variant 比单独的一个数组需要多 12 个字节。
注意:
使用 StrConv 函数把字符串数据从一种类型转换为另一种类型。
除非有其他的指定,否则未声明变量会被指定成 Variant 数据类型。这个数据类型可使写程序变得较容易,但它并不总是使用中最有效率的数据类型。
若有下列情形时必须考虑使用其他的数据类型:
程序非常大并且使用很多变量。
程序的执行速度必须尽可能得快。
将数据直接写到随机存储文件中。
除了 Variant 之外,支持的数据类型包括 Byte、Boolean、 Integer、Long、Single、Double、Currency、Decimal、Date、Object 以及 String。可使用 Dim 语句去声明一个指定类型的变量,例如:
Dim X As Integer
上述语句声明变量 X 是一个整型,其范围介于-32,768~32,767 之间。如果试着去设置超出此范围的数值给 X ,则会有错误发生。如果试着去指定一个分数给 X,则此分数会自动四舍五入。例如:
X = 32768 ' 产生错误。 X = 5.9 ' 设置 x = 6。
11.3.3 Visual Basic 的命名规则
当在 Visual Basic 的模块中为过程、常数、变量以及参数命名时,可以使用下列的规则:
第一个字符必须使用英文字母。
不能在名称中使用空格、句点(.)、惊叹号(!)、或 @、&、 $,# 等字符。
名称的长度不可以超过 255 个字符。
通常,使用的名称不能与 Visual Basic 本身的 Function 过程、语句以及方法的名称相同。必须退出使用与程序语言的关键字相同的名称。若所使用的内在语言函数,语句或方法与所指定的名称相冲突,则必须显示地识别它。常规会将内建函数,语句或方法的名称之前加上关联的类型库的名称。例如,如果有一个名为 Left 的变量,则只能用 VBA.Left 来调用 Left 函数。
不能在范围的相同层次中使用重复的名称。例如,不能在同一过程中声明两个命名为 age 的变量。然而,可以在同一模块中声明一个命名为 age 的私有变量和命名为 age 的过程级别的变量。
注意:
Visual Basic 不区分大小写,但它会在名称被声明的语句处保留大写。
11.3.4 声明变量、常数和数组
11.3.4.1 声明变量
通常会使用 Dim 语句来声明变量。一个声明语句可以放到过程中以创建属于过程的级别的变量。或在声明部分可将它放到模块顶部,以创建属于模块级别的变量。
下面的示例创建了变量 strName 并且指定为 String 数据类型。 Dim strName As String
如果该语句出现在过程中,则变量 strName 只可以在此过程中被使用。如果该语句出现在模块的声明部分,则变量 strName 可以被此模块中所有的过程所使用,但是不能被同一工程中不同的模块所含过程来使用。为了使变量可被工程中所有的过程所使用,则在变量前加上 Public 语句,如以下的示例:
Public strName As String
变量可以声明成下列数据类型中的一种:Boolean、Byte、 Integer、Long、Currency、Single、Double、Date、String(变长字符串)、String * length (定长字符串)、Object 或 Variant。如果未指定数据类型,则 Variant 数据类型被赋予默认。也可以使用 Type 语句来创建用户自定义类型。
可以在一个语句中声明几个变量。而为了指定数据类型,必须将每一个变量的数据类型包含进来。在下面的语句中,变量 intX、 intY、与 intZ 被声明为 Integer 类型。
Dim intX As Integer, intY As Integer, intZ As Integer
在下面的语句中,变量 intX 与 intY 被声明为 Variant 类型;只有intZ 被声明为 Integer 类型。
Dim intX, intY, intZ As Integer
在声明语句中,不一定要提供变量的数据类型。若省略了数据类型,则会将变量设成 Variant 类型。
使用 Public 语句:可以使用 Public 语句去声明公共模块级别变量。
Public strName As String
公有变量可用于工程中的任何过程。如果公有变量是声明于标准模块或是类模块中,则它也可以被任何引用到此公有变量所属工程的工程中使用。
使用 Private 语句:可以使用 Private 语句去声明私有的模块级别变量。
Private MyName As String
私有变量只可使用于同一模块中的过程。
注意:
在模块级别中使用 Dim 语句与使用 Private 语句是相同的。不过使用 Private 语句可以更容易地读取和解释代码。
使用Static 语句:当使用 Static 语句取代 Dim 语句时,所声明的变量在调用时仍保留它原先的值。
使用Option Explicit 语句:在 Visual Basic 中可以简单地通过一个赋值语句来隐含声明变量。所有隐含声明变量都为 Variant 类型,而Variant 类型变量比大多数其他类型的变量需要更多的内存资源。如果显式地声明变量为指定的数据类型,则应用程序将更有效。显式声明所有变量减少了命名冲突以及拼写错误的发生率。
如果不想使Visual Basic 生成隐含声明,可以将Option Explicit 语句放置于模块中所有的过程之前。这一个语句要求对模块中所有的变量做显式地声明。如果模块包含Option Explicit 语句,则当 Visual Basic 遇到一个先前未定义的变量或拼写错误,它会发生编译时间的错误。
可以设置 Visual Basic 程序环境中的某个选项,使得自动在所有新的模块中包含 Option Explicit 语句。
注意: 需显式地声明固定大小的数组与动态数组。
为自动化声明一个对象变量:当使用一个应用程序去控制另外一个应用程序的对象时,应该设置一个对于其他应用程序的类型库的引用。若设置一个引用,则可以根据它们最常指定的类型来声明对象变量。例如,如果是在 Microsoft Word 中,当对 Microsoft Excel 类型库做一引用设置时,可以在 Microsoft Word 中声明 Worksheet 类型的变量来表示 Microsoft Excel 中的Worksheet 对象。
如果使用其他的应用程序去控制 Microsoft Access 对象,在多数情况下,可以根据它们最常指定的类型来声明对象变量。也可以使用关键字

