|
Visual Basic 函数速查
语句 (A-G)
激活一应用程序窗口。 语法 AppActivate title[, wait] AppActivate 语句的语法具有以下几个命名参数:
说明 AppActivate 语句将焦点移动到命名的应用程序或窗口,但并不影响焦点是否最大化或最小化。当用户采取行动改变焦点或将窗口关闭时,就会将焦点从活动的应用程序窗口移动出去。可用 Shell 函数启动一个应用程序并设置窗口样式。 在决定激活哪个应用程序时,请将 title 与每一个运行中的应用程序的标题字符串进行比较。如果没有完全匹配,就激活任何这样的应用程序,其标题字符串以 title 开头。如果以 title 命名的应用程序有很多实例,则激活任何一个实例。 通过计算机喇叭发出一个声调。 语法 Beep 说明 呼叫的频率与时间长短取决于硬件和系统软件,并随电脑不同而不同。. 将控制权转移到一个 Sub 过程,Function 过程,或动态连接库 (DLL)过程。 语法 [Call] name [argumentlist] Call 语句的语法具有以下几个部分:
说明 调用一个过程时,并不一定要使用 Call 关键字。如果使用 Call 关键字来调用一个需要参数的过程,argumentlist 就必须要加上括号。如果省略了 Call 关键字,那么也必须要省略 argumentlis 外面的括号。如果使用 Call 语法来调用内建函数或用户定义函数,则函数的返回值将被丢弃。 若要将整个数组传给一个过程,使用数组名,然后在数组名后加上空括号。 改变当前的目录或文件夹。 语法 ChDir path 必要的 path 参数是一个字符串表达式,它指明哪个目录或文件夹将成为新的缺省目录或文件夹。path 可能会包含驱动器。如果没有指定驱动器,则 ChDir 在当前的驱动器上改变缺省目录或文件夹。 说明 ChDir 语句改变缺省目录位置,但不会改变缺省驱动器位置。例如,如果缺省的驱动器是 C,则下面的语句将会改变驱动器 D 上的缺省目录,但是 C 仍然是缺省的驱动器:
改变当前的驱动器。 语法 ChDrive drive 必要的 drive 参数是一个字符串表达式,它指定一个存在的驱动器。如果使用零长度的字符串 (""),则当前的驱动器将不会改变。如果 drive 参数中有多个字符,则 ChDrive 只会使用首字母。 关闭 Open 语句所打开的输入/输出 (I/O) 文件。 语法 Close [filenumberlist] 可选的 filenumberlist参数为一个或多个文件号,其中 filenumber 为任何有效的文件号,语法如下: [[#]filenumber] [, [#]filenumber] . . . 说明 若省略 filenumberlist,则将关闭 Open 语句打开的所有活动文件。 当关闭 Output 或 Append 打开的文件时,将属于此文件的最终输出缓冲区写入操作系统缓冲区。所有与该文件相关联的缓冲区空间都被释放。 在执行 Close 语句时,文件与其文件号之间的关联将终结。 声明用于代替文字量的常数。 语法 [Public | Private] Const constname [As type] = expression Const 语句的语法包含下面部分:
说明 在缺省情况下常数是私有的。过程中的常数总是私有的;它们的可见性无法改变。在标准模块中,可以用 Public 关键字来改变模块级常数可见性的缺省值。不过,在类模块中,常数只能是私有的,而且用 Public 关键字也不能改变其可见性。 为了在一行中声明若干个常数,可以使用逗号将每个常数赋值分开。用这种方法声明常数时,如果使用了 Public 或 Private 关键字,则该关键字对该行中所有常数都有效。 在给常量赋值的表达式中,不能使用变量,用户自定义的函数,或 Visual Basic 的内部函数(如 Chr)。 注意 常数可以使程序更具可读性,以及易于修改。在程序运行时,常数不会象变量那样无意中被改变。 如果在声明常数时没有显式地使用 As type 子句,则该常数的数据类型是最适合其表达式的数据类型。 在 Sub、Function 或 Property 过程中声明的常数都是该过程的局部常数。在过程外声明的常数,在包含该声明的模块中被定义。在可以使用表达式的地方,都可以使用常数。 设置当前系统日期。 语法 Date = date 对于运行 Microsoft Windows 95 的系统,要设置的 date 必须介于 1980 年 1月 1 日与 2099 年 12 月 31 日之间。对于运行 Microsoft Windows NT 的系统,date 必须介于公元 1980 年 1 月 1 日到 2079 年 12 月 31 日之间。 用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。 语法 1 [Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])] 语法 2 [Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type] Declare 语句的语法包含下面部分:
arglist 参数的语法以及语法各个部分如下: [Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]
说明 对Function 过程而言,过程的数据类型决定其返回值的数据类型。可以在 arglist 之后使用 As 子句来指定函数返回值的数据类型。在 arglist 中,可以使用 As 子句来指定任何传给该过程的参数的数据类型。不单可以指定为任何标准数据类型,还可以在 arglist 中指定 As Any 来禁止类型检查,从而允许将任意数据类型传递给该过程。 空圆括号表示该 Sub 或 Function 过程没有参数,且 Visual Basic 应确保不会传递任何参数。在下面的示例中,
如果带参数表,则每次调用该过程时都要检查参数的个数和类型。在下面的示例中,
注意 在 Declare 语句的参数表中不能有定长的字符串;只有变长的字符串才能传给过程。定长的字符串可以作为过程参数使用,但在传递前都要被转换为变长的字符串。 注意 当所调用的外部过程需要一个值为 0 的字符串时,就要使用 vbNullString 常数。该常数与零长度字符串 ("") 是不相同的。 在模块级别上,为变量和传给过程的参数,设置缺省数据类型,以及为其名称以指定的字符开头的 Function 和 Property Get 过程,设置返回值类型。 语法 DefBool letterrange[, letterrange] . . . DefByte letterrange[, letterrange] . . . DefInt letterrange[, letterrange] . . . DefLng letterrange[, letterrange] . . . DefCur letterrange[, letterrange] . . . DefSng letterrange[, letterrange] . . . DefDbl letterrange[, letterrange] . . . DefDec letterrange[, letterrange] . . . DefDate letterrange[, letterrange] . . . DefStr letterrange[, letterrange] . . . DefObj letterrange[, letterrange] . . . DefVar letterrange[, letterrange] . . . 所需的 letterrange 参数遵循下述语法: letter1[-letter2] letter1 和 letter2 参数指定设置缺省数据类型的名称范围。每个参数都是指变量,参数和 Function 过程,或 Property Get 过程名称的首字母,且参数可以是字母表中的任意字母。letterrange 中不区分字母的大小写。 说明 语句的名字就确定相应的数据类型:
例如,在下面的程序段中,
Deftype 语句只在使用该语句的模块中有效。例如,一个模块中的 DefInt 语句只对在该模块中声明的变量和传给过程的参数的缺省数据类型,以及 Function 和 Property Get 过程的返回值的类型有效;而其它模块中的变量、参数、以及返回值的缺省数据类型就不受影响。如果不用 Deftype 语句显式地声明,则所有变量、参数、Function 过程、以及 Property Get 过程的缺省数据类型都是 Variant。 当指定字符范围时,通常为以字符集的前 128 个字符中的字符开始的变量定义数据类型。不过,如果指定的字符范围是A-Z,则将所有的变量,包括以字符集的扩展部分(128-255) 中的国际字符开始的变量的缺省类型都设为指定的类型。 在指定了A-Z 范围之后,就不能再使用 Deftype 语句来重新定义任何子范围的变量了。在指定一个范围后,如果另一个 Deftype 语句定义的范围中含有前面已定义的字符,就会产生错误。不过,不管变量是否已定义,都可以使用带 As type 子句的 Dim 语句来显式指定其数据类型。例如,可以在模块级使用如下代码将一个缺省数据类型为 Integer 的变量定义为 Double:
Deftype 语句对用户定义类型中的元素无影响,因为这些元素必须显式声明。 在 Windows 注册表中,从应用程序项目里删除区域或注册表项设置。 语法 DeleteSetting appname, section[, key] DeleteSetting 语句的语法具有下列命名参数:
说明 如果提供了所有参数,则删除指定的注册表项设置。如果试图使用不存在的区域或注册表项设置上的 DeleteSetting 语句,则发生一个运行时错误。 声明变量并分配存储空间。 语法 Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . . Dim 语句的语法包含下面部分:
说明 在模块级别中用 Dim 声明的变量,对该模块中的所有过程都是可用的。在过程级别中声明的变量,只在过程内是可用的。 可以使用 Dim 语句在模块级或过程级中声明变量的数据类型。例如,下面的语句声明了 Integer 类型的变量。
也可以使用 Dim 语句来声明变量的对象类型。下面的语句为工作表的新建实例声明了一个变量。
如果定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将该引用对象的变量赋值为一个已有对象。在该变量被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任一个对象实例。 也可以使用带空圆括号的 Dim 语句来定义动态数组。在定义动态数组后,可以在过程内使用 ReDim 语句来定义该数组的维数和元素。如果试图在 Private,Public 或 Dim 语句中重新定义一个已显式定义了大小的数组的维数时,就会发生错误。 如果不指定数据类型或对象类型,且在模块中没有 Deftype 语句,则该变量按缺省设置是 Variant 类型。 当初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。 注意 当在过程中使用 Dim 语句时,通常将 Dim 语句放在过程的开始处。 当条件为 True 时,或直到条件变为 True 时,重复执行一个语句块中的命令。 语法 Do [{While | Until} condition] Loop 或者可以使用下面这种语法: Do Loop [{While | Until} condition] Do Loop 语句的语法具有以下几个部分:
说明 在Do…Loop 中可以在任何位置放置任意个数的 Exit Do 语句,随时跳出Do...Loop 循环。Exit Do 通常用于条件判断之后,例如If Then,在这种情况下,Exit Do 语句将控制权转移到紧接在 Loop 命令之后的语句。 如果 Exit Do 使用在嵌套的Do…Loop 语句中,则 Exit Do 会将控制权转移到 Exit Do 所在位置的外层循环。 结束一个过程或块。 语法 End End Function End If End Property End Select End Sub End Type End With End 语句的语法有以下几种形式:
说明 在执行时,End 语句会重置所有模块级别变量和所有模块的静态局部变量。若要保留这些变量的值,改为使用 Stop 语句,则可以在保留这些变量值的基础上恢复执行。 注意 End 语句不调用 Unload、QueryUnload、或 Terminate 事件或任何其它 Visual Basic 代码,只是生硬地终止代码执行。窗体和类模块中的 Unload、QueryUnload、和 Terminate 事件代码未被执行。类模块创建的对象被破坏,由 Open 语句打开的文件被关闭,并且释放程序所占用的内存。其它程序的对象引用无效。 End 语句提供了一种强迫中止程序的方法。Visual Basic 程序正常结束应该卸载所有的窗体。只要没有其它程序引用该程序公共类模块创建的对象并无代码执行,程序将立即关闭。 定义枚举类型。 语法 [Public | Private] Enum name membername [= constantexpression] membername [= constantexpression] . . . End Enum Enum 语句包含下面部分:
说明 所谓枚举变量,就是指用 Enum 类型定义的变量。变量和参数都可以定义为 Enum 类型。Enum 类型中的元素被初始化为 Enum 语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:
Enum 语句只能在模块级别中出现。定义 Enum 类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定 Enum 类型。类模块中的 Public Enum 类型并不是该类的成员;只不过它们也被写入到类型库中。在标准模块中定义的 Enum 类型则不写到类型库中。具有相同名字的 Public Enum 类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类型库中有两个 Enum 类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。 不能在 With 块中使用 Enum 类型作为目标。 重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。 语法 Erase arraylist 所需的 arraylist 参数是一个或多个用逗号隔开的需要清除的数组变量。 说明 Erase 根据是固定大小(常规的)数组还是动态数组,来采取完全不同的行为。Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:
Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。 模拟错误的发生。 语法 Error errornumber 必要的 errornumber 可以是任何有效的错误号。 说明 Error 语句获得的支持是向后兼容的。在新的代码中,特别是在建立对象时,要使用 Err 对象的 Raise 方法产生运行时错误。 如果已经定义 errornumber,那么,在 Err 对象的属性被赋予下列值之后,Error 语句会调用错误处理程序:
如果不存在错误处理程序,或未做任何启动动作,那么就会由 Err 对象属性发布一个错误信息并将错误信息显示出来。 注意 并非全部 Visual Basic 主应用程序都可以建立对象。请参考主机应用程序的文档来判断它能否建立类和对象。 定义用户自定义的事件。 语法 [Public] Event procedurename [(arglist)] Event 语句包含下面部分:
arglist 参数的语法及语法的各个部分如下: [ByVal | ByRef] varname[( )] [As type]
说明 事件被声明之后,就可以使用 RaiseEvent 语句来产生该事件。如果在标准模块中出现 Event 声明,就会产生语法错误。不能声明带返回值的事件。在下面的代码段中,给出了声明事件和产生事件的典型事件:
注意 可以象声明过程的参数一样来声明事件的参数,但有以下不同:事件不能有带命名参数、Optional 参数、或者 ParamArray 参数。事件没有返回值。 退出 Do...Loop、For...Next、Function、Sub 或 Property 代码块。 语法 Exit Do Exit For Exit Function Exit Property Exit Sub Exit 语句的语法有以下几种形式:
说明 不要将 Exit 语句与 End 语句搞混了。Exit 并不说明一个结构的终止。 复制一个文件。 语法 FileCopy source, destination FileCopy 语句的语法含有以下这些命名参数:
说明 如果想要对一个已打开的文件使用 FileCopy 语句,则会产生错误。 针对一个数组或集合中的每个元素,重复执行一组语句。 语法 For Each element In group Next [element] For...Each...Next 语句的语法具有以下几个部分:
说明 如果集合中至少有一个元素,就会进入 For...Each 块执行。一旦进入循环,便先针对 group 中第一个元素执行循环中的所有语句。如果 group 中还有其它的元素,则会针对它们执行循环中的语句,当 group 中的所有元素都执行完了,便会退出循环,然后从 Next 语句之后的语句继续执行。 在循环中可以在任何位置放置任意个 Exit For 语句,随时退出循环。Exit For经常在条件判断之后使用,例如If Then,并将控制权转移到紧接在 Next 之后的语句。 可以将一个 For...Each...Next 循环放在另一个之中来组成嵌套式 For...Each...Next 循环。但是每个循环的 element 必须是唯一的。 注意 如果省略 Next 语句中的 element,就像 element 存在时一样执行。如果 Next 语句在它相对应的 For 语句之前出现,则会产生错误。 不能在 For...Each...Next 语句中使用用户自定义类型数组,因为 Variant 不能包含用户自定义类型。 以指定次数来重复执行一组语句。 语法 For counter = start
To end [Step step] Next [counter] For…Next 语句的语法具有以下几个部分:
说明 step 参数可以是正数或负数。step 参数值决定循环的执行情况,如下所示:
当所有循环中的语句都执行后,step 的值会加到 counter 中。此时,循环中的语句可能会再次执行(基于循环开始执行时同样的测试),也可能是退出循环并从 Next 语句之后的语句继续执行。 提示 在循环中改变 counter 的值,将会使程序代码的阅读和调试变得更加困难。 循环中可以在任何位置放置任意个 Exit For 语句,随时退出循环。 Exit For经常在条件判断之后使用,例如 If...Then,并将控制权转移到紧接在 Next 之后的语句。 可以将一个 For...Next 循环放置在另一个 For...Next 循环中,组成嵌套循环。不过在每个循环中的 counter 要使用不同的变量名。下面的体系结构是正确的:
注意 如果省略 Next 语句中的 counter,就像 counter 存在时一样执行。但如果 Next 语句在它相对应的 For 语句之前出现,则会产生错误。 声明 Function 过程的名称,参数以及构成其主体的代码。 语法 [Public | Private | Friend] [Static] Function name
[(arglist)] [As type] End Function Function 语句的语法包含下面部分:
其中的 arglist 参数的语法以及语法各个部分如下: [Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
说明 如果没有使用 Public、Private 或 Friend 显式指定,则 Function 过程缺省为公用。如果没有使用 Static,则局部变量的值在调用之后不会保留。Friend 关键字只能在类模块中使用。但 Friend 过程可以被工程的任何模块中的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。 注意 Function 过程可以是递归的;也就是说,该过程可以调用自己来完成某个特定的任务。不过,递归可能会导致堆栈上溢。通常 Static 关键字和递归的 Function 过程不在一起使用。 所有的可执行代码都必须属于某个过程。不能在另外的 Function、Sub 或 Property 过程中定义 Function 过程。 Exit Function 语句使执行立即从一个 Function 过程中退出。程序接着从调用该 Function 过程的语句之后的语句执行。在 Function 过程的任何位置都可以有 Exit Function 语句。 Function 过程与 Sub 过程的相似之处是: Function 过程是一个可以获取参数,执行一系列语句,以及改变其参数值的独立过程,而与子过程不同的是:当要使用该函数的返回值时,可以在表达式的右边使用 Function 过程,这与内部函数,诸如 Sqr、Cos 或 Chr 的使用方式一样。 在表达式中,可以通过使用函数名,并在其后用圆括号给出相应的参数列表来调用一个 Function 过程。请参阅 Call 语句关于如何调用 Function 过程的详细说明。 要从函数返回一个值,只需将该值赋给函数名。在过程的任意位置都可以出现这种赋值。如果没有对 name 赋值,则过程将返回一个缺省值:数值函数返回 0,字符串函数返回一个零长度字符串 (""),Variant 函数则返回 Empty。如果在返回对象引用的 Function 过程中没有将对象引用赋给 name (通过 Set),则函数返回 Nothing。 下面的示例说明如何给一个名为
在 Function 过程中使用的变量分为两类:一类是在过程内显式声明的,另一类则不是。在过程内显式声明的变量(使用 Dim 或等效方法)都是局部变量。对于那些没有在过程中显式声明的变量,除非它们在该过程外更高级别的位置有显示地声明,否则也是局部的。 注意 过程可以使用没有在过程内显式声明的变量,但只要有任何在模块级别中定义的名称与之相同,就会产生名称冲突。如果过程中使用的未声明的变量与另一个过程,常数,或变量的名称相同,则会认为过程使用的是模块级的名称。显式声明变量就可以避免这类冲突。可以使用 Option Explicit 语句来强制显式声明变量。 注意 Visual Basic 可能会重新安排数学表达式以提高内部效率。若 Function 过程会改变某个数学表达式中变量的值,则应避免在此表达式中使用该函数。 将一个已打开的磁盘文件读入一个变量之中。 语法 Get [#]filenumber, [recnumber], varname Get 语句的语法具有以下几个部分:
说明 通常用 Put 将 Get 读出的数据写入一个文件。 文件中第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。若省略 recnumber,则会读出紧随上一个 Get 或 Put 语句之后的下一个记录或字节(或读出最后一个 Seek 函数指出的记录或字节)。所有用于分界的逗号都必须罗列出来,例如:
下列规则适用于以 Random 方式打开的文件:
对于以 Binary 方式打开的文件,Random 的所有规则都适用,但以下情况除外:
在一个过程中跳到另一个子程序中执行,执行后再返回。 语法 GoSub line Return 必要的 line 参数可以是任何行标签或行号。 说明 可以在过程中的任何地方使用 GoSub 和 Return,但是 GoSub 和与之相应的 Return 语句必须放在同一个过程中。一个子程序中可以包含一个以上的 Return 语句,但是当碰到第一个 Return 语句时,程序就会返回到紧接在刚刚执行的 GoSub 语句之后的语句继续执行。 注意 不能使用 GoSub...Return 来进入或退出 Sub 过程。 提示 创建分开的过程,并使用 GoSub...Return 来调用,可以使程序更具结构化。 无条件地转移到过程中指定的行。 语法 GoTo line 必要的 line 参数可以是任意的行标签或行号。 说明 GoTo 只能跳到它所在过程中的行。 注意 太多的 GoTo 语句,会使程序代码不容易阅读及调试。尽可能使用结构化控制语句(Do...Loop、For...Next、If...Then...Else、Select Case)。 |