|
Visual Basic 函数速查
语句 (R-Z)
引发在一个类、窗体、或者文档中的模块级中声明的一个事件。 语法 RaiseEvent eventname [(argumentlist)] 必需的 eventname 是在模块 中声明的,并且符合 Basic 变量命名约定的一个事件的名称。 RaiseEvent 语句的语法有如下部分:
说明 如果在事件被引发的模块内该事件没有被声明,就会发生一个错误。下面这个程序片段说明了一个事件的声明以及一个引发该事件的过程。
如果在 RaiseEvent 中该事件没有参数,包括空的圆括号,则对该事件的调用就会导致一个错误。不能使用 RaiseEvent 来引发在模块中没有明确定义的事件。例如,如果一个窗体有一个 Click 事件,则不能使用 RaiseEvent 来引发该窗体的 Click 事件。如果在窗体模块 中声明了一个 Click 事件,则它将覆盖窗体自己的 Click 事件。仍然可以使用调用该事件的正常语法来调用该窗体的 Click 事件,但是不能使用 RaiseEvent 语句。 事件的引发是根据连接建立的顺序来进行的。因为事件可以有 ByRef 参数,所以后来连接的进程可能接收已经被一个更早的事件处理程序更改的参数。 初始化随机数生成器。 语法 Randomize [number] 可选的 number 参数是 Variant 或任何有效的数值表达式。 说明 Randomize 用 number 将 Rnd 函数的随机数生成器初始化,该随机数生成器给 number 一个新的种子值。如果省略 number,则用系统计时器返回的值作为新的种子值。 如果没有使用 Randomize,则(无参数的)Rnd 函数使用第一次调用 Rnd 函数的种子值。 注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。 在过程级别中使用,用于为动态数组变量重新分配存储空间。 语法 ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . . ReDim 语句的语法包括以下几个部分:
说明 ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小。 可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant 中,且没有使用 Preserve 关键字,则可以使用 As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。
同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。 如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。 在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。在使用引用对象的变量之前,必须使用 Set 语句将一个已有的对象赋给该变量。在被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。 注意 如果 ReDim 语句所使用的变量在模块级别或过程级别不存在,则该语句就相当于一个声明语句。如果此后在一个更广的范围内又创建了同名的变量,即使使用了 Option Explicit,ReDim 也将使用后声明的这个变量,且不会导致编译错误。为了避免这种冲突,就不应把 ReDim 作为声明语句使用,而只应作为重定义数组大小的语句。 注意 要改变 Variant 所包含的数组的大小,必须在试图改变其数组大小之前显式声明该 Variant 变量。 用来在程序中包含注释。 语法 Rem comment 也可以使用如下语法: ' comment comment 参数是可选的,指要包括的任何注释文本。在 Rem 关键字与 comment 之间要加一个空格。 说明 如果使用行号或行标签,则可以从 GoTo 或 GoSub 语句转到一个 Rem 语句行。程序会从该 Rem 语句下面的第一条可执行语句继续执行。如果在其它语句行后使用 Rem 关键字,则必须使用冒号 (:) 与语句隔开。 可以用一个撇号 (') 来代替 Rem 关键字。若使用撇号,则在其它语句行使用时不必加冒号。 关闭所有用 Open 语句打开的磁盘文件。 语法 Reset 说明 Reset 语句关闭 Open 语句打开的所有活动文件,并将文件缓冲区的所有内容写入磁盘。 在错误处理程序结束后,恢复原有的运行。 语法 Resume [0] Resume Next Resume line Resume 语句的语法可以具有以下任何一种形式:
说明 在错误处理程序之外的任何地方使用 Resume 语句都会导致错误发生。 删除一个存在的目录或文件夹。 语法 RmDir path 必要的 path 参数是一个字符串表达式,用来指定要删除的目录或文件夹。path 可以包含驱动器。如果没有指定驱动器,则 RmDir 会在当前驱动器上删除目录或文件夹。 说明 如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。 在一字符串变量中将一字符串往右对齐。 语法 RSet stringvar = string RSet 语句的语法有下面这些部分:
说明 如果 stringvar 比 string 长,Rset 会将 stringvar 中空余的字符以空白代替,直至字符串开头。 注意 RSet 不能用于用户定义类型。 在 Windows 注册表中保存或建立应用程序项目。 语法 SaveSetting appname, section, key, setting SaveSetting 语句的语法具有下列命名参数:
说明 如果无论如何也不能保存注册表项设置,则将导致错误发生。 在 Open 语句打开的文件中,设置下一个读/写操作的位置。 语法 Seek [#]filenumber, position Seek 语句的语法具有以下几个部分:
说明 在 Get 及 Put 语句中指定的记录号将覆盖由 Seek 语句指定的文件位置。 若在文件结尾之后进行 Seek 操作,则进行文件写入的操作会把文件扩大。如果试图对一个位置为负数或零的文件进行 Seek 操作,则会导致错误发生。 根据表达式的值,来决定执行几组语句中的其中之一。 语法 Select Case testexpression End Select Select Case 语句的语法具有以下几个部分:
说明 如果 testexpression 匹配某个 Case expressionlist 表达式, 则在 Case 子句之后,直到下一个 Case 子句的 statements 会被执行;如果是最后一个子句,则会执行到 End Select。然后控制权会转移到 End Select 之后的语句。如果 testexpression 匹配一个以上的 Case 子句中的 expressionlist 表达式,则只有第一个匹配后面的语句会被执行。 Case Else 子句用于指明 elsestatements,当 testexpression 和所有的 Case 子句中的 expressionlist 都不匹配时,则会执行这些语句。虽然不是必要的,但是在 Select Case 区块中,最好还是加上 Case Else 语句来处理不可预见的 testexpression 值。如果没有 Case expressionlist 匹配 testexpression,而且也没有 Case Else 语句,则程序会从 End Select 之后的语句继续执行。 可以在每个 Case 子句中使用多重表达式或使用范围,例如,下面的语句是正确的:
注意 Is 比较运算符和使用在 Select Case 语句中的 Is 关键字并不相同。 也可以针对字符串指定范围和多重表达式。在下面的例子中,Case 所匹配的字符串为:等于
Select Case 语句也可以是嵌套的。但每个嵌套的 Select Case 语句必须要有相应的 End Select 语句。 将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。 语法 SendKeys string[, wait] SendKeys 语句的语法具有以下几个命名参数:
说明 每个按键由一个或多个字符表示。为了指定单一键盘字符,必须按字符本身的键。例如,为了表示字母 A,可以用 对 SendKeys 来说,加号 (+)、插入符 (^)、百分比符号
(%)、上划线 (~) 及圆括号 ( ) 都具有特殊意义。为了指定上述任何一个字符,要将它放在大括号 ({})
当中。例如,要指定正号,可用 { 为了在按下按键时指定那些不显示的字符,例如 ENTER 或 TAB 以及那些表示动作而非字符的按键,请使用下列代码:
为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下:
为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那些按键的码放在括号当中。例如,为了说明按下
E 与 C 的时候同时按下 SHIFT 键,请使用 " 为了指定重复键,使用 { 注意 不能用 SendKeys 将按键消息发送到这样一个应用程序,这个应用程序并没有被设计成在
Microsoft Windows 中运行。Sendkeys 也无法将 PRINT SCREEN
按键 { 将对象引用赋给变量或属性。 语法 Set objectvar = {[New] objectexpression | Nothing} Set 语句的语法包含下面部分:
说明 为确保合法,objectvar 必须是与所赋对象相一致的对象类型。 Dim、Private、Public、ReDim以及 Static 语句都只声明了引用对象的变量。在用 Set 语句将变量赋为特定对象之前,该变量并没有引用任何实际的对象。 下面的示例说明了如何使用 Dim 来声明
通常,当使用 Set 将一个对象引用赋给变量时,并不是为该变量创建该对象的一份副本,而是创建该对象的一个引用。可以有多个对象变量引用同一个对象。因为这些变量只是该对象的引用,而不是对象的副本,因此对该对象的任何改动都会反应到所有引用该对象的变量。不过,如果在 Set 语句中使用 New 关键字,那么实际上就会新建一个该对象的实例。 为一个文件设置属性信息。 语法 SetAttr pathname, attributes SetAttr 语句的语法含有以下这些命名参数:
设置值 attributes 参数设置可为:
注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。 说明 如果想要给一个已打开的文件设置属性,则会产生运行时错误。 在过程级别中使用,用于声明变量并分配存储空间。在整个代码运行期间都能保留使用 Static 语句声明的变量的值。 语法 Static varname[([subscripts])] [As [New] type] [, varname[([subscripts])] [As [New] type]] . . . Static 语句的语法包含下面部分:
说明 模块的代码开始运行后,使用 Static 语句声明的变量会一直保持其值,直至该模块复位或重新启动。可以在非静态的过程中使用 Static 语句显式声明只在该过程内可见,但具有与包含该过程定义的模块相同生命期的变量。 可以在过程中使用 Static 语句来声明在过程调用之间仍能保持其值的变量的数据类型。例如,下面的语句声明了一个定长的整型数组:
下面的语句为 worksheet 的新实例声明了一个变量:
如果在定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将一个已有的对象赋给这个引用对象的变量。在被赋值之前,所声明的这个对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。若在声明中使用了 New 关键字,则在第一次引用对象时将新建一个该对象的实例。 如果不指定数据类型或对象类型,且在模块中没有使用 Deftype 语句,则按缺省情况,定义该变量为 Variant 类型。 注意 Static 语句与 Static
关键字很相似,但是针对不同的效果来使用的。如果使用 Static 关键字(如 在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。 注意 如果在过程中使用 Static 语句,应和其它的声明语句(如 Dim)一样将其放在过程的开始。 暂停执行。 语法 Stop 说明 可以在过程中的任何地方放置 Stop 语句,使用 Stop 语句,就相当于在程序代码中设置断点。 Stop 语句会暂停程序的执行,但是它不像 End,因为 Stop 不会关闭任何文件,或清除变量,除非它是以编译后的可执行文件 (.EXE) 方式来执行。 声明子过程的名称,参数,以及构成其主体的代码。 语法 [Private | Public | Friend] [Static] Sub
name [(arglist)]
End Sub Sub 语句的语法包含下面部分:
其中的 arglist 参数的语法以及语法各个部分如下: [Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
说明 如果没有使用 Public、Private 或 Friend 显式指定,Sub 过程按缺省情况就是公用的。如果没有使用 Static,则在调用之后不会保留局部变量的值。Friend 关键字只能在类模块中使用。不过 Friend 过程可以被工程的任何模块中的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。 注意 Sub 过程可以是递归的;也就是说,该过程可以调用自己来完成某个特定的任务。不过,递归可能会导致堆栈上溢。通常 Static 关键字和递归的 Sub 过程不在一起使用。 所有的可执行代码都必须属于某个过程。不能在别的 Sub、Function 或 Property 过程中定义 Sub 过程。 Exit Sub 语句使执行立即从一个 Sub 过程中退出。程序接着从调用该 Sub 过程的语句下一条语句执行。在 Sub 过程的任何位置都可以有 Exit Sub 语句。 Sub 过程与 Function 过程的相似之处是:它们都一个可以获取参数,执行一系列语句,以及改变其参数的值的独立过程。而与 Function 过程不同的是:带返回值的 Sub 过程不能用于表达式。 可以使用过程名并后跟相应的参数列表来调用一个 Sub 过程。请参阅 Call 语句关于如何调用 Sub 过程的详细的说明信息。 在 Sub 过程中使用的变量分为两类:一类是在过程内显式定义的,另一类则不是。在过程内显式定义的变量(使用 Dim 或等效方法)都是局部变量。对于使用了但又没有在过程中显式定义的变量,除非其在该过程外更高级别的位置有显示地定义,否则也是局部的。 注意 过程可以使用没有在过程内显式定义的变量,但只要有任何在模块级别定义的名称与之同名,就会产生名称冲突。如果过程中使用的未定义的变量与别的过程,常数,或变量的名称相同,则认为过程使用的是模块级的名称。显式定义变量就可以避免这类冲突。可以使用 Option Explicit 语句来强制显式定义变量。 注意 不能使用 GoSub、GoTo 或 Return 来进入或退出 Sub 过程。 设置系统时间。 语法 Time = time 必要的 time 参数,可以是任何能够表示时刻的数值表达式、字符串表达式或它们的组合。 说明 如果 time 是一字符串,则 Time 会试着根据系统指定的时间,利用时间分隔符将其转换成一个时间。如果无法转换成一个有效的时间,则会导致错误发生。 在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。 语法 [Private | Public] Type varname End Type Type 语句的语法包含下面部分:
说明 Type 语句只能在模块级使用。使用 Type 语句声明了一个用户自定义类型后,就可以在该声明范围内的任何位置声明该类型的变量。可以使用 Dim、Private、Public、ReDim 或 Static 来声明用户自定义类型的变量。 在标准模块中,用户自定义类型按缺省设置是公用的。可以使用 Private 关键字来改变其可见性。而在类模块中,用户自定义类型只能是私有的,且使用 Public 关键字也不能改变其可见性。 在 Type...End Type 块中不允许使用行号和行标签。 用户自定义类型经常用来表示数据记录,记录一般由多个不同数据类型的元素组成。 下面的示例演示了一个用户自定义类型的大小固定的数组的用法:
在上述示例中, 当在用户自定义类型中声明大小固定的数组时,必须用数字文字或常数而不能用变量来声明数组的维数。 数组的下界由 Option Base 语句的设置确定。 只要指定的条件为 True,则会重复执行一系列的语句。 语法 While condition Wend While...Wend 语句的语法具有以下几个部分:
说明 如果 condition 为 True,则所有的 statements 都会执行,一直执行到 Wend 语句。然后再回到 While 语句,并再一次检查 condition,如果 condition 还是为 True,则重复执行。如果不为 True,则程序会从 Wend 语句之后的语句继续执行。 While...Wend 循环也可以是多层的嵌套结构。每个 Wend 匹配最近的 While 语句。 提示 Do...Loop 语句提供了一种结构化与适应性更强的方法来执行循环。 将一个输出行的宽度指定给用 Open 语句打开的文件。 语法 Width #filenumber, width Width # 语句的语法具有以下几个部分:
在一个单一对象或一个用户定义类型上执行一系列的语句。 语法 With object End With With 语句的语法具有以下几个部分:
说明 With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在 With 控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用 With 语句来给同一个对象的几个属性赋值。
注意 当程序一旦进入 With 块,object 就不能改变。因此不能用一个 With 语句来设置多个不同的对象。 可以将一个 With 块放在另一个之中,而产生嵌套的 With 语句。但是,由于外层 With 块成员会在内层的 With 块中被屏蔽住,所以必须在内层的 With 块中,使用完整的对象引用来指出在外层的 With 块中的对象成员。 重点 一般来说,建议您不要跳入或跳出 With 块。如果在 With 块中的语句被执行,但是 With 或 End With 语句并没有执行,则一个包含对该对象引用的临时变量将保留在内存中,直到您退出该过程。 将数据写入顺序文件。 语法 Write #filenumber, [outputlist] Write # 语句的语法具有以下几个部分:
说明 通常用 Input # 从文件读出 Write # 写入的数据。 如果省略 outputlist,并在 filenumber 之后加上一个逗号,则会将一个空白行打印到文件中。多个表达式之间可用空白、分号或逗号隔开。空白和分号等效。 用 Write # 将数据写入文件时将遵循几个通用的约定,使得无论什么国别都可用 Input # 读出并正确解释数据:
与 Print # 语句不同,当要将数据写入文件时,Write # 语句会在项目和用来标记字符串的引号之间插入逗号。没有必要在列表中键入明确的分界符。Write # 语句在将 outputlist 中的最后一个字符写入文件后会插入一个新行字符,即回车换行符,(Chr(13) + Chr(10))。 |