Visual Biasc 函数速查

Calendar 常数

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbCalGreg0指出使用的是阳历。
vbCalHijri1指出使用的是伊斯兰历法。

Color 常数

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbBlack0x0黑色
vbRed0xFF红色
vbGreen0xFF00绿色
vbYellow0xFFFF黄色
vbBlue0xFF0000蓝色
vbMagenta0xFF00FF紫红色
vbCyan0xFFFF00青色
vbWhite0xFFFFFF白色

Comparison常数

下列常数由 Visual Basic for Applications 中的类型库定义,可用来在代码中的任何地方代替实际值:

常数描述
VbUseCompareOption-1使用Option Compare语句的设置进行比较。
VbBinaryCompare0进行二进制的比较。
VbTextCompare1进行文字的比较。
vbDatabaseCompare2用于 Microsoft Access(仅限于Windows),进行以数据库所含信息为基础的比较。

Compiler 常数

Visual Basic for Applications 定义了一些不能与 #If...Then...#Else 指令一起使用的常数。这些常数除了其范围是全局的;也就是说,除了可在工程中到处应用,在功能上与 #If...Then...#Else 指令定义的常数相同。

在 16 位开发平台上,编译常数定义如下:

常数描述
Win16True指出开发环境是 16 位。
Win32False指出开发环境不是 32 位。

在 32 位开发平台上,编译常数定义如下:

常数描述
Win16False指出开发环境不是 16 位。
Win32True指出开发环境是 32 位。

Date 常数

可在代码中的任何地方用下列常数代替实际值:

参数值

firstdayofweek 参数具有以下这些值:

常数描述
vbUseSystem0使用 NLS API 设置。
vbSunday1星期日(缺省)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

firstdayofyear 参数具有以下这些值:

常数描述
vbUseSystem0使用 NLS API 设置。
VbUseSystemDayOfWeek0使用系统设置中为星期的第一天指定的星期数。
VbFirstJan11由 1 月 1 日所在的那个星期开始(缺省)。
vbFirstFourDays2由新的一年中第一个至少有 4 天的星期开始。
vbFirstFullWeek3由一年中第一个完整的星期开始。

返回值

常数描述
vbSunday1星期日
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

日期格式常数

仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数 。

常数描述
vbGeneralDate0显示日期和/或时间。对于一个实数,显示日期和时间。如果没有小数部分,则仅显示日期。如果没有整数部分,则仅显示时间。日期和时间的显示由系统设置值确定。
vbLongDate1用计算机区域设置值指定的长日期格式显示日期。
vbShortDate2用计算机区域设置值指定的短日期格式显示日期。
vbLongTime3用计算机区域设置值指定的长时间格式显示时间。
vbShortTime4用计算机区域设置值指定的短时间格式显示时间。

Dir、GetAttr 和 SetAttr 常数

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbNormal0正常的(Dir SetAttr 的缺省值)
vbReadOnly1只读的
vbHidden2隐藏的
vbSystem4系统文件
vbVolume8卷标
vbDirectory16目录或文件夹
vbArchive32文件自上一次备份后已经改变

驱动器类型常数

仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数。

常数描述
Unknown0不能确定驱动器类型。
Removable1驱动器具有可删除介质。包括所有软盘驱动器和许多其它种类的存储设备。
Fixed2驱动器具有固定介质(不可删除的)。包括可删除硬盘在内的所有硬盘驱动器。
Remote3网络驱动器。包括在网络上任何地方都可以共享的驱动器。
CDROM4驱动器是一个CD-ROM。包括只读的CD-ROM和可读写的CD-ROM。
RAMDisk5驱动器是本地计算机上的一块随机存取内存(RAM),它工作起来就象是磁盘驱动器一样。

文件属性常数

仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数。

常数描述
Normal0普通文件。没有设置属性。
ReadOnly1只读文件。属性是可读/写。
Hidden2隐藏文件。属性是可读/写。
System4系统文件。属性是可读/写。
Volume8磁盘驱动器卷标。属性是只读。
Directory16文件夹或目录。属性是只读。
Archive32自上次备份后已经改变的文件。属性是可读/写。
Alias64链接或快捷方式。属性是只读。
Compressed128压缩文件。属性是只读。

文件输入/输出常数

仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数。

常数描述
ForReading1打开文件用于只读操作。不能对文件进行写操作。
ForWriting2打开文件用于写操作。如果存在具有相同文件名的文件,文件原有的内容被覆盖。
ForAppending8打开文件并向文件的结尾写入。

Dir、GetAttr 和 SetAttr 常数?

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbNormal0正常的(Dir SetAttr 的缺省值)
vbReadOnly1只读的
vbHidden2隐藏的
vbSystem4系统文件
vbVolume8卷标
vbDirectory16目录或文件夹
vbArchive32文件自上一次备份后已经改变

IMEStatus 常数

可在代码中的任何地方用下列常数代替实际值。

日文国别的常数如下所示:

常数描述
vbIMEModeNoControl0没有安装 IME(缺省)
vbIMEModeOn1打开 IME
vbIMEModeOff2关闭 IME
vbIMEModeDisable3无效的 IME
vbIMEModeHiragana4完整宽度 Hiragana 模式
vbIMEModeKatakana5完整宽度 Katakana 模式
vbIMEModeKatakanaHalf6半宽度 Katakana 模式
vbIMEModeAlphaFull7完整宽度 Alphanumeric 模式
vbIMEModeAlpha8半宽度 Alphanumeric 模式

韩国地区的常数如下所示:

常数值描述

vbIMEModeAlphaFull7完整宽度 Alphanumeric 模式

vbIMEModeAlpha8半宽度 Alphanumeric 模式

vbIMEModeHangulFull9完整宽度 Hangul 模式

vbIMEModeHangul10半宽度 Hangul 模式

中文地区的常数值如下:

常数值描述

vbIMEModeNoControl0没有安装 IME (缺省)

vbIMEModeOn1IME 打开

vbIMEModeOff2IME off


Keycode 常数

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbKeyLButton0x1鼠标左键
vbKeyRButton0x2鼠标右键
vbKeyCancel0x3CANCEL 键
vbKeyMButton0x4鼠标中键
vbKeyBack0x8BACKSPACE 键
vbKeyTab0x9TAB 键
vbKeyClear0xCCLEAR 键
vbKeyReturn0xDENTER 键
vbKeyShift0x10SHIFT 键
vbKeyControl0x11CTRL 键
vbKeyMenu0x12MENU 键
vbKeyPause0x13PAUSE 键
vbKeyCapital0x14CAPS LOCK 键
vbKeyEscape0x1BESC 键
vbKeySpace0x20SPACEBAR 键
vbKeyPageUp0x21PAGE UP 键
vbKeyPageDown0x22PAGE DOWN 键
vbKeyEnd0x23END 键
vbKeyHome0x24HOME 键
vbKeyLeft0x25LEFT ARROW 键
vbKeyUp0x26UP ARROW 键
vbKeyRight0x27RIGHT ARROW 键
vbKeyDown0x28DOWN ARROW 键
vbKeySelect0x29SELECT 键
vbKeyPrint0x2APRINT SCREEN 键
vbKeyExecute0x2BEXECUTE 键
vbKeySnapshot0x2CSNAPSHOT 键
vbKeyInsert0x2DINSERT 键
vbKeyDelete0x2EDELETE 键
vbKeyHelp0x2FHELP 键
vbKeyNumlock0x90NUM LOCK 键

A 至 Z 键与 A – Z 字母的 ASCII 码相同:

常数描述
vbKeyA65A 键
vbKeyB66B 键
vbKeyC67C 键
vbKeyD68D 键
vbKeyE69E 键
vbKeyF70F 键
vbKeyG71G 键
vbKeyH72H 键
vbKeyI73I 键
vbKeyJ74J 键
vbKeyK75K 键
vbKeyL76L 键
vbKeyM77M 键
vbKeyN78N 键
vbKeyO79O 键
vbKeyP80P 键
vbKeyQ81Q 键
vbKeyR82R 键
vbKeyS83S 键
vbKeyT84T 键
vbKeyU85U 键
vbKeyV86V 键
vbKeyW87W 键
vbKeyX88X 键
vbKeyY89Y 键
vbKeyZ90Z 键

0 至 9 键与数字 0 – 9 的 ASCII 码相同:

常数描述
vbKey0480 键
vbKey1491 键
vbKey2502 键
vbKey3513 键
vbKey4524 键
vbKey5535 键
vbKey6546 键
vbKey7557 键
vbKey8568 键
vbKey9579 键

下列常数代表数字键盘上的键:

常数描述
vbKeyNumpad00x600 键
vbKeyNumpad10x611 键
vbKeyNumpad20x622 键
vbKeyNumpad30x633 键
vbKeyNumpad40x644 键
vbKeyNumpad50x655 键
vbKeyNumpad60x666 键
vbKeyNumpad70x677 键
vbKeyNumpad80x688 键
vbKeyNumpad90x699 键
vbKeyMultiply0x6AMULTIPLICATION SIGN (*) 键
vbKeyAdd0x6BPLUS SIGN (+) 键
vbKeySeparator0x6CENTER 键
vbKeySubtract0x6DMINUS SIGN (-) 键
vbKeyDecimal0x6EDECIMAL POINT (.) 键
vbKeyDivide0x6FDIVISION SIGN (/) 键

下列常数代表功能键:

常数描述
vbKeyF10x70F1 键
vbKeyF20x71F2 键
vbKeyF30x72F3 键
vbKeyF40x73F4 键
vbKeyF50x74F5 键
vbKeyF60x75F6 键
vbKeyF70x76F7 键
vbKeyF80x77F8 键
vbKeyF90x78F9 键
vbKeyF100x79F10 键
vbKeyF110x7AF11 键
vbKeyF120x7BF12 键
vbKeyF130x7CF13 键
vbKeyF140x7DF14 键
vbKeyF150x7EF15 键
vbKeyF160x7FF16 键


Miscellaneous 常数

下列常数由 Visual Basic for Applications 中的类型库定义,可用来在代码中的任何地方代替实际值:

常数等于描述
vbCrLfChr(13) + Chr(10)回车符与换行符结合
vbCrChr(13)回车符
vbLfChr(10)换行符
vbNewLineChr(13) + Chr(10) 平台指定的新行字符;适用于当前平台
vbNullCharChr(0)值为 0 的字符
vbNullString值为 0 的字符串用来调用外部过程;与长度为零的字符串 ("") 不同
vbObjectError-2147221504用户定义的错误号应当大于该值,例如:
Err.Raise Number = vbObjectError + 1000
vbTabChr(9)Tab 字。
vbBackChr(8)退格字符
vbFormFeedChr(12)在 Microsoft Windows 中没有作用
vbVerticalTabChr(11)在 Microsoft Windows 中没有作用


MsgBox 常数

可在代码中的任何地方使用下列常数代替实际值:

MsgBox 参数

常数描述
vbOKOnly0只有 OK 按钮(缺省值)
vbOKCancel1OKCancel 按钮
vbAbortRetryIgnore2AbortRetry,和 Ignore 按钮
vbYesNoCancel3YesNo,和 Cancel 按钮
vbYesNo4YesNo 按钮
vbRetryCancel5RetryCancel 按钮
vbCritical16关键消息
vbQuestion32警告询问
vbExclamation48警告消息
vbInformation64通知消息
vbDefaultButton10第一个按钮是缺省的(缺省值)
vbDefaultButton2256第二个按钮是缺省的
vbDefaultButton3512第三个按钮是缺省的
vbDefaultButton4768第四个按钮是缺省的
vbApplicationModal0应用程序形态的消息框(缺省值)
vbSystemModal4096系统强制返回的消息框
vbMsgBoxHelpButton16384添加Help按钮到消息框
VbMsgBoxSetForeground65536指定消息框窗口作为前景窗口
vbMsgBoxRight524288文本是右对齐的
vbMsgBoxRtlReading1048576指定在希伯来语和阿拉伯语系统中,文本应当显示为从右到左读

MsgBox 返回值

常数描述
vbOK1按下 OK 按钮
vbCancel2按下 Cancel 按钮
vbAbort3按下 Abort 按钮
vbRetry4按下 Retry 按钮
vbIgnore5按下 Ignore 按钮
vbYes6按下 Yes 按钮
vbNo7按下 No 按钮


QueryClose常数

下列常数可以用于代码中的任何位置以代替实际值:

常数描述
vbFormControlMenu0用户从窗体上的Control 菜单选择Close 命令。
vbFormCode1Unload 语句被从代码中调用。
vbAppWindows2当前 Microsoft Windows 操作环境会话结束。
vbAppTaskManager3Windows Task Manager 正在关闭应用程序。

Dir、GetAttr 和 SetAttr 常数?

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbNormal0正常的(Dir SetAttr 的缺省值)
vbReadOnly1只读的
vbHidden2隐藏的
vbSystem4系统文件
vbVolume8卷标
vbDirectory16目录或文件夹
vbArchive32文件自上一次备份后已经改变

Shell 常数

可在代码中的任何地方使用下列常数代替实际值:

常数描述
vbHide0窗口是隐藏的,并且焦点被传递给隐藏窗口。
vbNormalFocus1窗口拥有焦点,并且恢复到原来的大小与位置。
vbMinimizedFocus2窗口缩小为图符并拥有焦点。
vbMaximizedFocus3窗口最大化并拥有焦点。
vbNormalNoFocus4窗口被恢复到最近一次的大小与位置。当前活动窗口仍为活动窗口。
vbMinimizeNoFocus6窗口缩小为图符。当前活动窗口仍为活动窗口。

特殊文件夹常数

仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数。

常数描述
WindowsFolder0Windows文件夹包含由Windows操作系统安装的文件。
SystemFolder1System(系统)文件夹包含库、字体和设备驱动程序。
TemporaryFolder2Temp(临时)文件夹用于存储临时文件。它的路径可在TMP环境变量中找到。


StrConv 常数

可在代码中的任何地方使用下列常数代替实际值:

Constant描述
vbUpperCase1将字符串转换成大写字符。
vbLowerCase2将字符串转换成小写字符。
vbProperCase3将字符串中每个词的第一个字母转换成大写。
vbWide4将字符串中的窄(单字节)字符转换成宽(双字节)字符。适用于远东地区。
vbNarrow8将字符串中的宽(双字节)字符转换成窄(单字节)字符。适用于远东地区。
vbKatakana16将字符串中的 Hiragana 字符转换成 Katakana 字符;只适用于日文地区。
vbHiragana32将字符串中的 Katakana 字符转换成 Hiragana 字符;只适用于日文地区。
vbUnicode64利用缺省的系统代码页将字符串转换成 Unicode。
vbFromUnicode128将字符串由 Unicode 转换成缺省的系统代码页。


System Color 常数

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbScrollBars0x80000000滚动条颜色
vbDesktop0x80000001桌面颜色
vbActiveTitleBar0x80000002活动窗口的标题栏颜色
vbInactiveTitleBar0x80000003非活动窗口的标题栏颜色
vbMenuBar0x80000004菜单背景色
vbWindowBackground0x80000005窗口背景色
vbWindowFrame0x80000006窗口框架颜色
vbMenuText0x80000007菜单文本颜色
vbWindowText0x80000008窗口文本颜色
vbTitleBarText0x80000009标题、调整框和滚动箭头的文本颜色
vbActiveBorder0x8000000A活动窗口边框颜色
vbInactiveBorder0x8000000B非活动窗口边框颜色
vbApplicationWorkspace0x8000000C多文档界面 (MDI) 应用程序的背景色
vbHighlight0x8000000D控件中选中项目的背景色
vbHighlightText0x8000000E控件中选中项目的文本颜色
vbButtonFace0x8000000F命令按钮表面阴影颜色
vbButtonShadow0x80000010命令按钮边缘阴影颜色
vbGrayText0x80000011灰色(无效)文本
vbButtonText0x80000012下压按钮文本颜色
vbInactiveCaptionText0x80000013非活动标题文本颜色
vb3DHighlight0x800000143-D 显示元素的突出显示颜色
vb3DDKShadow0x800000153-D 显示元素的最深阴影颜色
vb3DLight0x80000016vb3Dhighlight 之外最亮的 3-D 颜色
vbInfoText0x80000017工具提示文本颜色
vbInfoBackground0x80000018工具提示背景色


三态常数

仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数。

常数描述
TristateTrue–1True
TristateFalse0False
TristateUseDefault–2使用缺省设置值。

VarType 常数

可在代码中的任何地方用下列常数代替实际值:

常数描述
vbEmpty0未初始化(缺省值)
vbNull1不含任何有效数据
vbInteger2Integer
vbLong3长整数
vbSingle4单精度浮点数
vbDouble5双精度浮点数
vbCurrency6Currency
vbDate7Date
vbString8String
vbObject9对象
vbError10错误
vbBoolean11布尔
vbVariant12Variant(只用于变体的数组类型)
vbDataObject13数据访问对象
vbDecimal14Decimal
vbByte17Byte
vbUserDefinedType36包含用户定义类型的变量
vbArray8192数组


Visual Basic 常数

Visual Basic for Applications 定义了一些常数,使程序设计变得更为简单。下列常数可在程序代码中的任何地方代替实际值:

Calendar 常数

Color 常数

Compiler 常数

Date 常数

Dir、GetAttr 和 SetAttr 常数

IMEStatus 常数

Instr、StrComp 常数

Keycode 常数

Miscellaneous 常数

MsgBox 常数

QueryClose 常数

QueryClose 常数

Shell 常数

StrConv 常数

System Color 常数

VarType 常数


Boolean 数据类型

Boolean 变量存储为 16 位(2 个字节)的数值形式,但只能是 True 或是 FalseBoolean 变量的值显示为 True False(在使用 Print 的时候),或者 #TRUE##FALSE#(在使用 Write # 的时候)。使用关键字 TrueFalse 可将 Boolean 变量赋值为这两个状态中的一个。

当转换其他的数值类型为 Boolean 值时,0 会转成 False,而其他的值则变成 True。当转换 Boolean 值为其他的数据类型时,False 成为 0,而 True 成为 -1。


Byte 数据类型

Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。

Byte 数据类型在存储二进制数据时很有用。


Currency 数据类型

Currency 变量存储为 64 位(8 个字节)整型的数值形式,然后除以 10,000 给出一个定点数,其小数点左边有 15 位数字,右边有 4 位数字。这种表示法的范围可以从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。Currency 的类型声明字符为at号 (@)。

Currency 数据类型在货币计算与定点计算中很有用,在这种场合精度特别重要。


Date 数据类型

Date 变量存储为 IEEE 64 位(8 个字节)浮点数值形式,其可以表示的日期范围从 100 年 1 月 1 日到 9999 年 12 月 31 日,而时间可以从 0:00:00 到 23:59:59。任何可辨认的文本日期都可以赋值给 Date 变量。日期文字须以数字符号 (#) 扩起来,例如,#January 1, 1993##1 Jan 93#

Date 变量会根据计算机中的短日期格式来显示。时间则根据计算机的时间格式(12 或 24 小时制)来显示。

当其他的数值类型要转换为 Date 型时,小数点左边的值表示日期信息,而小数点右边的值则表示时间。午夜为 0 而中午为 0.5。负整数表示 1899 年 12 月 30 日之前的日期。


Decimal 数据类型

Decimal 变量存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数。这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。

注意 此时,Decimal 数据类型只能在 Variant中使用,也就是说,不能声明一变量为 Decimal 的类型。不过可用 Cdec 函数,创建一个子类型为 Decimal Variant


Double 数据类型

Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)。


Integer 数据类型

Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字符是百分比符号 (%)。

也可以用 Integer 变量来表示枚举值。枚举值可包含一个有限集合,该集合包含的元素都是唯一的整数,每一个整数都在它使用时的上下文当中有其特殊意义。枚举值为在已知数量的选项中做出选择提供了一种方便的方法,例如,black = 0,white = 1 等等。较好的编程作法是使用 Const 语句将每个枚举值定义成常数。


Long 数据类型

Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。


Object 数据类型

Object 变量存储为 32 位(4 个字节)的地址形式,其为对象的引用。利用 Set 语句,声明为 Object 的变量可以赋值为任何对象的引用。

注意 虽然以 Object 类型声明的变量足以适应包含对各种对象的引用,但是绑定到变量引用的对象总是在晚期(运行时)绑定。要强迫在早期(编译时间)绑定的话,须将对象的引用赋值给用特定类名称声明的变量。


Single 数据类型

Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。


String 数据类型

字符串有两种:变长与定长的字符串。

  • 变长字符串最多可包含大约 20 亿 ( 2^31)个字符。

  • 定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。

注意 Public 定长字符串不能在类模块中使用。

String 之字符码的范围是 0 到 255。字符集的前 128 个字符(0 到 127)对应于标准的 U.S. 键盘上的字符与符号。这前 128 个字符与 ASCII 字符集中所定义的相同。后 128 个字符(128 到 255)则代表特殊字符,例如国际字符,重音符号,货币符号及分数。String 的类型声明字符为美元号 ($)。


用户定义数据类型

可以是任何用 Type 语句定义的数据类型。用户自定义类型可包含一个或多个某种数据类型的数据元素、数组或一个先前定义的用户自定义类型。例如:

Type MyType
   MyName As String   '定义字符串变量存储一个名字。
   MyBirthDate As Date   '定义日期变量存储一个生日。
   MySex As Integer   '定义整型变量存储性别
End Type            '0 为女,1 为男)

Variant 数据类型

Variant 数据类型是所有没被显式声明(用如 DimPrivate、PublicStatic等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。

Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据。Variant 也可以包含 EmptyErrorNothing Null等特殊值。可以用 VarType 函数或 TypeName 函数来决定如何处理 Variant 中的数据。

数值数据可以是任何整型或实型数,负数时范围从 -1.797693134862315E308 到 -4.94066E-324,正数时则从 4.94066E-324 到 1.797693134862315E308。通常,数值Variant 数据保持为其 Variant 中原来的数据类型。例如,如果把一个 Integer赋值给 Variant,则接下来的运算会把此 Variant 当成 Integer 来处理。然而,如果算术运算针对含 Byte、Integer、Long 或 Single 之一的Variant 执行,并当结果超过原来数据类型的正常范围时,则在 Variant 中的结果会提升到较大的数据类型。如 Byte 则提升到 IntegerInteger 则提升到 Long,而 LongSingle 则提升为 Double。当 Variant 变量中有 Currency、Decimal 及 Double 值超过它们各自的范围时,会发生错误。

可以用 Variant 数据类型来替换任何数据类型,这样会更有适应性。如果 Variant 变量的内容是数字,它可以用字符串来表示数字或是用它实际的值来表示,这将由上下文来决定,例如:

Dim MyVar As Variant
MyVar = 98052

在前面的例子中,MyVar 内有一实际值为 98052 的数值。像期望的那样,算术运算子可以对 Variant 变量运算,其中包含数值或能被解释为数值的字符串数据。如果用 + 运算子来将 MyVar 与其他含有数字的 Variant 或数值类型的变量相加,结果便是一算术和。

Empty 值用来标记尚未初始化(给定初始值)的Variant 变量。内含 Empty Variant 在数值的上下文中表示 0,如果是用在字符串的上下文中则表示零长度的字符串 ("")。

不应将 Empty 与 Null 弄混。Null 是表示 Variant 变量确实含有一个无效数据。

Variant 中,Error 是用来指示在过程中出现错误时的特殊值。然而,不像对其他种类的错误那样,程序并不产生普通的应用程序级的错误处理。这可以让程序员,或应用程序本身,根据此错误值采取另外的行动。可以用 CVErr 函数将实数转换为错误值来产生 Error 值。


#Const 指令

用来定义 Visual Basic 的条件编译常数。

语法

#Const constname = expression

#Const 编译指令的语法具有以下几个部分:

部分描述
constname必要;Variant (String)。常数;名称要遵守变量命名的约定。
expression必要。文字、其他的条件编译常数或包含除了 Is 以外的算术或逻辑运算符的任意组合。

说明

条件编译常数在其出现的模块中总是 Private。不可能利用 #Const 指令建立 Public 编译常数。Public 编译常数只能在用户接口中建立。

expression 中只能使用编译常数及文字。使用一个用 Const 定义的标准常数,或者使用一个未定义的常数,都会导致错误发生。反之,用 #Const 关键字定义的常数也只能用于条件编译。

不管条件编译常数在程序中的位置如何,都总是在模块级别中进行计算。


#If...Then...#Else 指令

条件编译已选择的 Visual Basic 代码块。

语法

#If expression Then

statements

[#ElseIf expression-n Then

[elseifstatements]]

[#Else

[elsestatements]]

#End If

#If...Then...#Else 指令的语法具有以下几个部分:

部分描述
expression必要。包含一个或多个条件编译常数、文字与运算符的任何表达式,其值为 TrueFalse
statements必要。Visual Basic 程序行或编译指令,如果关联的表达式为 True,则运行它们。
expression-n可选。由一或多个条件编译常数、文字和运算符组成的任何一个表达式,其值为 TrueFalse
elseifstatements可选。一个或多个程序行或编译命令,如果 expression-nTrue,则运行它们。
elsestatements可选。一个或多个程序行或编译命令,如果以前的expressionexpression-n 中没有一个为 True,则运行它们。

说明

#If...Then...#Else 指令的作用与 If...Then...Else 语句相同,其差异在于 #If#Else#ElseIf,及 #End If 指令没有单独成行的形式,也就是说,在指令所在的那一行,不能有其他代码出现。条件编译通常用来编译不同平台上的同一个程序。也可以用来避免调试程序代码出现在可执行程序中。条件编译时被排除的程序代码在最后的可执行文件中被完全略去,所以不会对程序的大小或功能有任何影响。

无论结果如何,都要计算所有表达式。所以,在表达式中用到的所有常数都必须加以定义— 任何未定义的常数都会被当作 Empty 来计算取值。

注意   Option Compare 语句不会影响 #If #ElseIf 语句中的表达式。条件编译指令中的表达式总是用 Option Compare Text 计算值。


Abs 函数

返回参数的绝对值,其类型和参数相同。

语法

Abs(number)

必要的 number 参数是任何有效的数值表达式,如果 number 包含 Null,则返回 Null,如果 number 是未初始化的变量,则返回 0。

说明

一个数的绝对值是将正负号去掉以后的值。例如,ABS(-1)ABS(1) 都返回 1


Array 函数

返回一个包含数组的 Variant。

语法

Array(arglist)

所需的 arglist 参数是一个用逗号隔开的值表,这些值用于给 Variant 所包含的数组的各元素赋值。如果不提供参数,则创建一个长度为 0 的数组。

说明

用来表示数组元素的符号由变量名、圆括号以及括号中的所需元素的索引号组成。在下面的示例中,第一条语句创建一个 Variant 的变量 A。第二条语句将一个数组赋给变量 A。最后一条语句将该数组的第二个元素的值赋给另一个变量。

Dim A As Variant
A = Array(10,20,30)
B = A(2)

使用 Array 函数创建的数组的下界受 Option Base 语句指定的下界的决定, 除非 Array 是由类型库(例如 VBA.Array )名称限定。如果是由类型库名称限定,则 Array 不受 Option Base 的影响。

注意 没有作为数组声明的 Variant 也可以表示数组。除了长度固定的字符串以及用户定义类型之外,Variant 变量可以表示任何类型的数组。尽管一个包含数组的 Variant 和一个元素为 Variant 类型的数组在概念上有所不同,但对数组元素的访问方式是相同的。


Asc 函数

返回一个 Integer,代表字符串中首字母的字符代码。

语法

Asc(string)

必要的 string 参数可以是任何有效的字符串表达式。如果 string 中没有包含任何字符,则会产生运行时错误。

说明

在非 DBCS 系统下,返回值范围为 0 – 255 。在 DBCS 系统下,则为 -32768 – 32767。

注意    AscB 函数作用于包含在字符串中的字节数据,AscB 返回第一个字节的字符代码,而非字符的字符代码。AscW 函数返回 Unicode 字符代码,若平台不支持 Unicode,则与 Asc 函数功能相同。


Atn 函数

返回一个 Double,指定一个数的反正切值。

语法

Atn(number)

必要的 number 参数是一个 Double 或任何有效的数值表达式。

说明

Atn 函数的参数值 (number) 为直角三角形两边的比值并返回以弧度为单位的角。这个比值是角的对边长度除以角的邻边长度之商。

值的范围在 -pi/2 和 pi/2 弧度之间。

为了将角度转换为弧度,请将角度乘以 pi/180。为了将弧度转换为角度,请将弧度乘以 180/pi。

注意   AtnTan 的反三角函数,Tan 的参数值为角度,返回直角三角形的两条边的比值。不要将 Atn 和余切函数混淆,余切函数值是正切函数值的倒数,cotangent = (1/tangent)。


CallByName 函数

执行一个对象的方法,或者设置或返回一个对象的属性。

语法

CallByName(object, procedurename, calltype,[arguments()])

CallByName 函数的语法有以下部分:

部分描述
object必需的;变体型(对象)。函数将要执行的对象的名称。
procedurename必需的;变体型(字符串)。一个包含该对象的属性名称或者方法名称的字符串表达式。
calltype必需的;常数。一个 vbCallType 类型的常数,代表正在被调用的过程的类型。
arguments()可选的:变体型(数组)

说明

CallByName 函数用于获取或者设置一个属性,或者在运行时使用一个字符串名称来调用一个方法。

在下面的例子中,第一行使用 CallByName 来设置一个文本框的 MousePointer 属性,第二行得到 MousePointer 属性的值,第三行调用 Move 方法来移动文本框:

CallByName Text1, "MousePointer", vbLet, vbCrosshair
Result = CallByName (Text1, "MousePointer", vbGet)
CallByName Text1, "Move", vbMethod, 100, 100

Choose 函数

从参数列表中选择并返回一个值。

语法

Choose(index, choice-1[, choice-2, ... [, choice-n]])

Choose 函数的语法具有以下几个部分:

部分描述
index必要参数,数值表达式或字段,它的运算结果是一个数值,且界于 1 和可选择的项目数之间。
choice必要参数,Variant 表达式,包含可选择项目的其中之一。

说明

Choose 会根据 index 的值来返回选择项列表中的某个值。如果 index 是 1,则 Choose 会返回列表中的第 1 个选择项。如果 index 是 2,则会返回列表中的第 2 个选择项,以此类推。

可以使用 Choose 来查阅一个列表中的项目。例如,如果 index 所指定的值为 3,而 choice-1 = "one"、choice-2 = "two"、且 choice-3 = "three",那么 Choose 将返回 "three"。当 index 代表一选项组中的值时,则这项功能将会特别有用。

即使它只返回一个选项值,Choose 仍然会计算列表中的每个选择项。所以应该注意到这项副作用。例如,当在每个选择项表达式中使用了 MsgBox 函数作为其中的一部分时,每计算一个选择项,就会显示一次消息框。

index小于 1 或大于列出的选择项数目时,Choose 函数返回 Null。

如果 index 不是整数,则会先四舍五入为与其最接近的整数。


Chr 函数

返回 String,其中包含有与指定的字符代码相关的字符 。

语法

Chr(charcode)

必要的 charcode 参数是一个用来识别某字符的 Long。

说明

0 到 31 之间的数字与标准的非打印 ASCII 代码相同。例如,Chr(10) 可以返回换行字符。charcode 的正常范围为 0 – 255。然而,在 DBCS 系统,charcode 的实际范围为 -32768 到 65535。

注意   ChrB 函数作用于包含在 String 中的字节数据。ChrB 总是返回一个单字节,而不是返回一个字符,一个字符可能是一个或两个字节。ChrW 函数返回包含 Unicode 的 String,若在不支持 Unicode 的平台上,则其功能与 Chr 函数相同。


Command 函数

返回命令行的参数部分,该命令行用于装入 Microsoft Visual Basic 或 Visual Basic 开发的可执行程序。

语法

Command

说明

当从命令行装入 Visual Basic 时,/cmd 之后的命令行的任何部分作为命令行的参数传递给程序。下面的示例中,cmdlineargs 代表 Command 函数返回的参数信息。

VB /cmd cmdlineargs

对于使用 Visual Basic 开发并编译为 .exe 文件的应用程序,Command 返回出现在命令行中应用程序名之后的任何参数。例如:

MyApp cmdlineargs

想知道如何在正在使用的应用程序的用户界面中改变命令行参数,请搜寻关于“命令行参数”的帮助。


Cos 函数

返回一个 Double,指定一个角的余弦值。

语法

Cos(number)

必要的 number 参数是一个 Double 或任何有效的数值表达式,表示一个以弧度为单位的角。

说明

Cos 函数的参数为一个角,并返回直角三角形两边的比值。该比值为角的邻边长度除以斜边长度之商。

结果的取值范围在 -1 到 1 之间。

为了将角度转换成弧度,请将角度乘以 pi/180。为了将弧度转换成角度,请将弧度乘以 180/pi。


CreateObject 函数

创建并返回一个对 ActiveX 对象的引用。

语法

CreateObject(class,[servername])

 CreateObject 函数的语法有如下部分:

部分描述
class必需的; Variant (String). 要创建的应用程序名称和类。
servername可选的; Variant (String). 要在其上创建对象的网络服务器名称。

class 参数使用 appname.objecttype 这种语法,包括以下部分:

部分描述
appname必需的;Variant字符串)。提供该对象的应用程序名。
objecttype必需的;Variant字符串)。待创建对象的类型或类。

说明

每个支持自动化的应用程序都至少提供一种对象类型。例如,一个字处理应用程序可能会提供 Application 对象,Document 对象,以及 Toolbar 对象。

要创建 ActiveX 对象,只需将 CreateObject 返回的对象赋给一个对象变量:

'声明一个对象变量来存放该对象
'的引用。Dim as Object 采用后期绑定方式。
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")

上述代码将启动该应用程序创建该对象,在本例中就是创建一个 Microsoft Excel 电子数据表。对象创建后,就可以在代码中使用自定义的对象变量来引用该对象。在下面的示例中,可以使用对象变量 ExcelSheet 来访问新建对象的属性和方法,以及访问 Microsoft Excel 的其它对象,包括应用程序对象和单元格集合。

'设置 Application 对象使 Excel 可见
ExcelSheet.Application.Visible = True
'在表格的第一个单元中写些文本
ExcelSheet.Cells(1, 1).Value = "This is column A, row 1"
'将该表格保存到 C:/test.doc 目录
ExcelSheet.SaveAs "C:/ TEST.DOC"
'使用应用程序对象的 Quit 方法关闭 ExcelExcelSheet.Application.Quit
'释放该对象变量
Set ExcelSheet = Nothing

使用 As Object 子句声明对象变量,可以创建一个能包含任何类型对象引用的变量。不过,该变量访问对象是后期绑定的,也就是说,绑定在程序运行时才进行。要创建一个使用前期绑定方式的对象变量,也就是说,在程序编译时就完成绑定,则对象变量在声明时应指定类 ID。例如,可以声明并创建下列 Microsoft Excel 引用:

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.WorkSheet

Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets(1)

前期绑定的变量引用可以提供更好的性能,但该变量只能存放声明中所指定的类的引用。

可以将 CreateObject 函数返回的对象传给一个参数为对象的函数。例如,下面的代码创建并传递了一个 Excel.Application 对象的引用:

Call MySub (CreateObject("Excel.Application"))

可以在一个远端连网的计算机上创建一个对象,方法是把计算机的名称传递给 CreateObjectservername 参数。这个名称与共享名称的机器名部份相同:对于一个共享名称为 "MyServer//Public," 的 servername 参数是 "MyServer" 。

下面的代码返回在一个名为 MyServer 的远端计算机上运行的 Excel 实例的版本号:

Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application", "MyServer")
Debug.Print xlApp.Version

如果远端服务器不存在或者不可用,则会发生一个运行时错误。

注意 当该对象当前没有实例时,应使用 CreateObject。如果该对象已有实例在运行,就会启动一个新的实例,并创建一个指定类型的对象。要使用当前实例,或要启动该应用程序并加载一个文件,可以使用 GetObject 函数。

如果对象已登记为单个实例对象,则不管执行多少次 CreateObject,都只能创建该对象的一个实例。


CurDir 函数

返回一个 Variant (String),用来代表当前的路径。

语法

CurDir[(drive)]

可选的 drive 参数是一个字符串表达式,它指定一个存在的驱动器。如果没有指定驱动器,或 drive 是零长度字符串 (""),则 CurDir 会返回当前驱动器的路径。


CVErr 函数

返回 Error 子类型的 Variant,其中包含指定的错误号。

语法

CVErr(errornumber)

必要的 errornumber 参数可以是任何有效的错误号代码。

说明

可以在过程中,使用 CVErr 函数来创建用户自定义错误。例如,如果创建一个函数,它可以接受若干个参数,且正常返回一个字符串,则可以让函数来判断输入的参数,确认它们是在可接受的范围内。如果不是的话,此函数将不会返回所要的字符串。在这种情况下,CVErr 可以返回一个错误号,并告知应该采取的行动。

注意,Error 的隐式转换是不允许的,例如,不能直接把 CVErr 的返回值赋值给一个非 Variant 的变量。然而,可以对 CVErr 的返回值进行显式转换(使用 CIntCDbl 等等),并赋值给适当的数据类型变量。


Date 函数

返回包含系统日期的 Variant (Date)。

语法

Date

说明

为了设置系统日期,请使用 Date 语句。


DateAdd 函数

返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔。

语法

DateAdd(interval, number, date)

DateAdd 函数语法中有下列命名参数:

部分描述
interval必要。字符串表达式,是所要加上去的时间间隔。
number必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。
date必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。

设置

interval 参数具有以下设定值:

设置描述
yyyy
q
m
y一年的日数
d
w一周的日数
ww
h
n分钟
s

说明

可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。

为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。

DateAdd 函数将不返回有效日期。在以下实例中将 1 月31 日加上一个月:

DateAdd(m, 1, 31-Jan-95)

上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。

如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。

如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。

注意   DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。


DateDiff 函数

返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。

语法

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 函数语法中有下列命名参数:

部分描述
interval必要。字符串表达式,表示用来计算date1date2 的时间差的时间间隔
Date1□date2必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。

设置

interval 参数的设定值如下:

设置描述
yyyy
q
m
y一年的日数
d
w一周的日数
ww
h
n分钟
s

firstdayofweek 参数的设定值如下:

常数描述
vbUseSystem0使用 NLS API 设置。
vbSunday1星期日(缺省值)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

常数描述
vbUseSystem0用 NLS API 设置。
vbFirstJan11从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays2从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek3从第一个无跨年度的星期开始。

说明

DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。

为了计算 date1date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w) 时,DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含 date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算 date1date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff 的计数结果中;但不论 date1 是否为星期日,都不将它算进去。

如果 date1 date2 来得晚,则 DateDiff 函数的返回值为负数。

firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。

如果 date1 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 date2 用双引号 (" ") 括起来,且年份略而不提,则在每次计算表达式 date1 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。

在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。


DatePart 函数

返回一个包含已知日期的指定时间部分的 Variant (Integer)。

语法

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

DatePart 函数语法中有下列命名参数:

部分描述
interval必要。字符串表达式,是要返回的时间间隔。
date必要。要计算的 Variant (Date) 值。
Firstdayofweek可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear可选。指定一年第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。

设置

interval 参数的设定值如下:

设置描述
yyyy
q
m
y一年的日数
d
w一周的日数
ww
h
n分钟
s

firstdayofweek 参数的设定值如下:

常数描述
vbUseSystem0使用 NLS API 设置。
vbSunday1星期日(缺省值)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

firstweekofyear 参数的设定值如下:

常数描述
vbUseSystem0使用 NLS API 设置。
vbFirstJan11从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays2从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek3从第一个无跨年度的星期开始。

说明

DatePart 函数可以用来计算日期并返回指定的时间间隔。例如,可以使用DatePart 计算某个日期是星期几或目前为几点钟。

firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。

如果 date 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date 用双引号 (" ") 括起来,且年份略而不提,则在每次计算 date 表达式时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。


DateSerial 函数

返回包含指定的年、月、日的 Variant (Date)。

语法

DateSerial(year, month, day)

DateSerial 函数语法有下列的命名参数:

部分描述
year必要;Integer。从 100 到 9999 间的整数,或一数值表达式。
month必要;Integer。任何数值表达式。
day必要;Integer。任何数值表达式。

说明

为了指定某个日期,如 1991 年 12 月 31 日,DateSerial 函数中的每个参数的取值范围应该是可接受的;即,日的取值范围应在 1-31 之间,而月的取值范围应在 1-12 之间。但是,当一个数值表达式表示某日之前或其后的年、月、日数时,也可以为每个使用这个数值表达式的参数指定相对日期。

以下示例中使用了数值表达式代替绝对日期。这里,DateSerial 函数返回 1990 年 8 月 1 日的 十 年 (1990 - 10) 零两个月 (8 - 2) 又一天 (1 - 1) 之前的日期;换句话说,就是 1980 年 5 月 31 日。

DateSerial(1990 - 10, 8 - 2, 1 - 1)

year 参数的数值若介于 0 与 29 之间,则将其解释为 2000–2029年,若介于 30 和 99 之间则解释为1930–1999年。而对所有其它 year 参数,则请用四位数值表示(如 1800)。

当任何一个参数的取值超出可接受的范围时,它会适时进位到下一个较大的时间单位。例如,如果指定了 35 天,则这个天数被解释成一个月加上多出来的日数,多出来的日数将由其年份与月份来决定。如果一个参数值超出 -32,768 到 32,767 的范围,就会导致错误发生。


DateValue 函数

返回一个 Variant (Date)。

语法

DateValue(date)

必要的 date 参数 date 通常是字符串表达式,表示从 100 年 1 月 1 日到 9999  年 12 月 31 日之间的一个日期。但是,date 也可以是任何表达式,其所代表的日期、时间在上述范围内。

说明

如果 date 是一个字符串,且其内容只有数字以及分隔数字的日期分隔符,则 DateValue 就会根据系统中指定的短日期格式来识别月、日、年的顺序。DateValue 也识别明确的英文月份名称,全名或缩写均可。例如,除了 12/30/1991 和 12/30/91 之外,DateValue 也识别 December 30, 1991 和 Dec 30, 1991。

如果 date 中略去了年这一部分,DateValue 就会使用由计算机系统日期设置的当前年份。

如果 date 参数包含时间信息,则 DateValue 不会返回它。但是,如果 date 包含无效时间信息(如 89:98),则会导致错误发生。


Day 函数

返回一个 Variant (Integer),其值为 1 到 31 之间的整数,表示一个月中的某一日。

语法

Day(date)

必要的 date 参数,可以是任何能够表示日期的 Variant、数值表达式、字符串表达式或它们的组合。如果 date 包含 Null,则返回 Null


DDB 函数

返回一个 Double,指定一笔资产在一特定期间内的折旧。可使用双下落收复平衡方法或其它指定的方法进行计算。

语法

DDB(cost, salvage, life, period[, factor])

DDB 函数具有下列命名参数:

部分描述
cost必要。Double 指定资产的初始成本。
salvage必要。Double.指定使用年限结束时的资产价值。
life必要。Double 指定资产可用的可用年限。
period必要。Double 指定计算资产折旧所用的那一期间。
factor可选。Variant 指定收复平衡下落时的速度。如果省略的话,2(双下落方法)为缺省值。

说明

双下落收复平衡方法用加速利率法计算折旧。在第一段时期,折旧为最高,而在接下来的期间内降低。

lifeperiod 参数必须用相同的单位表示。例如,如果 life 用月份表示,则 period 也必须用月份表示。所有参数都必须是正值。

DDB 函数使用下列公式计算在一定时期后的折旧:

折旧 / period = ((cost alvage) * factor) / life


Dir 函数

返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。

语法

Dir[(pathname[, attributes])]

Dir 函数的语法具有以下几个部分:

部分描述
pathname可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。
attributes可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。

设置值

attributes 参数的设置可为:

常数描述
vbNormal0(缺省) 指定没有属性的文件。
vbReadOnly1指定无属性的只读文件
vbHidden2指定无属性的隐藏文件
VbSystem4指定无属性的系统文件
vbVolume8指定卷标文件;如果指定了其它属性,则忽略vbVolume
vbDirectory16指定无属性文件及其路径和文件夹。

注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。

说明

Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。

 由于 Macintosh 不支持通配符,使用文件类型指定文件组。可以使用 MacID 函数指定文件类型而不用文件名。比如,下列语句返回当前文件夹中第一个TEXT文件的名称:

Dir("SomePath", MacID("TEXT"))

 为选中文件夹中所有文件,指定一空串:

Dir("")

在 Microsoft Windows 中,如果在Dir函数中使用MacID函数,将产生错误。

任何大于256的attribute值都被认为是MacID 函数的值。

在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname

Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。

提示 由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。


DoEvents 函数

转让控制权,以便让操作系统处理其它的事件。

语法

DoEvents( )

说明

DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic 专业版,在其它的应用程序中,DoEvents 返回 0。

DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。

DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。

注意 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。


Environ 函数

返回 String,它关连于一个操作系统环境变量。 在 Macintosh 中不可用。

语法

Environ({envstring | number})

Environ 函数的语法含有以下这些命名参数:

部分描述
envstring可选参数。包含一个环境变量名的字符串表达式。
number可选参数。数值表达式,用来表示环境字符串在环境字符串表格中的数值顺序。number 参数可以是任意的数值表达式,不过在计算前,它会先转换为一个整数。

说明

如果在环境字符串表格中找不到 envstring,则会返回一个零长度字符串 ("")。如果找到,则 Environ 会返回一段文本,文本是赋值给指定的 envstring 的,也就是说,在环境字符串表格中对应那个环境变量的等号 (=) 后面的那段文本。

如果指定了 number,则在环境字符串表格中相应位置上的字符串会返回。在这种情况下,Environ 会返回整个文本,包括 envstring。如果在指定位置上没有环境字符串,那么 Environ 会返回一个零长度字符串。


EOF 函数

返回一个 Integer,它包含 Boolean 值 True,表明已经到达为 Random 或顺序 Input 打开的文件的结尾。

语法

EOF(filenumber)

必要的 filenumber 参数是一个 Integer,包含任何有效的文件号。

说明

使用 EOF 是为了避免因试图在文件结尾处进行输入而产生的错误。

直到到达文件的结尾,EOF 函数都返回 False。对于为访问 RandomBinary 而打开的文件,直到最后一次执行的 Get 语句无法读出完整的记录时,EOF 都返回 False

对于为访问 Binary 而打开的文件,在 EOF 函数返回 True 之前,试图使用 Input 函数读出整个文件的任何尝试都会导致错误发生。在用 Input 函数读出二进制文件时,要用 LOF Loc 函数来替换 EOF 函数,或者将 Get 函数与 EOF 函数配合使用。对于为 Output 打开的文件,EOF 总是返回 True


Error 函数

返回对应于已知错误号的错误信息。

语法

Error[(errornumber)]

这个可选的 errornumber 参数可以为任何有效的错误号。如果 errornumber 是有效的错误号,但尚未被定义,则 Error 将返回字符串“应用程序定义的错误或对象定义的错误”。如果 errornumber 不是有效的错误号,则会导致错误发生。如果省略 errornumber,就会返回与最近一次运行时错误对应的消息。如果没有发生运行时错误,或者 errornumber 是 0,则 Error 返回一个长度为零的字符串 ("")。

说明

请检查 Err 对象的属性设置,以便认定最近一次运行时错误。Error 函数的返回值对应于 Err 对象的 Description 属性。


Exp 函数

返回 Double,指定 e(自然对数的底)的某次方。

语法

Exp(number)

必要的 number 参数 number 是 Double 或任何有效的数值表达式。

说明

如果 number 的值超过 709.782712893,则会导致错误发生。常数 e 的值大约是 2.718282。

注意   Exp 函数的作用和 Log 的作用互补,所以有时也称做反对数。


FileAttr 函数

返回一个 Long,表示使用 Open 语句所打开文件的文件方式。

语法

FileAttr(filenumber, returntype)

FileAttr 函数的语法具有以下几个命名参数:

部分描述
filenumber必要。Integer 类型,任何有效的文件号。
returntype必要。Integer 类型。它是数字,指出返回信息的类型。指定 1 则可返回一个代表文件方式的数值。而仅仅在 16 位系统中, 指定 2 才可以恢复操作系统的文件句柄。在 32 位系统中不支持 Returntype 2,它会导致错误发生。

返回值

returntype 参数值为 1 时,下列返回值指出文件访问方式:

方式
Input1
Output2
Random4
Append8
Binary32


FileDateTime 函数

返回一个 Variant (Date),此为一个文件被创建或最后修改后的日期和时间。

语法

FileDateTime(pathname)

必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。


FileLen 函数

返回一个 Long,代表一个文件的长度,单位是字节。

语法

FileLen(pathname)

必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。

说明

当调用 FileLen 函数时,如果所指定的文件已经打开,则返回的值是这个文件在打开前的大小。

注意 若要取得一个打开文件的长度大小,使用 LOF 函数。


Filter函数

描述

返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。

语法

Filter(InputStrings, Value[, Include[, Compare]])

Filter函数语法有如下几部分:

部分描述
InputStrings必需的。要执行搜索的一维字符串数组。
Value必需的。要搜索的字符串。
Include可选的。Boolean值,表示返回子串包含还是不包含Value字符串。如果IncludeTrueFilter返回的是包含Value子字符串的数组子集。如果IncludeFalseFilter返回的是不包含Value子字符串的数组子集。
Compare可选的。数字值,表示所使用的字符串比较类型。有关其设置,请参阅下面的“设置值”部分。

设置值

Compare参数的设置值如下:

常数描述
vbUseCompareOption–1使用Option Compare语句的设置值来执行比较。
vbBinaryCompare 0执行二进制比较。
vbTextCompare 1执行文字比较。
vbDatabaseCompare 2只用于Microsoft Access。基于您的数据库信息来执行比较。

说明

如果在InputStrings中没有发现与Value相匹配的值,Filter返回一个空数组。如果InputStringsNull或不是一个一维数组,则产生错误。

Filter函数所返回的数组,其元素数目刚好是所找到的匹配项目数。


Format 函数

返回 Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。

语法

Format(expression[, format[, firstdayofweek[, firstweekofyear]]])

Format 函数的语法具有下面几个部分:

部分说明
expression必要参数。任何有效的表达式。
format可选参数。有效的命名表达式或用户自定义格式表达式。
firstdayofweek可选参数。常数,表示一星期的第一天。
firstweekofyear可选参数。常数,表示一年的第一周。

设置值

firstdayofweek 参数有下面设置:

常数说明
vbUseSystem0使用 NLS API 设置。
VbSunday1星期日(缺省)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

firstweekofyear 参数有下面设置:

常数说明
vbUseSystem0使用 NLS API 设置。
vbFirstJan11从包含一月一日的那一周开始(缺省)。
vbFirstFourDays2从本年第一周开始,而此周至少有四天在本年中。
VbFirstFullWeek3从本年第一周开始,而此周完全在本年中。

说明

格式化作法
数字使用预先定义的命名数值格式或创建用户自定义数值格式。
日期和时间使用预先定义的命名日期/时间格式或创建用户自定义日期/时间格式。
日期和时间序数使用日期和时间格式或数值格式。
字符串创建自定义的字符串格式。

如果在格式化数字时没有指定 formatFormat 会提供与 Str 函数类似的功能,尽管它是国际化的。然而,以 Format 作用在正数上不会保留正负号空间,而以 Str 的话则会。


FormatCurrency函数

描述

返回一个货币值格式的表达式,它使用系统控制面板中定义的货币符号。

语法

FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatCurrency函数语法有如下几部分:

部分描述
Expression必需的。要格式化的表达式。
NumDigitsAfterDecimal可选的。数字值,表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。
IncludeLeadingDigit可选的。三态常数,表示小数点前是否显示一个零。关于其值,请参阅“设置值”部分。
UseParensForNegativeNumbers可选的。三态常数,表示是否把负数值放在园括号内。关于其值,请参阅“设置值”部分。
GroupDigits可选的。三态常数,表示是否用组分隔符对数字进行分组,组分隔符由计算机的区域设置值指定。关于其值,请参阅“设置值”部分。

设置值

IncludeLeadingDigitUseParensForNegativeNumbers GroupDigits参数的设置值如下:

常数描述
TristateTrue–1True
TristateFalse0False
TristateUseDefault–2使用计算机区域设置中的设置值。

说明

当忽略一个或多个选项参数时,被忽略的参数值由计算机的区域设置值提供。

货币符号相对货币值的位置由计算机的区域设置值确定。

注意   除起始的零外,所有设置值信息都来自“区域设置”的“货币”选项卡,起始的零来自“数字”选项卡。


FormatDateTime函数

描述

返回一个日期或时间格式的表达式。

语法

FormatDateTime(Date[,NamedFormat])

FormatDateTime函数语法有如下几部分:

部分描述
Date必需的。要被格式化的日期表达式。
NamedFormat可选的。数字值,表示日期/时间所使用的格式。如果忽略该值,则使用vbGeneralDate

设置值

NamedFormat参数的设置值如下:

常数描述
vbGeneralDate0显示日期和/或时间。如果有日期部分,则用短日期格式显示。如果有时间部分,则用长时间格式显示。如果都有,两部分都显示。
vbLongDate1用计算机区域设置值中指定的长日期格式显示日期。
vbShortDate2用计算机区域设置值中指定的短日期格式显示日期。
vbLongTime3用计算机区域设置值中指定的时间格式显示时间。
vbShortTime4用24小时格式(hh:mm)显示时间。


FormatNumber函数

描述

返回一个数字格式的表达式。

语法

FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatNumber函数语法有如下几部分:

部分描述
Expression必需的。要被格式化的表达式。
NumDigitsAfterDecimal可选的。数字值,表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。
IncludeLeadingDigit可选的。三态常数,表示小数点前是否显示零。关于其值,请参阅“设置值”部分。
UseParensForNegativeNumbers可选的。三态常数,表示是否把负数值放在圆括号内。关于其值,请参阅“设置值”部分。
GroupDigits可选的。的三态常数,表示是否用组分隔符对数字分组,组分隔符在计算机的区域设置值中指定。关于其值,请参阅“设置值”部分。

设置值

IncludeLeadingDigit、UseParensForNegativeNumbersGroupDigits参数的设置值如下:

常数描述
TristateTrue–1True
TristateFalse0False
TristateUseDefault–2用计算机区域设置值中的设置值。

说明

当忽略一个或多个选项参数时,被忽略的参数值由计算机的区域设置值提供。

注意   所有设置值信息都来自“区域设置”的“数字”选项卡。


FormatPercent函数

描述

返回一个百分比格式(乘以100)的表达式,后面有%符号。

语法

FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatPercent函数语法有如下几部分:

部分描述
Expression必需的。要格式化的表达式。
NumDigitsAfterDecimal可选的。表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。
IncludeLeadingDigit可选的。三态常数,表示小数点前是否显示零。关于其值,请参阅“设置值”部分。
UseParensForNegativeNumbers可选的。三态常数,表示是否把负数放在圆括号内。关于其值,请参阅“设置值”部分。
GroupDigits可选的。三态常数,表示是否用组分隔符对数字进行分组,组分隔符在计算机的区域设置值中指定。关于其值,请参阅“设置值”部分。

设置值

IncludeLeadingDigit、UseParensForNegativeNumbersGroupDigits参数的设置值如下:

常数描述
TristateTrue–1True
TristateFalse0False
TristateUseDefault–2使用计算机区域设置值中的设置值。

说明

当忽略一个或多个选项参数时,被忽略的参数值由计算机的区域设置值提供。

注意   所有的设置值信息都来自“区域设置”的“数字”选项卡。


FreeFile 函数

返回一个 Integer代表下一个可供 Open 语句使用的文件号。

语法

FreeFile[(rangenumber)]

可选的参数 rangenumber 是一个 Variant它指定一个范围,以便返回该范围之内的下一个可用文件号。指定 0(缺省值)则返回一个介于 1 – 255 之间的文件号。指定 1 则返回一个介于 256 – 511 之间的文件号。

说明

使用 FreeFile 提供一个尚未使用的文件号。


FV 函数

返回一个 Double,指定未来的定期定额支付且利率固定的年金。

语法

FV(rate, nper, pmt[, pv[, type]])

FV 函数有下列命名参数:

部分描述
rate必要。Double,指定每一期的利率。例如,如果有一笔贷款年百分率 (APR) 为百分之十且按月付款的汽车贷款,则利率为 0.1/12 或 0.0083。
nper必要。Integer,指定一笔年金的付款总期限。例如,如果对一笔为期四年的汽车贷款选择按月付款方式,则贷款期限共有 4 * 12(或 48)个付款期。
pmt必要。Double 指定每一期的付款金额。付款金额通常包含本金和利息,而且此付款金额在年金的有效期间是不会改变的。
pv可选。Variant指定未来一系列付款(或一次付清款项)的现值。例如,当借钱买一辆汽车时,向贷方所借的金额为未来每月付款给贷方的现值。如果省略的话,缺省值为 0。
type可选。Variant,指定贷款到期时间。如果贷款在贷款周期结束时到期,请使用 0。如果贷款在周期开始时到期,请使用 1。如果省略的话,缺省值为 0。

说明

年金是一段时间内一系列固定现金支付。年金可以是贷款(如房屋抵押贷款),也可以是一笔投资(如按月储蓄计划)。

在支付期间,必须用相同的单位来计算 ratenper 参数。例如,如果 rate 用月份来计算,则 nper 也必须用月份来计算。

对所有参数,用负数表示现金支出(如储蓄存款),而用正数表示现金收入(如红利支票)。


GetAllSettings 函数

从 Windows 注册表中返回应用程序项目的所有注册表项设置及其相应值(开始是由 SaveSetting 产生)。

语法

GetAllSettings(appname, section)

GetAllSettings 函数的语法具有下列命名参数:

部分描述

appname必要。字符串表达式,包含应用程序或工程的名称,并要求这些应用程序或工程有注册表项设置

section必要。字符串表达式,包含区域名称,并要求该区域有注册表项设置。GetAllSettings 返回 Variant,其内容为字符串的二维数组,该二维数组包含指定区域中的所有注册表项设置及其对应值。

说明

如果 appname section 不存在,则 GetAllSettings 返回未初始化的 Variant


GetAttr 函数

返回一个 Integer,此为一个文件、目录、或文件夹的属性。

语法

GetAttr(pathname)

必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。

返回值

GetAttr 返回的值,是下面这些属性值的总和:

常数描述
vbNormal0常规
vbReadOnly1只读
vbHidden2隐藏
vbSystem4系统文件
vbDirectory16目录或文件夹
vbArchive32上次备份以后,文件已经改变
vbalias64指定的文件名是别名。

注意 这些常数是由 VBA 指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的值。

说明

若要判断是否设置了某个属性,在 GetAttr 函数与想要得知的属性值之间使用 And 运算符与逐位比较。如果所得的结果不为零,则表示设置了这个属性值。例如,在下面的 And 表达式中,如果档案 (Archive) 属性没有设置,则返回值为零:

Result = GetAttr(FName) And vbArchive

如果文件的档案属性已设置,则返回非零的数值。


GetObject 函数

返回文件中的 ActiveX 对象的引用。

语法

GetObject([pathname] [, class])

GetObject 函数的语法包含下面几个命名参数:

部分描述
pathname可选的;Variant (String)。包含待检索对象的文件的全路径和名称。如果省略 pathname,则 class 是必需的。
class可选的;Variant (String)。代表该对象的类的字符串。

其中,class 参数的语法格式为 appname.objecttype,且语法的各个部分如下:

部分描述
appname必需的;Variant (String)。提供该对象的应用程序名称。
objecttype必需的;Variant (String)。待创建对象的类型或类。

说明

使用 GetObject 函数可以访问文件中的 ActiveX 对象,而且可以将该对象赋给对象变量。可以使用 Set 语句将 GetObject 返回的对象赋给对象变量。例如:

Dim CADObject As Object
Set CADObject = GetObject("C:/CAD/SCHEMA.CAD")

当执行上述代码时,就会启动与指定的 pathname 相关联的应用程序,同时激活指定文件中的对象。

如果 pathname 是一个零长度的字符串 (""),则 GetObject 返回指定类型的新的对象实例。如果省略了 pathname 参数,则 GetObject 返回指定类型的当前活动的对象。如果当前没有指定类型的对象,就会出错。

有些应用程序允许只激活文件的一部分,其方法是在文件名后加上一个惊叹号 (!) 以及用于标识想要激活的文件部分的字符串。关于如何创建这种字符串的信息,请参阅有关应用程序创建对象的文档。

例如,在绘图应用程序中,一个存放在文件中的图可能有多层。可以使用下述代码来激活图中被称为 SCHEMA.CAD 的层:

Set LayerObject = GetObject("C:/CAD/SCHEMA.CAD!Layer3")

如果不指定对象的 class,则自动化会根据所提供的文件名,来确定被启动的应用程序以及被激活的对象。不过,有些文件可能不止支持一种对象类。例如,图片可能支持三种不同类型的对象:Application 对象,Drawing 对象,以及 Toolbar 对象,所有这些都是同一个文件中的一部分。为了说明要具体激活文件中的哪种对象,就应使用这个可选的 class 参数。例如:

Dim MyObject As Object
Set MyObject = GetObject("C:/DRAWINGS/SAMPLE.DRW", "FIGMENT.DRAWING")

在上述例子中,FIGMENT 是一个绘图应用程序的名称,而 DRAWING 则是它支持的一种对象类型。

对象被激活之后,就可以在代码中使用所定义的对象变量来引用它。在前面的例子中,可以使用对象变量 MyObject 来访问这个新对象的属性和方法。例如:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:/DRAWINGS/SAMPLE.DRW"

注意 当对象当前已有实例,或要创建已加载的文件的对象时,就使用 GetObject 函数。如果对象当前还没有实例,或不想启动已加载文件的对象,则应使用 CreateObject 函数。

如果对象已注册为单个实例的对象,则不管执行多少次 CreateObject,都只能创建该对象的一个实例。若使用单个实例对象,当使用零长度字符串 ("") 语法调用时,GetObject 总是返回同一个实例,而若省略 pathname 参数,就会出错。不能使用 GetObject 来获取 Visual Basic 创建的类的引用。


GetSetting 函数

从 Windows 注册表中的应用程序项目返回注册表项设置值。

语法

GetSetting(appname, section, key[, default])

GetSetting 函数的语法具有下列命名参数:

部分描述

appname必要。字符串表达式,包含应用程序或工程的名称,要求这些应用程序或工程有注册表项设置。
section必要。字符串表达式,包含区域名称,要求该区域有注册表项设置。
key必要。字符串表达式,返回注册表项设置的名称。
default可选。表达式,如果注册表项设置中没有设置值,则返回缺省值。如果省略,则 default 取值为长度为零的字符串 ("")。

说明

如果 GetSetting 的参数中的任何一项都不存在,则 GetSetting 返回 default


Hex 函数

返回代表十六进制数值的 String。

语法

Hex(number)

必要的 number 参数为任何有效的数值表达式或字符串表达式。

说明

如果 number 还不是一个整数,那么在执行前会先被四舍五入成最接近的整数。

如果 number 所得为
NullNull
Empty零 (0)
任何其他的数字最多可到八个十六进制字符。

适当范围内的数字,前缀以 &H,可以直接表示十六进制数字。例如,十六进制表示法的 &H10 代表十进制的 16。


Hour 函数

返回一个 Variant (Integer),其值为 0 到 23 之间的整数,表示一天之中的某一钟点。

语法

Hour(time)

必要的 time 参数,可以是任何能够表示时刻的 Variant、数值表达式、字符串表达式或它们的组合。如果 time 包含 Null,则返回 Null

返回一个 Variant (Integer),其值为 0 到 23 之间的整数,表示一天之中的某一钟点。

语法

Hour(time)

必要的 time 参数,可以是任何能够表示时刻的 Variant、数值表达式、字符串表达式或它们的组合。如果 time 包含 Null,则返回 Null


IIf 函数

根据表达式的值,来返回两部分中的其中一个。

语法

IIf(expr, truepart, falsepart)

IIf 函数的语法含有下面这些命名参数:

部分描述
expr必要参数。用来判断真伪的表达式。
truepart必要参数。如果 exprTrue,则返回这部分的值或表达式。
falsepart必要参数。如果 exprFalse,则返回这部分的值或表达式。

说明

由于 IIf 会计算 truepart falsepart,虽然它只返回其中的一个。因此要注意到这个副作用。例如,如果 falsepart 产生一个被零除错误,那么程序就会发生错误,即使 exprTrue


IMEStatus 函数

返回一个 Integer,用来指定当前 Microsoft Windows 的输入法 (IME) 方式;只对东亚区版本有效。

语法

IMEStatus

返回值

下面是日本国别的返回值:

常数描述
vbIMEModeNoControl0不控制IME(缺省)
vbIMEModeOn1打开 IME
vbIMEModeOff2关闭 IME
vbIMEModeDisable3IME 无效
vbIMEModeHiragana4完整宽度 Hiragana 模式
vbIMEModeKatakana5完整宽度 Katakana 片假名模式
vbIMEModeKatakanaHalf mode6半宽 Katakana 模式
vbIMEModeAlphaFull mode7完整宽度 Alphanumeric 模式
vbIMEModeAlpha mode8半宽 Alphanumeric 模式

下面是韩国地区的返回值:

常数描述
vbIMEModeAlphaFull7完整宽度 Alphanumeric 模式
vbIMEModeAlpha8半宽 Alphanumeric 模式
vbIMEModeHangulFull9完整宽度 Hangul 模式
vbIMEModeHangul10半宽 Hangul 模式

下面是中文地区的返回值:

常数描述
vbIMEModeNoControl0不控制IME(缺省)
vbIMEModeOn1打开 IME
vbIMEModeOff2关闭 IME


Input 函数

返回 String,它包含以 Input Binary 方式打开的文件中的字符。

语法

Input(number, [#]filenumber)

Input 函数的语法具有以下几个部分:

部分描述
number必要。任何有效的数值表达式,指定要返回的字符个数。
filenumber必要。任何有效的文件号。

说明

通常用 Print #PutInput 函数读出的数据写入文件。Input 函数只用于以 Input Binary 方式打开的文件。

Input # 语句不同,Input 函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。

对于 Binary 访问类型打开的文件,如果试图用 Input 函数读出整个文件,则会在 EOF 返回 True 时产生错误。在用 Input 读出二进制文件时,要用 LOF Loc 函数代替 EOF 函数,而在使用 EOF 函数时要配合以 Get 函数。

注意 对于文本文件中包含的字节数据要使用 InputB 函数。对于 InputB 来说,number 指定的是要返回的字节个数,而不是要返回的字符个数。


InputBox 函数

在一对话框来中显示提示,等待用户输入正文或按下按钮,并返回包含文本框内容的 String。

语法

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

InputBox 函数的语法具有以下几个命名参数:

部分描述
Prompt必需的。作为对话框消息出现的字符串表达式。prompt 的最大长度大约是 1024 个字符,由所用字符的宽度决定。如果 prompt 包含多个行,则可在各行之间用回车符 (Chr(13))、换行符 (Chr(10)) 或回车换行符的组合 (Chr(13) & Chr(10)) 来分隔。
Title可选的。显示对话框标题栏中的字符串表达式。如果省略 title,则把应用程序名放入标题栏中。
Default可选的。显示文本框中的字符串表达式,在没有其它输入时作为缺省值。如果省略 default则文本框为空。
Xpos可选的。数值表达式,成对出现,指定对话框的左边与屏幕左边的水平距离。如果省略 xpos,则对话框会在水平方向居中。
Ypos可选的。数值表达式,成对出现,指定对话框的上边与屏幕上边的距离。如果省略 ypos,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置。
Helpfile可选的。字符串表达式,识别帮助文件,用该文件为对话框提供上下文相关的帮助。如果已提供 helpfile,则也必须提供 context
Context可选的。数值表达式,由帮助文件的作者指定给某个帮助主题的帮助上下文编号。如果已提供 context,则也必须要提供 helpfile

说明

如果同时提供了 helpfilecontext,用户可以按 F1 来查看与 context 相应的帮助主题。某些主应用程序,例如,Microsoft Excel,会在对话框中自动添加一个 Help 按钮。如果用户单击 OK 或按下ENTER ,则 InputBox 函数返回文本框中的内容。如果用户单击 Cancel,则此函数返回一个长度为零的字符串 ("")。

注意 如果还要指定第一个命名参数以外的参数,则必须在表达式中使用 InputBox。如果要省略某些位置参数,则必须加入相应的逗号分界符。


InStr 函数

返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。

语法

InStr([start, ]string1, string2[, compare])

InStr 函数的语法具有下面的参数:

部分说明
start可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数,则一定要有 start 参数。
string1必要参数。接受搜索的字符串表达式。
string2必要参数。被搜索的字符串表达式。
Compare可选参数。指定字符串比较。如果 compare 是 Null,将发生错误。如果省略 compareOption Compare 的设置将决定比较的类型。

设置

 compare 参数设置为:

常数描述
vbUseCompareOption-1使用Option Compare 语句设置执行一个比较。
vbBinaryCompare0执行一个二进制比较。
vbTextCompare1执行一个按照原文的比较。
vbDatabaseCompare2仅适用于Microsoft Access,执行一个基于数据库中信息的比较。

返回值

如果InStr返回
string1 为零长度0
string1 NullNull
string2 为零长度Start
string2NullNull
string2 找不到0
在 string1 中找到string2 找到的位置
start > string20

说明

InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而不是字符位置。


InStrRev函数

描述

返回一个字符串在另一个字符串中出现的位置,从字符串的末尾算起。

语法

InstrRev(string1, string2[, start[, compare]])

InstrRev函数语法有如下几部分:

部分描述
string1必需的。要执行搜索的字符串表达式。
string2必需的。要搜索的字符串表达式。
start可选的。数值表达式,设置每次搜索的开始位置。如果忽略,则使用–1,它表示从上一个字符位置开始搜索。如果 start 包含 Null,则产生一个错误。

compare可选的。数字值,指出在判断子字符串时所使用的比较方法。如果忽略,则执行二进制比较。关于其值,请参阅“设置值”部分。

设置值

compare参数值如下:

常数描述
vbUseCompareOption–1Option Compare语句的设置值来执行比较。
vbBinaryCompare 0执行二进制比较。
vbTextCompare 1执行文字比较。
vbDatabaseCompare 2只用于Microsoft Access。基于您的数据库信息执行比较。

返回值

InStrRev返回值如下:

如果InStrRev返回
string1长度为零。0
string1NullNull
string2长度为零Start
string2NullNull
string2没有找到。0
string2string1中找到找到匹配字符串的位置。
start > Len(string2)0

说明

请注意,InstrRev函数的语法和Instr函数的语法不相同。


Int、Fix 函数

返回参数的整数部分。

语法

Int(number)

Fix(number)

必要的 number 参数是 Double 或任何有效的数值表达式。如果 number 包含 Null,则返回 Null

说明

IntFix 都会删除 number 的小数部份而返回剩下的整数。

IntFix 的不同之处在于,如果 number 为负数,则 Int 返回小于或等于 number 的第一个负整数,而 Fix 则会返回大于或等于 number 的第一个负整数。例如,Int 将 -8.4 转换成 -9,而 Fix 将 -8.4 转换成 -8。

Fix(number)

Sgn(number) * Int(Abs(number))

IPmt 函数

返回一个 Double,指定在一段时间内对定期定额支付且利率固定的年金所支付的利息值。

语法

IPmt(rate, per, nper, pv[, fv[, type]])

IPmt 函数有下列命名参数:

部分描述
rate必要。Double 指定每一期的利率。例如,如果有一笔贷款年百分率 (APR) 为百分之十且按月付款的汽车贷款,则每一期的利率为 0.1/12,或 0.0083。
per必要。Double 指定在 nper 间范围 1 中的付款周期。
nper必要。Double 指定一笔年金的付款总期数。例如,如果在一笔为期四年的汽车贷款中选择按月付款方式,则贷款共有 4 * 12(或 48)个付款期。
pv必要。Double,指定未来一系列付款或收款的现值。例如,当借钱买汽车时,向贷方所借金额为将来每月偿付给贷方款项的现值。
fv可选。Variant 指定在付清贷款后所希望的未来值或现金结存。例如,贷款的未来值在贷款付清后为 0 美元。但是,如果想要在 18 年间存下 50,000 美元作为子女教育基金,那么 50,000 美元为未来值。如果省略的话,缺省值为 0。
type可选。Variant 指定贷款到期时间。如果贷款在贷款周期结束时到期,请使用 0。如果贷款在周期开始时到期,请使用 1。如果省略的话,缺省值为 0。

说明

年金是指在一段时间内的一系列固定现金支付。年金可以是贷款(如房屋抵押贷款),也可以是一笔投资(如按月储蓄计划)。

在支付期间必须用相同的单位计算 ratenper 参数。例如,如果 rate 用月份计算,则 nper 也必须用月份计算。

对所有参数,用负数表示现金支出(如储蓄存款),而用正数表示现金收入(如红利支票)。


IRR 函数

返回一个 Double,指定一系列周期性现金流(支出或收入)的内部利率。

语法

IRR(values()[, guess])

IRR 函数有下列命名参数:

部分描述
values()必要。Double 数组,指定现金流值。此数组必须至少含有一个负值(支付)和一个正值(收入)。
guess可选。Variant,指定 IRR 返回的估算值。如果省略,guess 为 0.1 (10%)。

说明

返回的内部利率是在正常的时间间隔内,一笔含有支出及收入的投资得到的利率。

IRR 函数使用数组中数值的顺序来解释支付和收入的顺序。要确保支付和收入的顺序正确。每一时期的现金流不必像年金那样固定不变。

IRR 是利用叠代进行计算。先从 guess 的值开始,IRR 反复循环进行计算,直到精确度达到 0.00001%。如果经过 20 次反复叠代测试还不能得到结果,则 IRR 计算失败。


IsArray 函数

返回 Boolean 值,指出变量是否为一个数组。

语法

IsArray(varname)

必要的 varname 参数是一个指定变量的标识符。

说明

如果变量是数组,则 IsArray 返回 True;否则返回 False。对于包含数组的 variant 表达式来说,IsArray 尤为有用。


IsDate 函数

返回 Boolean 值,指出一个表达式是否可以转换成日期。

语法

IsDate(expression)

必要的 expression 参数是一个 Variant,包含日期表达式或字符串表达式,这里的字符串表达式是可以作为日期或时间来认定的。

说明

如果表达式是一个日期,或可以作为有效日期识别,则 IsDate 返回 True;否则返回 False。在 Microsoft Windows 中,有效日期的范围介于公元 100 年 1 月 1 日与公元 9999 年 12 月 31 日之间;其有效范围随操作系统不同而不同。


IsEmpty 函数

返回 Boolean 值,指出变量是否已经初始化。

语法

IsEmpty(expression)

必要的 expression 参数是一个 Variant,包含一个数值或字符串表达式。但是,因为 IsEmpty 被用来确定个别变量是否已初始化,所以 expression 参数通常是单一变量名。

说明

如果变量未初始化或已明确设置为 Empty,则 IsEmpty 返回 True;否则返回 False。如果 expression 含有多个变量,则 IsEmpty 总是返回 FalseIsEmpty 只返回对 variant 表达式有意义的信息。

IsError 函数

返回 Boolean 值,指出表达式是否为一个错误值。

语法

IsError(expression)

必需的 expression 参数,可以是任何有效表达式。

说明

利用 CVErr 函数将实数转换成错误值就会建立错误值。IsError 函数被用来确定一个数值表达式是否表示一个错误。如果 expression 参数表示一个错误,则 IsError 返回 True;否则返回 False


IsMissing 函数

返回 Boolean 值,指出一个可选的 Variant 参数是否已经传递给过程。

语法

IsMissing(argname)

必要的 argname 参数包含一个可选的 Variant 过程参数名。

说明

使用 IsMissing 函数来检测在调用一个程序时是否提供了可选 Variant 参数。如果对特定参数没有传递值过去,则 IsMissing 返回 True;否则返回 False。如果 IsMissing 对某个参数返回 True,则在其它代码中使用这个丢失的参数将产生一个用户自定义的错误。如果对 ParamArray 参数使用 IsMissing,则函数总是返回 False。为了检测空的 ParamArray,可试看一下数组的上界是否小于它的下界。

注意   IsMissing 对简单数据类型(例如 IntegerDouble)不起作用,因为与Variants不同,它们没有“丢失”标志位的前提。正由于此,对于可选参数类型,可以指定缺省值。如果调用过程时,参数被忽略,则该参数将具有该缺省值,如下列示例中所示:

Sub MySub(Optional MyVar As String = "specialvalue")
    If MyVar = "specialvalue" Then
       ' MyVar 被忽略。
    Else
    ...
End Sub

在许多情况下,如果用户从函数调用中忽略,则可以通过使缺省值等于希望 MyVar 所包含的值来完全忽略 If MyVar 测试。这将使您的代码更简洁有效。


IsNull 函数

返回 Boolean 值,指出表达式是否不包含任何有效数据 (Null)。

语法

IsNull(expression)

必要的 expression 参数是一个 Variant,其中包含数值表达式或字符串表达式。

说明

如果 expressionNull,IsNull 返回 True;否则 IsNull 返回 False。如果 expression 由多个变量组成,则表达式的任何作为变量组成成分的 Null 都会使整个表达式返回 True

Null 值指出 Variant 不包含有效数据。Null 与 Empty 不同,后者指出变量尚未初始化。Null 与长度为零的字符串 (““) 也不同,长度为零的字符串指的是空串。

重要 使用 IsNull 函数是为了确定表达式是否包含 Null 值的。在某些情况下,希望表达式取值为 True,比如希望 If Var = NullIf Var <> Null 取值为 True,而它们总取值为 False。这是因为任何包含 Null 的表达式本身就是 Null,所以为 False


IsNumeric 函数

返回 Boolean 值,指出表达式的运算结果是否为数。

语法

IsNumeric(expression)

必要的 expression 参数是一个 Variant,包含数值表达式或字符串表达式。

说明

如果整个 expression 的运算结果为数字,则 IsNumeric 返回 True;否则返回 False

如果 expression 是日期表达式,则 IsNumeric 返回 False


IsObject 函数

返回 Boolean 值,指出标识符是否表示对象变量。

语法

IsObject(identifier)

必要的 identifier 参数是一个变量名。

说明

IsObject 只用于确定 Variant 是否属于 VarType vbObject。如果 Variant 实际引用(或曾经引用过)一个对象,或者如果 Variant 包含 Nothing,则可能出现这种情况。

如果 identifier 是 Object类型或任何有效的类类型,或者,如果 identifierVarType vbObject Variant 或用户自定义的对象,则 IsObject 返回 True;否则返回 False。即使变量已设置成 NothingIsObject 也仍返回 True

使用错误捕获方法可以确认对象引用是否有效。


Join函数

描述

返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。

语法

Join(list[, delimiter])

Join函数语法有如下几部分:

部分描述
list必需的。包含被连接子字符串的一维数组。
delimiter可选的。在返回字符串中用于分隔子字符串的字符。如果忽略该项,则使用空格(" ")来分隔子字符串。如果delimiter是零长度字符串(""),则列表中的所有项目都连接在一起,中间没有分隔符。

LBound 函数

返回一个 Long 型数据,其值为指定数组维可用的最小下标。

语法

LBound(arrayname[, dimension])

LBound 函数的语法包含下面部分:

部分描述
arrayname必需的。数组变量的名称,遵循标准的变量命名约定。
dimension可选的;Variant (Long)。指定返回哪一维的下界。1 表示第一维,2 表示第二维,以此类推。如果省略 dimension,就认为是 1。

说明

LBound 函数与 UBound 函数一起使用,用来确定一个数组的大小。UBound 用来确定数组某一维的上界。

对具有下述维数的数组而言,LBound 的返回值见下表:

Dim A(1 To 100, 0 To 3, -3 To 4)
语句返回值
LBound(A, 1)1
LBound(A, 2)0
LBound(A, 3)-3

所有维的缺省下界都是 0 或 1,这取决于 Option Base 语句的设置。使用 Array 函数创建的数组的下界为 0;它不受 Option Base 的影响。

对于那些在 Dim 中用 To 子句来设定维数的数组而言,Private、Public、ReDim Static 语句可以用任何整数作为下界。


LCase 函数

返回转成小写的 String。

语法

LCase(string)

必要的 string 参数可以是任何有效的字符串表达式。如果 string 包含 Null,将返回 Null。

说明

只有大写的字母会转成小写;所有小写字母和非字母字符保持不变。


Left 函数

返回 Variant (String),其中包含字符串中从左边算起指定数量的字符。

语法

Left(string, length)

Left 函数的语法有下面的命名参数:

部分说明
string必要参数。字符串表达式其中最左边的那些字符将被返回。如果 string 包含 Null,将返回 Null。
length必要参数;为 Variant (Long)。数值表达式,指出将返回多少个字符。如果为 0,返回零长度字符串 ("")。如果大于或等于 string 的字符数,则返回整个字符串。

说明

欲知 string 的字符数,使用 Len 函数。

注意    LeftB 函数作用于包含在字符串中的字节数据。所以 length 指定的是字节数,而不是要返回的字符数。


Len 函数

返回 Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数。

语法

Len(string | varname)

Len 函数的语法有下面这些部分:

部分说明
string任何有效的字符串表达式。如果 string 包含 Null,会返回 Null。
Varname任何有效的变量名称。如果 varname 包含 Null,会返回 Null。如果 varname 是 Variant,Len 会视其为 String 并且总是返回其包含的字符数。

说明

两个可能的参数必须有其一(而且只能有其一)。如为用户定义类型,Len 会返回其写至文件的大小。

注意   LenB 函数作用于字符串中的字节数据,如同在双字节字符集(DBCS)语言中一样。所以 LenB 返回的是用于代表字符串的字节数,而不是返回字符串中字符的数量。如为用户自定义类型,LenB 返回在内存中的大小,包括元素之间的衬垫。对于使用 LenB的示例代码,请参阅示例主题中的第二个示例。

注意 当在用户自定义数据类型中使用变长字符串时,Len 可能不能确定实际存储所需的字节数目。


Loc 函数

返回一个 Long,在已打开的文件中指定当前读/写位置。

语法

Loc(filenumber)

必要的 filenumber 参数是任何一个有效的 Integer 文件号。

说明

Loc 函数对各种文件访问方式的返回值如下:

方式返回值
Random上一次对文件进行读出或写入的记录号。
Sequential文件中当前字节位置除以 128 的值。但是,对于顺序文件而言,不会使用 Loc 的返回值,也不需要使用 Loc 的返回值。
Binary上一次读出或写入的字节位置。


LOF 函数

返回一个 Long,表示用 Open 语句打开的文件的大小,该大小以字节为单位。

语法

LOF(filenumber)

必要的 filenumber 参数是一个 Integer,包含一个有效的文件号。

注意 对于尚未打开的文件,使用 FileLen 函数将得到其长度。


Log 函数

返回一个 Double,指定参数的自然对数值。

语法

Log(number)

必要的 number 参数是 Double 或任何有效的大于 0 的数值表达式。

说明

自然对数是以 e 为底的对数。常数 e 的值大约是 2.718282。

如下所示,将 x 的自然对数值除以 n 的自然对数值,就可以对任意底 n 来计算数值 x 的对数值:

Logn(x) = Log(x) / Log(n)

下面的示例说明如何编写一个函数来求以 10 为底的对数值:

Static Function Log10(X)
   Log10 = Log(X) / Log(10#)
End Function

LTrim、RTrim与 Trim 函数

返回 Variant (String),其中包含指定字符串的拷贝,没有前导空白 (LTrim)、尾随空白 (RTrim) 或前导和尾随空白 (Trim)。

语法

LTrim(string)

RTrim(string)

Trim(string)

必要的 string 参数可以是任何有效的字符串表达式。如果 string 包含 Null,将返回 Null


Mid 函数

返回 Variant (String),其中包含字符串中指定数量的字符。

语法

Mid(string, start[, length])

Mid 函数的语法具有下面的命名参数:

部分说明
string必要参数。字符串表达式,从中返回字符。如果 string 包含 Null,将返回 Null
start必要参数。为 Long。string 中被取出部分的字符位置。如果 start 超过 string 的字符数,Mid 返回零长度字符串 ("")
length可选参数;为 Variant (Long)。要返回的字符数如果省略或 length 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start 到尾端的所有字符。

说明

欲知 string 的字符数,可用 Len 函数。

注意   MidB 函数作用于字符串中包含的字节数据,如同在双字节字符集(DBCS)语言中一样。因此其参数指定的是字节数,而不是字符数。对于使用 MidB的示例代码,请参阅示例主题中的第二个示例。


Minute 函数

返回一个 Variant (Integer),其值为 0 到 59 之间的整数,表示一小时中的某分钟。

语法

Minute(time)

必要的 time 参数,可以是任何能够表示时刻的 Variant、数值表达式、字符串表达式或它们的组合。如果 time 包含 Null,则返回 Null


MIRR 函数

返回一个 Double,指定一系列修改过的周期性现金流(支出或收入)的内部利率。

语法

MIRR(values(), finance_rate, reinvest_rate)

MIRR 函数有下列命名参数:

部分描述
values()必要。Double 数组,指定现金流值。此数组至少要包含一个负值(支付)和一个正值(收入)。
finance_rate必要。Double 指定财务成本上的支付利率。
reinvest_rate必要。Double 指定由现金再投资所得利率。

说明

修改过的返回内部利率是指在用不同的利率计算支出和收入时的内部利率。MIRR 函数既考虑投资成本 (finance_rate),也考虑现金再投资所得利率 (reinvest_rate)。

finance_ratereinvest_rate 参数是用十进制数值表示的百分比。例如,0.12 表示百分之十二。

MIRR 函数用数组中的数值顺序来解释支付和收入的顺序。要确保支付和收入的输入顺序正确。


Month 函数

返回一个 Variant (Integer),其值为 1 到 12 之间的整数,表示一年中的某月。

语法

Month(date)

必要的 date 参数,可以是任何能够表示日期的 Variant、数值表达式、字符串表达式或它们的组合。如果 date 包含 Null,则返回 Null


MonthName函数

描述

返回一个表示指定月份的字符串。

语法

MonthName(month[, abbreviate])

MonthName函数语法有如下几部分:

部分描述
month必需的。月份的数值表示。例如一月是1,二月是2,等等。
abbreviate可选的。Boolean值,表示月份名是否缩写。如果忽略,缺省值为False,表明月份名不能被缩写。


MsgBox 函数

在对话框中显示消息,等待用户单击按钮,并返回一个 Integer 告诉用户单击哪一个按钮。

语法

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

MsgBox 函数的语法具有以下几个命名参数:

部分描述
Prompt必需的。字符串表达式,作为显示在对话框中的消息。prompt 的最大长度大约为 1024 个字符,由所用字符的宽度决定。如果 prompt 的内容超过一行,则可以在每一行之间用回车符 (Chr(13))、换行符 (Chr(10)) 或是回车与换行符的组合 (Chr(13) & Chr(10)) 将各行分隔开来。
Buttons可选的。数值表达式是值的总和,指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。如果省略,则 buttons 的缺省值为 0。
Title可选的。在对话框标题栏中显示的字符串表达式。如果省略 title,则将应用程序名放在标题栏中。
Helpfile可选的。字符串表达式,识别用来向对话框提供上下文相关帮助的帮助文件。如果提供了 helpfile,则也必须提供 context
Context可选的。数值表达式,由帮助文件的作者指定给适当的帮助主题的帮助上下文编号。如果提供了 context,则也必须提供 helpfile

设置值

buttons 参数有下列设置值:

常数描述
vbOKOnly0只显示 OK 按钮。
VbOKCancel1显示 OKCancel 按钮。
VbAbortRetryIgnore2显示 AbortRetryIgnore 按钮。
VbYesNoCancel3显示 YesNoCancel 按钮。
VbYesNo4显示 YesNo 按钮。
VbRetryCancel5显示 RetryCancel 按钮。
VbCritical16显示 Critical Message 图标。
VbQuestion32显示 Warning Query 图标。
VbExclamation48显示 Warning Message 图标。
VbInformation64显示 Information Message 图标。
vbDefaultButton10第一个按钮是缺省值。
vbDefaultButton2256第二个按钮是缺省值。
vbDefaultButton3512第三个按钮是缺省值。
vbDefaultButton4768第四个按钮是缺省值。
vbApplicationModal0应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。
vbSystemModal4096系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。
vbMsgBoxHelpButton16384将Help按钮添加到消息框
VbMsgBoxSetForeground65536指定消息框窗口作为前景窗口
vbMsgBoxRight524288文本为右对齐
vbMsgBoxRtlReading1048576指定文本应为在希伯来和阿拉伯语系统中的从右到左显示

第一组值 (0-5) 描述了对话框中显示的按钮的类型与数目;第二组值 (16, 32, 48, 64) 描述了图标的样式;第三组值 (0, 256, 512) 说明哪一个按钮是缺省值;而第四组值 (0, 4096) 则决定消息框的强制返回性。将这些数字相加以生成 buttons 参数值的时候,只能由每组值取用一个数字。

注意 这些常数都是 Visual Basic for Applications (VBA) 指定的。结果,可以在程序代码中到处使用这些常数名称,而不必使用实际数值。

返回值

常数描述
vbOK1OK
vbCancel2Cancel
vbAbort3Abort
vbRetry4Retry
vbIgnore5Ignore
vbYes6Yes
vbNo7No

说明

在提供了 helpfilecontext 的时候,用户可以按 F1 来查看与 context 相应的帮助主题。像 Microsoft Excel 这样一些主机应用程序也会在对话框中自动添加一个 Help 按钮。

如果对话框显示 Cancel 按钮,则按下 ESC 键与单击 Cancel 按钮的效果相同。如果对话框中有 Help 按钮,则对话框中提供有上下文相关的帮助。但是,直到其它按钮中有一个被单击之前,都不会返回任何值。

注意 如果还要指定第一个命名参数以外的参数,则必须在表达式中使用 MsgBox。为了省略某些位置参数,必须加入相应的逗号分界符。


Now 函数

返回一个 Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。

语法

Now


NPer 函数

返回一个 Double,指定定期定额支付且利率固定的总期数。

语法

NPer(rate, pmt, pv[, fv[, type]])

NPer 函数有下列命名参数:

部分描述
rate必要。Double 指定每一期的利率。例如,如果有一笔贷款年百分率 (APR) 为百分之十并按月付款的汽车贷款,则每一期的利率为 0.1/12 或 0.0083。
pmt必要。Double 指定每一期所付金额。付款金额通常包含本金和利息,且付款金额在年金的有效期间不变。
pv必要。Double 指定未来一系列付款或收款的现值。例如,当贷款买一辆汽车时,向贷方所借贷的金额为将来每月偿付给贷方款项的现值。
fv可选。Variant 指定在付清贷款后所希望的未来值或现金结存。例如,贷款的未来值在贷款付清后为 0 美元。但是,如果想要在 18 年间存下 50,000 美元作为子女教育基金,那么 50,000 美元为未来值。如果省略的话,缺省值为 0。
type可选。Variant 指定贷款到期时间。如果贷款是在贷款周期结束时到期,请使用 0,如果贷款是在周期开始时到期,请使用 1。如果省略的话,缺省值为 0。

说明

年金是在一段时间内一系列固定现金支付。年金可以是贷款(如房屋抵押贷款),也可以是一笔投资(如按月储蓄计划)。

对所有参数,用负数表示现金支出(如储蓄存款),而用正数表示现金收入(如红利支票)。


NPV 函数

返回一个 Double,指定根据一系列定期的现金流(支付和收入)和贴现率而定的投资净现值。

语法

NPV(rate, values())

NPV 函数有下列命名参数:

部分描述
rate必要。Double 指定在一期间内的贴现率,用十进制表示。
values()必要。Double 数组 指定现金流值。此数组至少要包含一个负值(支付)和一个正值(收入)。

说明

投资的净现值是未来一系列支付或收入的当前价值。

NPV 函数使用数组中数值的顺序来解释支付和收入的顺序。要确保支付和收入值是用正确的顺序输入的。

NPV 投资在第一笔现金流值之前开始计算周期,而结束于数组中最后的现金流值。

净现值是根据未来的现金流进行计算的。如果第一笔现金流在第一期开始时发生,那么 NPV 返回的值必须加上第一笔值才是净现值。而且 values() 数组不可包含第一笔值。

NPV 函数与 PV 函数(现值)相似,只是 PV 函数在一个期间的开始或结束时才允许有现金流。与可变的 NPV 现金流值不同,PV 的现金流在整个投资期间必须固定。


Oct 函数

返回 Variant (String),代表一数值的八进制值。

语法

Oct(number)

必要的 number 参数为任何有效的数值表达式或字符串表达式。

说明

如果 number 尚非整数,那么在执行前会先四舍五入成最接近的整数。

如果 number Oct 返回
NullNull
Empty零 (0)
任何其他的数字最多可到 11 个八进制字符。

可以将适当范围的数前缀以 &O 来直接表示八进制数字。例如,八进制表示法的 &O10 代表十进制的 8。


Partition 函数

返回一个 Variant (String),指定一个范围,在一系列计算的范围中指定的数字出现在这个范围内。

语法

Partition(number, start, stop, interval)

Partition 函数的语法含有下面这些命名参数:

部分描述
number必要参数。整数,在所有范围中判断这个整数是否出现。
start必要参数。整数,数值范围的开始值,这个数值不能小于 0。
stop必要参数。整数,数值范围的结束值,这个数值不能等于或小于 start

说明

Partition 函数会标识 number 值出现的特定范围,并返回一个 Variant (String) 来描述这个范围。Partition 函数在查询中是最有用的。可以创建一个选择查询显示有多少定单落在几个变化的范围内,例如,定单数从 1 到 1000、1001 到 2000,以此类推。

下面的表格使用三组 startstop 以及 interval 部分,来显示怎样决定这个范围。第一个范围和最后一个范围两列显示 Partition 的返回值,此范围的低端 (lowervalue) 和高端 (uppervalue) 是以冒号分开的。

startstopinterval第一个范围之前第一个范围最后一个范围最后一个范围之后
0995" :-1"" 0: 4"" 95: 99"" 100: "
2019910" : 19"" 20: 29"" 190: 199"" 200: "
100101020" : 99"" 100: 119"" 1000: 1010"" 1011: "

从上面的表格中得知,在第三行中,由 startstop 所定义的数值范围不能以 interval 来均分。所以,即使 interval 是 20,最后一个范围也只能扩展到stop(11 个数)。

如果需要的话,Partition 会在返回的范围中加上足够的空白,以便让返回值在冒号的左右两侧有相同的字符数,其值就是 stop 中的字符数再加一。如此可确保当要使用 Partition 与其它的数值作运算时,所得的字符串,可以在之后的排序操作中得到正确的结果。

如果 interval 是 1,则范围便是 number:number,而不管 startstop 参数如何。比如说,如果 interval 是 1,number 是 100,而 stop 是 1000,则 Partition 会返回 "  100:  100"。

如果任何部分是 Null,则 Partition 会返回一个 Null


Pmt 函数

返回一个 Double,指定根据定期定额支付且利率固定的年金支付额。

语法

Pmt(rate, nper, pv[, fv[, type]])

Pmt 函数有下列命名参数:

部分描述
rate必要。Double 指定每一期的利率。例如,如果有一笔贷款年百分比率 (APR) 为百分之十且按月付款的汽车贷款,则每一期的利率为 0.1/12 或 0.0083。
nper必要。Integer 指定一笔年金的付款总期数。例如,如果对一笔为期四年的汽车贷款选择按月付款,则贷款共有 4 * 12(或 48)个付款期。
pv必要。Double 指定未来一系列付款或收款的现值。例如,当贷款买一辆汽车时,向贷方所借贷的金额为将来每月偿付给贷方款项的现值。
fv可选。Variant 指定在付清贷款后所希望的未来值或现金结存。例如,贷款的未来值在贷款付清后为 0 美元。但是,如果想要在 18 年间存下 50,000 美元作为子女教育基金,那么 50,000 美元为未来值。如果省略的话,缺省值为 0。
type可选。Variant,指定贷款到期时间。如果贷款是在贷款周期结束时到期,请使用 0。如果贷款是在周期开始时到期,则请使用 1。如果省略的话,缺省值为 0。

说明

年金是在一段时间内一系列固定现金支付,年金可以是贷款(如房屋抵押贷款),也可以是一笔投资(如按月储蓄计划)。

在支付期间必须用相同的单位计算 ratenper 参数。例如,如果 rate 用月份计算,则 nper 也必须用月份计算。

对所有参数,用负数表示现金支出(如储蓄存款),而用正数表示现金收入(如红利支票)。


PPmt 函数

返回一个 Double,指定在定期定额支付且利率固定的年金的指定期间内的本金偿付额。

语法

PPmt(rate, per, nper, pv[, fv[, type]])

PPmt 函数有下列命名参数:

部分描述
rate必要。Double 指定每一期的利率。例如,如果有一笔贷款年百分比率 (APR) 为百分之十且按月付款的汽车贷款,则每一期的利率为 0.1/12 或 0.0083。
per必要。Integer 指定在 nper 间范围 1 中的付款周期。
nper必要。Integer 指定一笔年金的付款总期数。例如,如果对一笔为期四年的汽车贷款选择按月付款,则贷款共有 4 * 12(或 48)个付款期。
pv必要。Double 指定未来一系列付款或收款的现值。例如,当贷款买一辆汽车时,向贷方所借贷的金额为将来每月偿付给贷方款项的现值。
fv可选。Variant 指定在付清贷款后所希望的未来值或现金结存值。例如,贷款的未来值在贷款付清后为 0 美元。但是,如果想要在 18 年间存下 50,000 美元作为子女教育基金,那么 50,000 美元为未来值。如果省略的话,缺省值为 0。
type可选。Variant 指定贷款到期时间。如果贷款是在贷款周期结束时到期,则请使用 0。如果贷款是在周期开始时到期,则请使用 1。如果省略的话,缺省值为 0。

说明

年金是在一段时间内一系列固定现金支付。年金可以是贷款(如房屋抵押贷款),也可以是一笔投资(如按月储蓄计划)。

在支付期间必须用相同的单位计算 ratenper 参数。例如,如果 rate 用月份计算,则 nper 也必须用月份计算。

对所有参数,用负数表示现金支出(如储蓄存款),而用正数表示现金收入(如红利支票)。


PV 函数

返回一个 Double 指定在未来定期、定额支付且利率固定的年金现值。

语法

PV(rate, nper, pmt[, fv[, type]])

PV 函数有下列命名参数:

部分描述
rate必要。Double 指定每一期的利率。例如,如果有一笔贷款年百分比率 (APR) 为百分之十且按月付款的汽车贷款,则每一期的利率为 0.1/12 或 0.0083。
nper必要。Integer 指定一笔年金的付款总期数。例如,如果对一笔为期四年的汽车贷款选择按月付款,则贷款共有 4 * 12(或 48)个付款期。
pmt必要。Double 指定每一期的付款金额。付款金额通常包含本金和利息,且此付款金额在年金的有效期间不变。
fv可选。Variant,指定在付清贷款后所希望的未来值或现金结存。例如,贷款的未来值在贷款付清后为 0 美元。但是,如果想要在 18 年间存下 50,000 美元作为子女教育基金,那么 50,000 美元为未来值。如果省略的话,缺省值为 0。
type可选。Variant 指定贷款到期时间。如果贷款是在贷款周期结束时到期,则请使用 0。如果贷款是在周期开始时到期,则请使用 1。如果省略的话,缺省值为 0。

说明

年金是在一段时间内一系列固定现金支付。年金可以是贷款(如房屋抵押贷款),也可以是一笔投资(如按月储蓄计划)。

在支付期间必须用相同的单位计算 ratenper 参数。例如,如果 rate 用月份计算,则 nper 也必须用月份计算。

对所有参数,现金支出(如储蓄存款)用负数表示,而现金收入(如红利支票)用正数表示。


QBColor 函数

返回一个 Long,用来表示所对应颜色值的 RGB 颜色码。

语法

QBColor(color)

必要的 color 参数是一个界于 0 到 15 的整型。

设置值

color 参数有以下这些设置:

颜色颜色
0黑色8灰色
1兰色9亮兰色
2绿色10亮绿色
3青色11亮青色
4红色12亮红色
5洋红色13亮洋红色
6黄色14亮黄色
7白色15亮白色

说明

color 参数代表使用于早期版本的 Basic(诸如 Microsoft Visual Basic for MS-DOS 以及 Basic Compiler)的颜色值。始于最低有效字节,返回值指定了红、绿、蓝三原色的值,用于设置成 VBA中RGB 系统的对应颜色。


Rate 函数

返回一个 Double,指定每一期的年金利率。

语法

Rate(nper, pmt, pv[, fv[, type[, guess]]])

Rate 函数有下列命名参数:

部分描述
nper必要。Double 指定一笔年金的付款总期数。例如,如果对一笔为期四年的汽车贷款选择按月付款,则贷款共有 4 * 12(或 48)个付款期。
pmt必要。Double,指定每一期的付款金额。付款金额通常包含本金和利息,且此付款金额在年金的有效期间不变。
pv必要。Double 指定未来一系列付款或收款的现值。例如,当贷款买一辆汽车时,向贷方所借贷的金额为将来每月偿付给贷方款项的现值。
fv可选。Variant 指定在付清贷款后所希望的未来值或现金结存。例如,贷款的未来值在贷款付清后为 0 美元。但是,如果想要在 18 年间存下 50,000 美元作为子女教育基金,那么 50,000 美元为未来值。如果省略的话,缺省值为 0。
type可选。Variant,指定贷款到期时间,如果贷款是在贷款周期结束时到期,则请使用 0。如果贷款是在周期开始时到期,则请使用 1。如果省略的话,缺省值为 0。
guess可选。Variant 指定 Rate 返回的估算值。如果省略,则 guess 为 0.1 (10%)。

说明

年金是在一段时间内的一系列固定现金支付,年金可以是贷款(如房屋抵押贷款)或是一笔投资(如按月储蓄计划)。

对所有参数,现金支出(如储蓄存款)用负数表示,而现金收入(如红利支票)用正数表示。

Rate 是叠代计算的。先从 guess 的值开始,Rate 反复循环计算,直到精确度达到 0.00001%。如果经过 20 次叠代测试还不能得到结果,则 Rate 计算失败。如果猜测是 10% 而 Rate 计算失败,则请试用不同的 guess.值。


Replace函数

描述

返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的。

语法

Replace(expression, find, replacewith[, start[, count[, compare]]])

Replace函数语法有如下几部分:

部分描述
expression必需的。字符串表达式,包含要替换的子字符串。
find必需的。要搜索到的子字符串。
replacewith必需的。用来替换的子字符串。
start可选的。在表达式中子字符串搜索的开始位置。如果忽略,假定从1开始。
count可选的。子字符串进行替换的次数。如果忽略,缺省值是 -1,它表明进行所有可能的替换。
compare可选的。数字值,表示判别子字符串时所用的比较方式。关于其值,请参阅“设置值”部分。

设置值

compare参数的设置值如下:

常数描述
vbUseCompareOption-1使用Option Compare语句的设置值来执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文字比较。
vbDatabaseCompare2仅用于Microsoft Access。基于您的数据库的信息执行比较。

返回值

Replace的返回值如下:

如果Replace返回值
expression长度为零零长度字符串("")。
expressionNull一个错误。
find长度为零expression的复本。
replacewith长度为零expression的复本,其中删除了所有出现的find 的字符串。
start > Len(expression)长度为零的字符串。
count is 0expression.的复本。

说明

Replace函数的返回值是一个字符串,但是,其中从start所指定的位置开始,到expression字符串的结尾处的一段子字符串已经发生过替换动作。并不是原字符串从头到尾的一个复制。


RGB 函数

返回一个 Long整数,用来表示一个 RGB 颜色值。

语法

RGB(red, green, blue)

RGB 函数的语法含有以下这些命名参数:

部分描述
red必要参数;Variant (Integer)。数值范围从 0 到 255,表示颜色的红色成份。
green必要参数;Variant (Integer)。数值范围从 0 到 255,表示颜色的绿色成份。
blue必要参数;Variant (Integer)。数值范围从 0 到 255,表示颜色的兰色成份。

说明

可以接受颜色说明的应用程序的方法和属性期望这个说明是一个代表 RGB 颜色值的数值。一个 RGB 颜色值指定红、绿、蓝三原色的相对亮度,生成一个用于显示的特定颜色。

传给 RGB 的任何参数的值,如果超过 255,会被当作 255。

下面的表格显示一些常见的标准颜色,以及这些颜色的红、绿、蓝三原色的成份:

颜色红色值绿色值兰色值
黑色000
兰色00255
绿色02550
青色0255255
红色25500
洋红色2550255
黄色2552550
白色255255255


Right 函数

返回 Variant (String),其中包含从字符串右边取出的指定数量的字符。

语法

Right(string, length)

Right 函数的语法具有下面的命名参数:

部分说明
string必要参数。字符串表达式,从中最右边的字符将被返回。如果 string 包含 Null,将返回 Null
length必要参数;为 Variant (Long)。为数值表达式,指出想返回多少字符。如果为 0,返回零长度字符串 ("")。如果大于或等于 string 的字符数,则返回整个字符串。

说明

欲知 string 的字符数,用 Len 函数。

注意    RightB 函数作用于包含在字符串中的字节数据。所以 length 指定的是字节数,而不是指定返回的字符数。


Rnd 函数

返回一个包含随机数值的 Single

语法

Rnd[(number)]

可选的 number 参数是 Single 或任何有效的数值表达式。

返回值

如果 number 的值是Rnd 生成
小于 0每次都使用 number 作为随机数种子得到的相同结果。
大于 0序列中的下一个随机数。
等于 0最近生成的数。
省略序列中的下一个随机数。

说明

Rnd 函数返回小于 1 但大于或等于 0 的值。

number 的值决定了 Rnd 生成随机数的方式。

对最初给定的种子都会生成相同的数列,因为每一次调用 Rnd 函数都用数列中的前一个数作为下一个数的种子。

在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。

为了生成某个范围内的随机整数,可使用以下公式:

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。

注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。


Round函数

描述

返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。

语法

Round(expression [,numdecimalplaces])

Round函数语法有如下几部分:

部分描述
expression必需的。要进行四舍五入运算的数值表达式。
numdecimalplaces可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位数。如果忽略,则Round函数返回整数。


Second 函数

返回一个 Variant (Integer),其值为 0 到 59 之间的整数,表示一分钟之中的某个秒。

语法

Second(time)

必要的 time 参数,可以是任何能够表示时刻的 Variant、数值表达式、字符串表达式或它们的组合。如果 time 包含 Null,则返回 Null


Seek 函数

返回一个 Long,在 Open 语句打开的文件中指定当前的读/写位置。

语法

Seek(filenumber)

必要的 filenumber 参数是一个包含有效文件号的 Integer。

说明

Seek 函数返回介于 1 和 2,147,483,647(相当于 2^31 - 1)之间的值。

对各种文件访问方式的返回值如下:

方式返回值
Random下一个读出或写入的记录号。
Binary,
Output,
Append,
Input
下一个操作将要发生时所在的字节位置。文件中的第一个字节位于位置 1,第二个字节位于位置 2,依此类推。

Sgn 函数

返回一个 Variant (Integer),指出参数的正负号。

语法

Sgn(number)

必要的 number 参数是任何有效的数值表达式。

返回值

如果 numberSgn 返回
大于 01
等于 00
小于 0-1

说明

number 参数的符号决定了 Sgn 函数的返回值。


Shell 函数

执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。

语法

Shell(pathname[,windowstyle])

Shell 函数的语法含有下面这些命名参数:

部分描述
pathname必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。
Windowstyle可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。

windowstyle 命名参数有以下这些值:

常量描述
vbHide0窗口被隐藏,且焦点会移到隐式窗口。
VbNormalFocus1窗口具有焦点,且会还原到它原来的大小和位置。
VbMinimizedFocus2窗口会以一个具有焦点的图标来显示。
VbMaximizedFocus3窗口是一个具有焦点的最大化窗口。
VbNormalNoFocus4窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。
VbMinimizedNoFocus6窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。

说明

如果 Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误。

注意 缺省情况下,Shell 函数是以异步方式来执行其它程序的。也就是说,用 Shell 启动的程序可能还没有完成执行过程,就已经执行到 Shell 函数之后的语句。


Sin 函数

返回一 Double,指定参数的 sine(正弦)值。

语法

Sin(number)

必要的 number 参数是 Double 或任何有效的数值表达式,表示一个以弧度为单位的角。

说明

Sin 函数取一角度为参数值,并返回角的对边长度除以斜边长度的比值。

结果的取值范围在 -1 到 1 之间。

为了将角度转换为弧度,请将角度乘以 pi /180。为了将弧度转换为角度,请将弧度乘以 180/pi。


SLN 函数

返回一个 Double,在一期里指定一项资产的直线折旧。

语法

SLN(cost, salvage, life)

SLN 函数有下列命名参数:

部分描述
cost必要。Double 指定资产的初始成本。
salvage必要。Double 指定资产在可用年限结束后的价值。
life必要。Double 指定资产的可用年限。

说明

折旧期间必须用与 life 参数相同的单位表示。所有参数都必须是正数。


Space 函数

返回特定数目空格的 Variant (String)。

语法

Space(number)

必要的 number 参数为字符串中想要的空格数。

说明

Space 函数在格式输出或清除固定长度字符串数据时很有用。


Spc 函数

Print # 语句或 Print 方法一起使用,对输出进行定位。

语法

Spc(n)

必要的 n 参数是在显示或打印列表中的下一个表达式之前插入的空白数。

说明

如果 n 小于输出行的宽度,则下一个打印位置将紧接在数个已打印的空白之后。如果 n 大于输出行的宽度,则 Spc 利用下列公式计算下一个打印位置:

currentprintposition + (n Mod width)

例如,如果当前输出位置为 24,而输出行的宽度为 80,并指定了 Spc(90),则下一个打印将从位置 34 开始(当前打印位置 + 90/80 的余数)。如果当前打印位置和输出行宽度之间的差小于 n(或 n Mod width),则 Spc 函数会跳到下一行的开头,并产生数量为 n - (width - urrentprintposition) 的空白。

注意 要确保表格栏宽度足以容纳较宽的字符串。

Print 方法与间距字体一起使用时,使用 Spc 函数打印的空格字符的宽度总是等于选用字体内以磅数为单位的所有字符的平均宽度。但是,在已打印字符的个数与那些字符所占据的定宽列的数目之间不存在任何关系。例如,大写英文字母 W 占据超过一个定宽的列,而小写字母 i 则占据少于一个定宽的列。


Split函数

描述

返回一个下标从零开始的一维数组,它包含指定数目的子字符串。

语法

Split(expression[, delimiter[, count[, compare]]])

Split函数语法有如下几部分:

部分描述
expression必需的。包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。
delimiter可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包含一个元素,即完整的 expression字符串。
count可选的。要返回的子字符串数,-1表示返回所有的子字符串。
compare可选的。数字值,表示判别子字符串时使用的比较方式。关于其值,请参阅“设置值”部分。

设置值

compare参数的设置值如下:

常数描述
vbUseCompareOption-1Option Compare语句中的设置值执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文字比较。
vbDatabaseCompare2仅用于Microsoft Access。基于您的数据库的信息执行比较。


Sqr 函数

返回一个 Double,指定参数的平方根。

语法

Sqr(number)

必要的 number 参数 number 是 Double 或任何有效的大于或等于 0 的数值表达式。


Str 函数

返回代表一数值的 Variant (String)。

语法

Str(number)

必要的 number 参数为一 Long,其中可包含任何有效的数值表达式。

说明

当一数字转成字符串时,总会在前头保留一空位来表示正负。如果 number 为正,返回的字符串包含一前导空格暗示有一正号。

使用 Format 函数可将数值转成必要的格式,如日期、时间、货币或其他用户自定义格式。与 Str 不同的是,Format 函数不包含前导空格来放置 number 的正负号。

注意   Str 函数只视句点 (.) 为有效的小数点。如果使用不同的小数点(例如,国际性的应用程序),可使用 CStr 将数字转成字符串。


StrComp 函数

返回 Variant (Integer),为字符串比较的结果。

语法

StrComp(string1, string2[, compare])

StrComp 函数的语法有下面的命名参数:

部分说明
string1必要参数。任何有效的字符串表达式。
string2必要参数。任何有效的字符串表达式。
Compare可选参数。指定字符串比较的类型。如果 compare 参数是 Null,将发生错误。如果省略 compareOption Compare 的设置将决定比较的类型。

设置

compare 参数设置为:

常数描述
vbUseCompareOption-1使用Option Compare语句设置执行一个比较。
vbBinaryCompare0执行一个二进制比较。
vbTextCompare1执行一个按照原文的比较。
vbDatabaseCompare2仅适用于Microsoft Access,执行一个基于数据库信息的比较。

返回值

StrComp 函数有下列返回值:

如果StrComp 返回
string1 小于 string2-1
string1 等于 string20
string1 大于 string21
string1 string 2NullNull


StrConv 函数

返回按指定类型转换的 Variant (String)。

语法

StrConv(string, conversion, LCID)

StrConv 函数的语法有下面的命名参数:

部分说明
string必要参数。要转换的字符串表达式。
conversion必要参数。Integer。其值的和决定转换的类型。
LCID可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。)

设置值

conversion 参数的设置值为:

常数说明
vbUpperCase1将字符串文字转成大写。
vbLowerCase2将字符串文字转成小写。
vbProperCase3将字符串中每个字的开头字母转成大写。
vbWide*4*将字符串中单字节字符转成双字节字符。
vbNarrow*8*将字符串中双字节字符转成单字节字符。
vbKatakana**16**将字符串中平假名字符转成片假名字符。
vbHiragana**32**将字符串中片假名字符转成平假名字符。
vbUnicode64根据系统的缺省码页将字符串转成 Unicode。
vbFromUnicode128将字符串由 Unicode 转成系统的缺省码页。

*应用到远东国别。
**仅应用到日本。

注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的国别使用常数 vbWidevbNarrowvbKatakana,和 vbHiragana 时,就会导致运行时错误。

下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。

说明

在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。


StrReverse函数

描述

返回一个字符串,其中一个指定子字符串的字符顺序是反向的。

语法

StrReverse(string1)

参数string1是一个字符串,它的字符顺序要被反向。如果string1是一个长度为零的字符串(""),则返回一个长度为零的字符串。如果string1Null,则产生一个错误。


String 函数

返回 Variant (String),其中包含指定长度重复字符的字符串。

语法

String(number, character)

String 函数的语法有下面的命名参数:

部分说明
number必要参数;Long。返回的字符串长度。如果 number 包含 Null,将返回 Null
character必要参数;Variant。为指定字符的字符码或字符串表达式,其第一个字符将用于建立返回的字符串。如果 character 包含 Null,就会返回 Null

说明

如果指定 character 的数值大于 255,String 会按下面的公式将其转为有效的字符码:

character Mod 256


Switch 函数

计算一组表达式列表的值,然后返回与表达式列表中最先为 True 的表达式所相关的 Variant 数值或表达式。

语法

Switch(expr-1, value-1[, expr-2, value-2 _ [, expr-n,value-n]])

Switch 函数的语法具有以下几个部分:

部分描述
expr必要参数。要加以计算的 Variant 表达式。
value必要参数。如果相关的表达式为 True,则返回此部分的数值或表达式。

说明

Switch 函数的参数列表由多对表达式和数值组成。表达式是由左至右加以计算的,而数值则会在第一个相关的表达式为 True 时返回。如果其中有部分不成对,则会产生一个运行时错误。如果 expr-1TrueSwitch 返回 value-1,如果 expr-1False,但 expr-2True,则 Switch 返回 value-2,以此类推。

Switch 会返回一个 Null值,如果:

  • 没有一个表达式为 True

  • 第一个为 True 的表达式,其相对应的值为 Null

虽然它只返回其中的一个值,但是 Switch 会计算所有的表达式。因此应该注意到所产生的副作用。例如,只要其中一个表达式导致被零除错误,就会发生错误。


SYD 函数

返回一个 Double,指定某项资产在一指定期间用年数总计法计算的折旧。

语法

SYD(cost, salvage, life, period)

SYD 函数有下列命名参数:

部分描述
cost必要。Double 指定资产的初始成本。
salvage必要。Double 指定资产在可用年限结束后的价值。
life必要。Double 指定资产的可用年限。
period必要。Double 指定计算资产折旧所用的那一期间。

说明

必须用相同的单位表示 lifeperiod 参数。例如,如果 life 用月份表示,则 period 也必须用月份表示。所有参数都必须是正数。


Tab 函数

Print # 语句或 Print 方法一起使用,对输出进行定位。

 语法

Tab[(n)]

可选的 n 参数是在显示或打印列表中的下一个表达式之前移动的列数。若省略此参数,则 Tab 将插入点移动到下一个打印区的起点。这就使 Tab 可用来替换国别中的逗号,此处,逗号是作为十进制分隔符使用的。

说明

如果当前行上的打印位置大于 n,则 Tab 将打印位置移动到下一个输出行的第 n 列上。如果 n 小于 1,则 Tab 将打印位置移动到列 1。如果 n 大于输出行的宽度,则 Tab 函数使用以下公式计算下一个打印位置:

n Mod width

例如,如果 width 是 80,并指定 Tab(90),则下一个打印将从列 10 开始(90/80 的余数)。如果 n 小于当前打印位置,则从下一行中计算出来的打印位置开始打印。如果计算后的打印位置大于当前打印位置,则从同一行中计算出来的打印位置开始打印。

输出行最左端的打印位置总是 1。在使用 Print # 语句将数据写入文件时,最右端的打印位置是输出文件的当前宽度,这一宽度可用 Width # 语句设置。

注意 要确保表格列的宽度足以容纳较宽的字符串。

Print 方法与 Tab 函数一起使用时,打印的外观将会被分割为均匀、定宽的列。各列的宽度等于选用字体内以磅数为单位的所有字符的平均宽度。但是,在已打印字符的个数与那些字符所占据的定宽列的数目之间不存在任何关系。例如,大写字母 W 占据超过一个定宽的列,而小写字母 i 则占据少于一个定宽的列。


Tan 函数

返回一个 Double 的值,指定一个角的正切值。

语法

Tan(number)

必要的 number 参数是 Double 或任何有效的数值表达式,表示一个以弧度为单位的角度。

说明

Tan 取一角度为参数值,并返回直角的两条邻边的比值。该比值是角的对边长度除以角的邻边长度的商。

为了将角度转换为弧度,请将角度乘以 pi/180/180。为了将弧度转换为角度,请将弧度乘以 180/pi。


Time 函数

返回一个指明当前系统时间的 Variant (Date)。

语法

Time

说明

为了设置系统时间,请使用 Time 语句。


Timer 函数

返回一个 Single,代表从午夜开始到现在经过的秒数。

语法

Timer

说明

Microsoft Windows中,Timer函数返回一秒的小数部分。


TimeSerial 函数

返回一个 Variant (Date),包含具有具体时、分、秒的时间。

语法

TimeSerial(hour, minute, second)

TimeSerial 函数语法有下列的命名参数:

部分描述
hour必要;Variant (Integer)。其值从 0 (12:00 A.M.) 到 23 (11:00 P.M.),或一数值表达式。
minute必要;Variant (Integer)。任何数值表达式。
second必要;Variant (Integer)。任何数值表达式。

说明

为了指定一个时刻,如 11:59:59,TimeSerial 的参数取值应在正常范围内;也就是说,钟点应介于 0-23 之间,而分钟与秒应介于 0-59 之间。但是,当一个数值表达式表示某时刻之前或其后的时、分钟或秒数时,也可以为每个使用这个数值表达式的参数指定相对时间。以下示例中使用了表达式代替绝对时间数。TimeSerial 函数返回中午之前六小时 (12 - 6) 又十五分钟 (-15) 的时间,即 5:45:00 A.M.

TimeSerial(12 - 6, -15, 0)

当任何一个参数的取值超出正常范围时,它会适时进位到下一个较大的时间单位。例如,如果指定了 75(75 分钟),则这个时间被解释成一小时又十五分。如果一个参数值超出 -32,768 到 32,767 的范围,就会导致错误发生。如果三个参数指定的时间会使日期超出可接受的日期范围,则亦会导致错误发生。


TimeValue 函数

返回一个包含时间的 Variant (Date)。

语法

TimeValue(time)

必要的 time 参数,通常是一个字符串表达式,表示 0:00:00 (12:00:00 A.M.) 到 23:59:59 (11:59:59 P.M.) 之间的时刻。但是,time 也可以是表示在同一时间范围取值的任何其它表达式。如果 time 包含 Null,则返回 Null

说明

可以使用 12 小时制或 24 小时制的时间格式。例如,”2:24PM”"14:24" 均是有效的 time 表达式。

如果 time 参数包含日期信息,TimeValue 将不会返回它。但是,若 time 包含无效的日期信息,则会导致错误发生。


类型转换函数

每个函数都可以强制将一个表达式转换成某种特定数据类型。

语法

CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CStr(expression)

CVar(expression)

CStr(expression)

必要的 expression 参数可以是任何字符串表达式或数值表达式。

返回类型

函数名称决定返回类型,如下所示:

函数返回类型expression 参数范围
CBool Boolean任何有效的字符串或数值表达式。
CByte Byte0 至 255。
CCurCurrency-922,337,203,685,477.5808 至922,337,203,685,477.5807。
CDateDate任何有效的日期表达式。
CDblDouble 负数从 -1.79769313486232E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。
CDecDecimal零变比数值,即无小数位数值,为
+/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为
+/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。
CIntInteger-32,768 至 32,767,小数部分四舍五入。
CLngLong-2,147,483,648 至 2,147,483,647,小数部分四舍五入。
CSngSingle负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
CStrString依据 expression 参数返回 Cstr。
CVarVariant若为数值,则范围与 Double 相同;若不为数值,则范围与 String 相同。

说明

如果传递给函数的 expression 超过转换目标数据类型的范围,将发生错误。

通常,在编码时可以使用数据类型转换函数,来体现某些操作的结果应该表示为特定的数据类型,而不是缺省的数据类型。例如,当单精度、双精度或整数运算发生的情况下,使用 CCur 来强制执行货币运算。

应该使用数据类型转换函数来代替 Val,以使国际版的数据转换可以从一种数据类型转换为另一种。例如,当使用 Ccur 时,不同的小数点分隔符、千分位分隔符和各种货币选项,依据系统的国别设置都会被妥善识别。

当小数部分恰好为 0.5 时,Cint CLng 函数会将它转换为最接近的偶数值。例如,0.5 转换为 0、1.5 转换为 2。Cint CLng 函数不同于 Fix Int 函数,Fix Int 函数会将小数部分截断而不是四舍五入。并且 Fix Int 函数总是返回与传入的数据类型相同的值。

使用 IsDate 函数,可判断 date 是否可以被转换为日期或时间。Cdate 可用来识别日期文字和时间文字,以及落入可接受的日期范围内的数值。当转换一个数字成为日期时,是将整数部分转换为日期,小数部分转换为从午夜起算的时间。

CDate 依据系统上的国别设置来决定日期的格式。如果提供的格式为不可识别的日期设置,则不能正确判断年、月、日的顺序。另外,长日期格式,若包含有星期的字符串,也不能被识别。

CVDate 函数也提供对早期 Visual Basic 版本的兼容性。CVDate 函数的语法与 CDate 函数是完全相同的,不过,CVDate 是返回一个 Variant,它的子类型是 Date,而不是实际的 Date 类型。因为现在已有真正的 Date 类型,所以 CVDate 也不再需要了。转换一个表达式成为 Date,再赋值给一个 Variant,也可以达到同样的效果。也可以使用这种技巧将其他真正的数据类型转换为对等的 Variant 子类型。

注意 CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。


TypeName 函数

返回一个 String,提供有关变量的信息。

语法

TypeName(varname)

必要的 varname 参数是一个 Variant,它包含用户定义类型变量之外的任何变量。

说明

TypeName 所返回的字符串可以是下面列举的任何一个字符串

返回字符串变量
对象类型类型为 objecttype 的对象
Byte位值
Integer整数
Long长整数
Single单精度浮点数
Double双精度浮点数
Currency货币
Decimal十进制值
Date日期
String字符串
布尔布尔值
Error错误值
Empty未初始化
Null无效数据
Object对象
Unknown类型未知的对象
Nothing不再引用对象的对象变量

如果 varname 是一个数组,则返回的字符串可以是任何一个后面添加了空括号的可能的返回字符串(或 Variant)。例如,如果 varname 是一个整数数组,则 TypeName 返回 "Integer()"。


UBound 函数

返回一个 Long 型数据,其值为指定的数组维可用的最大下标。

语法

UBound(arrayname[, dimension])

UBound 函数的语法包含下面部分:

部分描述
arrayname必需的。数组变量的名称,遵循标准变量命名约定。
dimension可选的;Variant (Long)。指定返回哪一维的上界。1 表示第一维,2 表示第二维,以此类推。如果省略 dimension,就认为是 1。

说明

UBound 函数与 LBound 函数一起使用,用来确定一个数组的大小。LBound 用来确定数组某一维的上界。

对具有下述维数的数组而言,UBound 的返回值见下表:

Dim A(1 To 100, 0 To 3, -3 To 4)
语句返回值
UBound(A, 1)100
UBound(A, 2)3
UBound(A, 3)4


UCase 函数

返回 Variant (String),其中包含转成大写的字符串。

语法

UCase(string)

必要的 string 参数为任何有效的字符串表达式。如果 string 包含 Null,将返回 Null。

说明

只有小写的字母会转成大写;原本大写或非字母的字符保持不变


Val 函数

返回包含于字符串内的数字,字符串中是一个适当类型的数值。

语法

Val(string)

必要的 string 参数可以是任何有效的字符串表达式.

说明

Val 函数,在它不能识别为数字的第一个字符上,停止读入字符串。那些被认为是数值的一部分的符号和字符,例如美圆号与逗号,都不能被识别。但是函数可以识别进位制符号 &O(八进制)和 &H(十六进制)。空白、制表符和换行符都从参数中被去掉。

下面的返回值为 1615198:

Val("    1615 198th Street N.E.")

在下面的代码中,Val 为所示的十六进制数值返回十进制数值 -1。

Val("&HFFFF")

注意 Val 函数只会将句点(.)当成一个可用的小数点分隔符。当使用不同的小数点分隔符时,如在国际版应用程序中,代之以 CDbl 来把字符串转换为数字。


VarType 函数

返回一个 Integer,指出变量的子类型。

语法

VarType(varname)

必要的 varname 参数是一个 Variant,包含用户定义类型变量之外的任何变量。

返回值

常数描述
vbEmpty0Empty(未初始化)
vbNull1Null(无有效数据)
vbInteger2整数
vbLong3长整数
vbSingle4单精度浮点数
vbDouble5双精度浮点数
vbCurrency6货币值
vbDate7日期
vbString8字符串
vbObject9对象
vbError10错误值
vbBoolean11布尔值
vbVariant12Variant(只与变体中的数组一起使用)
vbDataObject13数据访问对象
vbDecimal14十进制值
vbByte17位值
vbUserDefinedType36包含用户定义类型的变量
vbArray8192数组

注意 这些常数是由 Visual Basic 为应用程序指定的。这些名称可以在程序代码中到处使用,以代替实际值。

说明

VarType 函数自身从不对 vbArray 返回值。VarType 总是要加上一些其他值来指出一个具体类型的数组。常数 vbVariant 只与 vbArray 一起返回,以表明 VarType 函数的参数是一个 Variant 类型的数组。例如,对一个整数数组的返回值是 vbInteger + vbArray,或 8194。如果一个对象有缺省属性,则 VarType (object) 返回对象缺省属性的类型。


Weekday 函数

返回一个 Variant (Integer),包含一个整数,代表某个日期是星期几。

语法

Weekday(date, [firstdayofweek])

Weekday 函数语法有下列的命名参数:

部分描述
date必要。能够表示日期的 Variant、数值表达式、字符串表达式或它们的组合。如果 date 包含 Null,则返回 Null
Firstdayofweek可选。指定一星期第一天的常数。如果未予指定,则以 vbSunday 为缺省值。

设置

firstdayofweek 参数有以下设定值:

常数描述
vbUseSystem0使用 NLS API 设置。
VbSunday1星期日(缺省值)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

返回值

Weekday 函数可以返回以下诸值:

常数描述
vbSunday1星期日
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六


WeekdayName函数

描述

返回一个字符串,表示一星期中的某天。

语法

WeekdayName(weekday, abbreviate, firstdayofweek)

WeekdayName函数语法有如下几部分:

部分描述
weekday必需的。数字值,表示一星期中的某天。该数字值要依赖于firstdayofweek设置中的设置值来决定。
abbreviate可选的。Boolean值,表示星期的名称是否被缩写。如果忽略该值,缺省值为False,表明星期的名称不能被缩写。
firstdayofweek可选的。数字值,表示一星期中第一天。关于其值,请参阅“设置值”部分。

设置值

firstdayofweek参数值如下:

常数描述
vbUseSystem0使用本国语言支持 (NLS) API设置值。
vbSunday1星期日(缺省)。
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六


Year 函数

返回 Variant (Integer),包含表示年份的整数。

语法

Year(date)

必要的 date 参数,可以是任何能够表示日期的 Variant、数值表达式、字符串表达式或它们的组合。如果 date 包含 Null,则返回 Null


算术运算符

^ 运算符

* 运算符

/ 运算符

/ 运算符

Mod 运算符

+ 运算符

- 运算符


连接运算符

& 运算符

+ 运算符


转换函数

Asc 函数

CBool 函数

CByte 函数

CCur 函数

CDate 函数

CDec 函数

CDbl 函数

Chr 函数

CInt 函数

CLng 函数

CSng 函数

CStr 函数

CVar 函数

CVErr 函数

Format 函数

Hex 函数

Oct 函数

Str 函数

Val 函数


数据类型概述

以下表格显示所支持的数据类型,以及存储空间大小与范围。

数据类型 存储空间大小范围
Byte1 个字节0 到 255
Boolean2 个字节TrueFalse
Integer 2 个字节-32,768 到 32,767
Long
(长整型)
4 个字节-2,147,483,648 到 2,147,483,647
Single
(单精度浮点型)
4 个字节负数时从 -3.402823E38 到 -1.401298E-45;正数时从 1.401298E-45 到 3.402823E38
Double
(双精度浮点型)
8 个字节负数时从 -1.79769313486232E308 到
-4.94065645841247E-324;正数时从4.94065645841247E-324 到 1.79769313486232E308
Currency
(变比整型)
8 个字节从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807
Decimal14 个字节没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335,而小数点右边有 28 位数时为 +/-7.9228162514264337593543950335;最小的非零值为 +/-0.0000000000000000000000000001
Date8 个字节100 年 1 月 1 日 到 9999 年 12 月 31 日
Object4 个字节任何 Object 引用
String
(变长)
10 字节加字符串长度0 到大约 20 亿
String
(定长)
字符串长度1 到大约 65,400
Variant
(数字)
16 个字节任何数字值,最大可达 Double 的范围
Variant
(字符)
22 个字节加字符串长度与变长 String 有相同的范围
用户自定义
(利用 Type
所有元素所需数目每个元素的范围与它本身的数据类型的范围相同。

注意 任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。

包含一数组的 Variant 比单独的一个数组需要多 12 个字节。


导出的数学函数

以下为非基本数学函数的列表,皆可由基本数学函数导出:

函数由基本函数导出之公式
Secant(正割)Sec(X) = 1 / Cos(X)
Cosecant(余割)Cosec(X) = 1 / Sin(X)
Cotangent(余切)Cotan(X) = 1 / Tan(X)
Inverse Sine(反正弦) Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine(反余弦) Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant(反正割) Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))
Inverse Cosecant(反余割) Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
Inverse Cotangent(反余切) Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine(双曲正弦) HSin(X) = (Exp(X) - Exp(-X)) / 2
Hyperbolic Cosine(双曲余弦) HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent(双曲正切) HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant(双曲正割) HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant(双曲余割)HCosec(X) = 2 / (Exp(X) - Exp(-X))
Hyperbolic Cotangent(双曲余切)HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
Inverse Hyperbolic Sine(反双曲正弦)HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine(反双曲余弦)HArccos(X) = Log(X + Sqr(X * X - 1))
Inverse Hyperbolic Tangent(反双曲正切)HArctan(X) = Log((1 + X) / (1 - X)) / 2
Inverse Hyperbolic Secant(反双曲正割)HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant(反双曲余割)HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent(反双曲余切) HArccotan(X) = Log((X + 1) / (X - 1)) / 2
以 N 为底的对数LogN(X) = Log(X) / Log(N)


逻辑运算符

And 运算符

Eqv 运算符

Imp 运算符

Not 运算符

Or 运算符

Xor 运算符


数学函数

Abs 函数

Atn 函数

Cos 函数

Exp 函数

Fix 函数

Int 函数

Log 函数

Rnd 函数

Sgn 函数

Sin 函数

Sqr 函数

Tan 函数

导出的数学函数


运算符优先顺序

在一个表达式中进行若干操作时,每一部分都会按预先确定的顺序进行计算求解,称这个顺序为运算符的优先顺序。

在表达式中,当运算符不止一种时,要先处理算术运算符,接着处理比较运算符,然后再处理逻辑运算符。所有比较运算符的优先顺序都相同;也就是说,要按它们出现的顺序从左到右进行处理。而算术运算符和逻辑运算符则必须按下列优先顺序进行处理:

算术比较逻辑
指数运算 (^)相等 (=)Not
负数 (-)不等 (<>)And
乘法和除法 (*/)小于 (<)Or
整数除法 (/)大于 (>)Xor
求模运算 (Mod)小于或相等 (<=)Eqv
加法和减法 (+-)大于或相等 (>=)Imp
字符串连接 (&)LikeIs

当乘法和除法同时出现在表达式中时,每个运算都按照它们从左到右出现的顺序进行计算。当乘法和除法同时出现在表达式中时,每个运算也都按照它们从左到右出现的顺序进行计算。可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。但是,在括号之内,运算符的优先顺序不变。

字符串连接运算符 (&) 不是算术运算符,但是,就其优先顺序而言,它在所有算术运算符之后,而在所有比较运算符之前。

Like 的优先顺序与所有比较运算符都相同,实际上是模式匹配运算符。

Is 运算符是对象引用的比较运算符。它并不将对象或对象的值进行比较,而只确定两个对象引用是否参照了相同的对象。


运算符摘要

运算符描述
算术运算符用来进行数学计算的运算符。
比较运算符用来进行比较的运算符。
连接运算符用来合并字符串的运算符。
逻辑运算符用来执行逻辑运算的运算符。

数组关键字总结

作用关键字
确认一个数组。IsArray
建立一个数组。Array
改变缺省最小值。Option Base
声明及初始化数组。Dim, Private, Public, ReDim, Static
判断数组下标极限值。LBound, UBound
重新初始化一个数组。Erase, ReDim

Collection 对象关键字总结

作用关键字
确认一个数组。IsArray
建立一个数组。Array
改变缺省最小值。Option Base
声明及初始化数组。Dim, Private, Public, ReDim, Static
判断数组下标极限值。LBound, UBound
重新初始化一个数组。Erase, ReDim

编译命令关键字总结

作用关键字
定义编译常数。#Const
编译程序码中的选择区块。#If...Then...#Else

控制流关键字总结

作用关键字
分支。GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo
退出或暂停程序。DoEvents, End, Exit, Stop
循环。Do...Loop For...Next, For Each...Next, While...Wend, With
判断。Choose, If...Then...Else, Select Case, Switch
使用过程。Call, Function, Property Get, Property Let, Property Set, Sub

变换关键字总结

作用关键字
ANSI 值变换为字符串。Chr
大小写变换。Format, LCase, UCase
日期变换为数字串。DateSerial, DateValue
数字进制变换。Hex, Oct
数值变换为字符串。Format, Str
数据类型变换。CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
日期变换。Day, Month, Weekday, Year
时间变换。Hour, Minute, Second
字符串变换为 ASCII 值。Asc
字符串变换为数值。Val
时间变换为数字串。TimeSerial, TimeValue

数据类型关键字总结

作用关键字
数据类型变换。CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
设置数据类型。Boolean, Byte, Currency, Date, Double, Integer, Long, Obect, Single, String, Variant (default)
检查数据类型。IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject

日期与时间关键字总结

作用关键字
设置当前日期或时间。Date ,Now, Time
计算日期。DateAdd, DateDiff, DatePart
返回日期。DateSerial, DateValue
返回时间。TimeSerial, TimeValue
设置日期或时间。Date, Time
计时。Timer

目录和文件关键字总结

作用关键字
改变目录或文件夹。ChDir
改变磁盘。ChDrive
复制文件。FileCopy
新建目录或文件夹。MkDir
删除目录或文件夹。RmDir
重新命名文件、目录或文件夹。Name
返回当前路径。CurDir
返回文件的日期、时间。FileDateTime
返回文件、目录及标签属性。GetAttr
返回文件长度。FileLen
返回文件名或磁盘标签。Dir
设置有关文件属性的信息。SetAttr

错误关键字总结

作用关键字
产生运行时错误。Clear, Error, Raise
取得错误信息。Error
提供错误信息。Err
返回 Error 变体。CVErr
运行时的错误处理。On Error, Resume
类型确认。IsError

金融关键字总结

作用关键字
计算折旧率。DDB, SLN, SYD
计算未来值。FV
计算利率。Rate
计算本质利率。IRR, MIRR
计算期数。NPer
计算支付。IPmt, Pmt, PPmt
计算当前净值。NPV, PV

输入与输出关键字总结

作用关键字
计算折旧率。DDB, SLN, SYD
计算未来值。FV
计算利率。Rate
计算本质利率。IRR, MIRR
计算期数。NPer
计算支付。IPmt, Pmt, PPmt
计算当前净值。NPV, PV

关键字分类

分类描述
数组建立、定义与使用数组。
编译命令控制编译方式。
控制流循环及过程流程控制。
变换变换数值及数据类型。
数据类型数据类型与 variant 子型态。
日期与时间变换、使用日期与时间表达式。
目录和文件控制文件系统与处理文件。
错误侦测与返回错误值。
金融进行各种金融运算。
输入与输出接受输入与显示、打印输出。
数学完成各种数学运算。
其他激活其他应用程序与处理事件。
操作符比较表达式与完成其它操作。
字符串处理处理字符串及字符串数据类型。
变量与常数声明、定义变量与常数。

数学关键字总结

作用关键字
三角函数。Atn, Cos, Sin, Tan
一般计算。Exp, Log, Sqr
产生随机数。Randomize, Rnd
取得绝对值。Abs
取得表达式的正负号。Sgn
数值变换。Fix, Int

其他关键字总结

作用关键字
处理搁置事件。DoEvents
运行其他程序。AppActivate, Shell
发送按键信息给其他应用程序。SendKeys
发出警告声。Beep
系统。Environ
提供命令行字符串。Command
Macintosh。MacID, MacScript
自动。CreateObject, GetObject
色彩。QBColor, RGB

运算符关键字总结

作用关键字
处理搁置事件。DoEvents
运行其他程序。AppActivate, Shell
发送按键信息给其他应用程序。SendKeys
发出警告声。Beep
系统。Environ
提供命令行字符串。Command
Macintosh。MacID, MacScript
自动。CreateObject, GetObject
色彩。QBColor, RGB

注册关键字总结

作用关键字
处理搁置事件。DoEvents
运行其他程序。AppActivate, Shell
发送按键信息给其他应用程序。SendKeys
发出警告声。Beep
系统。Environ
提供命令行字符串。Command
Macintosh。MacID, MacScript
自动。CreateObject, GetObject
色彩。QBColor, RGB

字符串处理关键字总结

作用关键字
比较两个字符串。StrComp
变换字符串。StrConv
大小写变换。Format, LCase, UCase
建立重复字符的字符串。Space, String
计算字符串长度。Len
设置字符串格式。Format
重排字符串。LSet, RSet
处理字符串。InStr, Left, LTrim, Mid, Right, RTrim, Trim
设置字符串比较规则。Option Compare
运用 ASCII 与 ANSI 值。Asc, Chr

变量与常数关键字总结

作用关键字
指定值。Let
声明变量或常数。Const, Dim, Private, Public, New, Static
声明模块为私有。Option Private Module
判断 Variant。IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType
引用当前对象。Me
变量须明确声明。Option Explicit
设置缺省数据类型。Deftype


As

As 关键字用于下列语句:

Const 语句

Declare 语句

Dim 语句

Function 语句

Name 语句

Open 语句

Private 语句

Property Get 语句

Property Let 语句

Property Set 语句

Public 语句

ReDim 语句

Static 语句

Sub 语句

Type 语句


Binary

Binary 关键字用于下列语句:

Open 语句

Option Compare 语句


ByRef

ByRef 关键字用于下列语句:

Call 语句

Declare 语句

Function 语句

Property Get 语句

Property Let 语句

Property Set 语句

Sub 语句


ByVal

ByVal 关键字用于下列语句:

Call 语句

Declare 语句

Function 语句

Property Get 语句

Property Let 语句

Property Set 语句

Sub 语句


Date

Date 关键字用于下列上下文:

Date 数据类型

Date 函数

Date 语句


Else

Else 关键字用于下列语句:

If...Then...Else 语句

Select Case 语句


Empty

Empty 关键字是用作 Variant 子类型。它表示未初始化的变量值。

Error

Error 关键字用于下列上下文:

Error 函数

Error 语句

On Error 语句


False

False 关键字的值等于 0。

For

For 关键字用于下列上下文:

For...Next 语句

For Each...Next 语句

Open 语句


Friend

修改窗体模块或者类模块中的一个过程的定义,使得该过程可以被类外的模块调用,但必须是在定义该类的工程的部分内。Friend 过程在标准的模块中是不能使用的。

语法

[Private | Friend | Public] [Static] [Sub | Function | Property] procedurename

必需的 procedurename 是所要设定为在整个工程中都是可见的过程的名称,但是该过程对于类的控制器却是不可见的。

说明

类中的 Public 过程在任何地方都可以调用,即使是被该类实例的控制器所调用也可以。声明一个过程为 Private 就阻止了该对象的控制器对于该过程的调用,但是同时也阻止了定义该类的工程内部对该过程的调用。Friend 使得该过程在整个工程中都是可见的,但是对于一个对象实例的控制器却是不可见的。Friend 只能出现在窗体模块和类模块中,并且只能修改过程的名称,不能修改变量或者类型。一个类中的过程可以访问某个工程所有其它类的 Friend 过程。Friend 过程不会出现在类的类型库中。一个 Friend 过程不能被后期绑定。


Get

Get 关键字用于下列上下文:

Get 语句

Property Get 语句


Input

Input 关键字用于下列上下文:

Input 函数

Input # 语句

Line Input # 语句

Open 语句


Is

Is 关键字用于下列上下文:

If...Then...Else 语句

Is 运算子

Select Case 语句


Len

Len 关键字用于下列上下文:

Len 函数

Open 语句


Let

Let 关键字用于下列上下文:

Let 语句

Property Let 语句


Lock

Lock 关键字用于下列上下文:

Lock、Unlock 语句s

Open 语句


Me

Me 关键字像是隐含声明的变量。这个关键字适用于类模块中的每个过程。当类有多个实例时,Me 在代码正在执行的地方提供引用具体实例的方法。要把当前执行类实例的有关信息传递到另一个模块的过程,Me 非常有用。例如,假定模块中有以下过程:

Sub ChangeFormColor(FormName As Form)
   FormName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)
End Sub

可以调用这个过程并使用下列语句将窗体类的当前实例作为参数传递。

ChangeFormColor Me

Mid

Mid 关键字用于下列上下文:

Mid 函数

Mid 语句


New

New 关键字用于下列上下文:

Dim 语句

Private 语句

Public 语句

Set 语句

Static 语句


Next

Next 关键字用于下列上下文:

For...Next 语句

For Each...Next 语句

On Error 语句

Resume 语句


Nothing

使用 Nothing 关键字被将对象变量从实际对象中分离开来。要使用 Set 语句将 Nothing 赋值给对象变量。例如:

Set MyObject = Nothing

几个对象变量可以引用同一个实际对象。当 Nothing 被赋值给一个对象变量时,该变量不再引用任何实际对象。当几个对象变量引用同一个对象时,只有将全部对象变量都设置成 Nothing 之后,与被引用的对象有关联的内存资源及系统资源才会被释放掉,在这里,或者明确使用 Set,或者在最后一个设置成 Nothing 的对象变量超出范围后隐含地使用 Set


Null

Null 关键字被用来作为 Variant 子类型。它说明变量不包含有效数据。

On

On 关键字用于下列上下文:

On Error 语句

On...GoSub 语句

On...GoTo 语句


Option

Option 关键字用于下列上下文:

Option Base 语句

Option Compare 语句

Option Explicit 语句

Option Private 语句


Optional

Optional 关键字用于下列上下文:

Declare 语句

Function 语句

Property Get 语句

Property Let 语句

Property Set 语句

Sub 语句


ParamArray

ParamArray 关键字用于下列上下文:

Declare 语句

Function 语句

Sub 语句


Print

Print 关键字用于下列上下文:

Print 方法

Print # 语句


Private

Private 关键字用于下列上下文:

Const 语句

Declare 语句

Enum 语句

Function 语句

Option Private 语句

Private 语句

Property Get 语句

Property Let 语句

Property Set 语句

Sub 语句

Type 语句


Property

Property 关键字用于下列上下文:

Property Get 语句

Property Let 语句

Property Set 语句


Public

Public 关键字用于下列上下文:

Const 语句

Declare 语句

Enum 语句

Event 语句

Function 语句

Property Get 语句

Property Let 语句

Property Set 语句

Public 语句

Sub 语句

Type 语句


Resume

Resume 关键字用于下列上下文:

On Error 语句

Resume 语句


Seek

Seek 关键字用于下列上下文:

Seek 函数

Seek 语句


Set

Set 关键字用于下列上下文:

Set 语句

Property Set 语句


Static

Static 关键字用于下列上下文:

Function 语句

Property Get 语句

Property Let 语句

Property Set 语句

Static 语句

Sub 语句


Step

Step 关键字用于下列上下文:

For...Next 语句

For Each...Next 语句


String

String 关键字用于下列上下文:

String 数据类型

String 函数


Then

Then 关键字用于下列上下文:

#If...Then...#Else 命令

If...Then...Else 语句


Time

Time 关键字用于下列上下文:

Time 函数

Time 语句


To

To 关键字用于下列上下文:

Dim 语句

For...Next 语句

Lock、Unlock 语句s

Private 语句

Public 语句

ReDim 语句

Select Case 语句

Static 语句

Type 语句


True

True 关键字的值等于 -1。


WithEvents

WithEvents 关键字用于下列上下文:

Dim 语句

Private 语句

Public 语句


Add 方法

添加一个成员到 Collection 对象。

语法

object.Add item, key, before, after

Add 方法的语法具有下列对象限定符和命名参数:

部分描述
object必需的。对象表达式,其值为“应用于”列表中的对象。
item必需的。任意类型的表达式,指定要添加到集合中的成员。
key可选的。唯一字符串表达式,指定可以使用的键字符串,代替位置索引来访问集合中的成员。
before可选的。表达式,指定集合中的相对位置。在集合中将添加的成员放置在 before 参数识别的成员之前。如果为一数值表达式,则 before 必须是介于 1 和集合 Count 属性值之间的值。如果为一字符串表达式,则当添加一个被引用的成员到集合时,before 必须对应于指定的 key 值。可以指定 before 位置或 after 位置,但不能同时指定这两个位置。
after可选。表达式,指定集合中的相对位置。在集合中将添加的成员放置在 After 参数识别的成员之后。如果为一数值表达式,则 after 必须是介于 1 和集合 Count 属性值之间的值;如果为一字符串表达式,则当添加一个被引用的成员到集合时,after 必须对应于指定的 key 值。可以指定 before 位置或 after 位置,但不能同时指定这两个位置。

说明

before after 参数是字符串表达式或数值表达式,均须引用集合中现有成员,否则将导致错误发生。

如果指定的 key 和集合中现有成员的 key 发生重复,则也会导致错误发生。


Add方法(Dictionary)

描述

添加一对相对应的关键字和条目到 Dictionary 对象。

语法

object.Add key, item

Add方法的语法有如下几部分:

部分描述
Object必需的。一个 Dictionary 对象的名字。
Key必需的。与所添加的条目相关联的关键字。
Item必需的。与所添加的关键字相关联的条目。

说明

如果该关键字已经存在,则产生一个错误。


Add 方法(Folder)

描述

添加一个新的 Folder Folders 集合。

语法

object.AddFolders folderName

AddFolders 方法的语法有如下几部分:

部分描述
Object必需的。一个Folders集合的名称。
FolderName必需的。新添加的Folder的名称。

说明

如果 folderName 已经存在,则产生一个错误。


Assert 方法

有条件地在该方法出现的行上挂起执行。

语法

object.Assert booleanexpression

 Assert 方法的语法有如下的对象限定符和参数:

部分描述
object必需的。总是 Debug 对象。
booleanexpression必需的。一个值为 True 或者 False 的表达式。

说明

Assert 调用只在开发环境中工作。当模块被编译成为一个可执行的文件时,调用 Debug 对象的方法就会被忽略。

全部 booleanexpression 常常被计算。例如,即使一个 And 表达式的第一部分被计算为 False,整个表达式还要被计算。


BuildPath 方法

描述

追加一个名字到一个已经存在的路径。

语法

object.BuildPath(path, name)

BuildPath 方法语法有如下几部分:

部分描述
object必需的。始终是 FileSystemObject 的名字。
path必需的。要对其追加名字的已存在路径。路径可以是绝对的也可以是相对的,不必指定一个已存在的文件夹。
name必需的。要追加到已存在路径上的名字。

说明

只有在需要时,BuildPath 方法才在已存在路径和名字之间插入一个附加的路径分隔符。


Clear 方法

清除 Err 对象的所有属性设置。

语法

object.Clear

objec 总是 Err 对象。

说明

在处理错误之后使用 Clear 来清除 Err 对象,例如,在对 On Error Resume Next 使用拖延错误处理时就可使用 Clear。每当执行下列语句时就会自动调用 Clear 方法:

  • 任意类型的 Resume 语句。

  • Exit Sub, Exit Function, Exit Property

  • 任何 On Error 语句。

注意 当处理因访问其他对象产生的错误时,与其使用 On Error GoTo,不如使用 On Error Resume Next。每一次与对象打交道之后都检查 Err,则可消除代码访问对象时的含混之处。可以确认是哪个对象将错误引入 Err.Number 中,也可以确认最初是哪个对象产生了这个错误(Err.Source 中指定的对象)。


Close 方法

描述

关闭一个打开的 TextStream 文件。

语法

object.Close

object始终是一个 TextStream 对象的名字。


Copy 方法

描述

把一个指定的文件或文件夹从一个地方复制到另一个地方。

语法

object.Copy destination[, overwrite]

Copy 方法语法有如下几部分:

部分描述
object必需的。始终是一个 File Folder 对象的名字。
destination必需的。文件或文件夹要复制到的接受端。不允许有通配符。
overwrite可选的。Boolean 值,如果该值为 True (缺省),则已存在的文件或文件夹将被覆盖。如果为 False,则它们不被覆盖。

说明

对一个 File FolderCopy 方法的结果和执行 FileSystemObject.CopyFile FileSystemObject.CopyFolder 操作的结果是一样的,在后者中, object所引用的文件或文件夹是作为参数传递的。应当注意,后面的方法能够复制多个文件或文件夹。


CopyFile 方法

描述

把一个或多个文件从一个地方复制到另一个地方。

语法

object.CopyFile source, destination[, overwrite]

CopyFile 方法语法有如下几部分:

部分描述
object必需的。object始终是一个 FileSystemObject 的名字。
source必需的。指明一个或多个要被复制文件的字符串文件说明,它可以包括通配符。
destination必需的。指明 source 中的一个或多个文件要被复制到的接受端的字符串,不允许有通配符。
overwrite选项的。Boolean 值,它表示存在的文件是否被覆盖。如果是 True,文件将被覆盖;如果是 False,它们不被覆盖。缺省值是 True。注意如果 destination 具有只读属性设置,不论 overwrite 值如何,CopyFile 都将失败。

说明

通配符只能用在 source 参数的最后一个路径部件。例如,你可以在下面请况使用通配符:

FileSystemObject.CopyFile "c:/mydocuments/letters/*.doc", "c:/tempfolder/"

但下面情况不能使用:

FileSystemObject.CopyFile "c:/mydocuments/*/R1???97.xls", "c:/tempfolder"

如果 source 包含通配符或 destination 以路径分隔符(/)为结尾,则认为 destination 是一个已存在文件夹,在其中复制相匹配的文件。否则认为 destination 是一个要创建文件的名字。不论是那种情况,当复制一个文件时,可能发生三种事件。

  • 如果 destination 不存在,source 得到复制。这是通常的情况。

  • 如果 destination 是一个已存在的文件,则当 overwrite 值为 False 时发生一个错误,否则,source的复制文件将试图覆盖已存在文件。

  • 如果 destination 是一个目录,发生一个错误。

如果使用通配符的 source 不能和任何文件匹配,同样产生一个错误。CopyFile 方法停止在它遇到的第一个错误上。不要试图回卷或撤消错误发生前所做的任何改变。


CopyFolder 方法

描述

从一个地方递归地复制一个文件夹到另一个地方。

语法

object.CopyFolder source, destination[, overwrite]

CopyFolder 方法语法有如下几部分:

部分描述
Object必需的。始终为一个 FileSystemObject 的名字。
source必需的。指明一个或多个被复制文件夹的字符串文件夹说明,可以包括通配符。
destination必需的。指明 source 中被复制文件夹和子文件夹的接受端的字符串,不允许有通配符。
overwrite选项的。Boolean 值,它表示已存在的文件夹是否被覆盖。如果为 True,文件被覆盖。如果为 False,文件不被覆盖。缺省值为 True

说明

通配符仅可用于 source 参数的最后一个路径部件。例如你可以在下面情况使用它:

FileSystemObject.CopyFolder "c:/mydocuments/letters/*", "c:/tempfolder/"

但不能在下面情况使用它:

FileSystemObject.CopyFolder "c:/mydocuments/*/*", "c:/tempfolder/"

如果 source 包含通配符或 destination 以路径分隔符(/)为结尾,则认为 destination 是一个已存在的文件夹,在其中复制相匹配的文件夹和子文件夹。否则认为 destination 是一个要创建的文件夹的名字。不论何种情况,当复制一个文件夹时,可能发生四种事件。

  • 如果 destination 不存在,source 文件夹和它所有的内容得到复制。这是通常的情况。

  • 如果 destination 是一个已存在的文件,则发生一个错误。

  • 如果 destination 是一个目录,它将尝试复制文件夹和它所有的内容。如果一个包含在 source 的文件已在 destination 中存在,当 overwrite False 时发生一个错误,否则它将尝试覆盖这个文件。

  • 如果 destination 是一个只读目录,当尝试去复制一个已存在的只读文件到此目录并且 overwriteFalse 时,则发生一个错误。

如果 source 使用的通配符不能和任何文件夹匹配,也发生一个错误。

CopyFolder 方法停止在它遇到的第一个错误上。不要尝试回卷错误发生前所做的任何改变。


CreateFolder 方法

描述

创建一个文件夹。

语法

object.CreateFolder(foldername)

CreateFolder 方法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
foldername必需的。字符串表达式,它标识创建的文件夹。

说明

如果指定的文件夹已经存在,则发生一个错误。


CreateTextFile 方法

描述

创建一个指定的文件名并且返回一个用于该文件读写的 TextStream 对象。

语法

object.CreateTextFile(filename[, overwrite[, unicode]])

CreateTextFile 方法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject Folder 对象的名字。
filename必需的。字符串表达式,它标识创建的文件。
overwrite可选的。Boolean 值,表示一个已存在文件是否可被覆盖。如果可被覆盖其值为 True,其值为 False 时不能覆盖。如果它被省略,则已存在文件不能覆盖。
unicode可选的。Boolean 值,表示文件是作为一个 Unicode 文件创建的还是作为一个ASCII 文件创建的。如果作为一个 Unicode 文件创建,其值为 True,作为一个 ASCII 文件创建,其值为 False。如果省略的话,则认为是一个 ASCII 文件。

说明

下面的代码举例说明如何使用 CreateTextFile 方法创建和打开文本文件。

Sub CreateAfile
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("c:/testfile.txt", True)
    a.WriteLine("This is a test.")
    a.Close
End Sub

对于一个已经存在的 filename,如果 overwrite 参数是 False 或者没有提供,则发生一个错误。


Delete 方法

描述

删除一个指定的文件或文件夹。

语法

object.Delete force

Delete 方法语法有如下几部分:

部分描述
object必需的。始终是一个 File Folder 对象的名字。
force可选的。Boolean 值,如果要删除具有只读属性设置的文件或文件夹,其值为True。当其值为 False 时(缺省),不能删除具有只读属性设置的文件或文件夹。

说明

如果指定的文件或文件夹不存在,则发生一个错误。

对于一个 File FolderDelete 方法的结果和 执行 FileSystemObject.DeleteFile FileSystemObject.DeleteFolder 操作的结果是一样的。

Delete 方法对于文件夹内是否有内容不做区别。不管指定的文件夹是否有内容,它都被删除。


DeleteFile 方法

描述

删除一个指定的文件。

语法

object.DeleteFile filespec[, force]

DeleteFile 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
filespec必需的。要删除文件的名字。Filespec 可以在最后的路径部件中包含通配符。
force可选的。Boolean 值,如果要删除具有只读属性设置的文件,其值为 True。如果其值为 False (缺省),则不能删除具有只读属性设置的文件。

说明

如果没有发现相匹配的文件,则产生一个错误。DeleteFile 方法停在它遇到的第一个错误上。不要尝试回卷或撤消错误发生前所做的任何改变。


DeleteFolder 方法

描述

删除一个指定的文件夹和它的内容。

语法

object.DeleteFolder folderspec[, force]

DeleteFolder 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
folderspec必需的。要删除的文件夹的名字。 Folderspec 可以在最后的路径部件中包含通配符。
force可选的。Boolean 值,如果要删除具有只读属性设置的文件夹,其值为 True,如果值为 False (缺省),则不能删除具有只读属性设置的文件夹。

说明

DeleteFolder方法对文件夹中有无内容不做区别。不管指定的文件夹中是否有内容,它都被删除。

如果没有发现相匹配的文件夹,则发生一个错误。DeleteFolder 方法停止在它遇到的第一个错误上,不要尝试回卷或撤消错误发生前所做的任何改变。


DriveExists 方法

描述

如果指定的驱动器存在,返回 True,如果不存在返回 False

语法

object.DriveExists(drivespec)

DriveExists 方法语法有如下几部分:

部分描述
Object必需的。始终是一个 FileSystemObject 的名字。
Drivespec必需的。一个驱动器字符或一个完整的路径说明。

说明

对于可删除介质的驱动器,即使没有介质存在, DriveExists 方法也返回 True。使用 Drive 对象的 IsReady 属性确定驱动器是否准备好。


Exists 方法

描述

如果在 Dictionary 对象中指定的关键字存在,返回 True,若不存在,返回 False

语法

object.Exists(key)

Exists 方法语法有如下几部分:

部分描述
Object必需的。始终是一个 Dictionary 对象的名字。
Key必需的。在 Dictionary 对象中搜索的 Key 值。

FileExists 方法

描述

如果指定的文件存在,返回 True,若不存在,则返回 False

语法

object.FileExists(filespec)

FileExists 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
filespec必需的。要确定是否存在的文件的名字。如果认为文件不在当前文件夹中,必须提供一个完整的路径说明(绝对的或相对的)。


FolderExists 方法

描述

如果指定的文件夹存在返回 True,不存在返回 False

语法

object.FolderExists(folderspec)

FolderExists 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 对象的名字。
folderspec必需的。要确定是否存在的文件夹名字。如果认为文件夹不在当前文件夹中,必须提供一个完整的路径说明(绝对的或相对的)。


GetAbsolutePathName 方法

描述

从提供的路径说明中返回一个完整、明确的路径。

语法

object.GetAbsolutePathName(pathspec)

GetAbsolutePathName 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
pathspec必需的。要改变到一个完整、明确路径的路径说明。

说明

一个路径如果提供了从指定驱动器根目录的一个完整引用,则该路径是完整、明确的。一个完整的路径如果指定一个被映射驱动器的根文件夹,它只能以路径分隔符(/)为结尾。

假设当前目录是 c:/mydocuments/reports,下面的表说明了 GetAbsolutePathName 方法的行为。

Pathspec返回的路径
"c:""c:/mydocuments/reports"
"c:..""c:/mydocuments"
"c:///""c:/"
"c:*.*/may97""c:/mydocuments/reports/*.*/may97"
"region1""c:/mydocuments/reports/region1"
"c:/../../mydocuments""c:/mydocuments"


GetBaseName 方法

描述

返回一个包含路径中最后部件的基本名字(去掉任何文件扩展名)的字符串。

语法

object.GetBaseName(path)

GetBaseName 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
path必需的。 要返回其基本名字的部件的路径说明。

说明

如果没有部件和 path 参数匹配,GetBaseName 方法返回一个长度为零的字符串("")。

注意   GetBaseName 方法只对提供的 path 字符串起作用。它既不试图去辨认路径,也不检查指定路径是否存在。


GetDrive 方法

描述

返回一个与指定路径中的驱动器相对应的 Drive 对象。

语法

object.GetDrive drivespec

GetDrive 方法语法有如下几部分:

部分描述
Object必需的。始终是一个 FileSystemObject 的名字。
Drivespec必需的。drivespec参数可以是一个驱动器字符(c)、一个驱动器字符加一个冒号(c:)、一个驱动器字符加冒号和路径分隔符(c:/)或任何网络共享的说明(//computer2/share1)。

说明

对于网络共享,要进行检查以确保共享存在。

如果 drivespec 不符合任何一种可以接受的形式或者不存在,则发生一个错误。

对一个普通路径字符串调用 GetDrive 方法,使用下面步骤得到一个适合作为 drivespec 使用的字符串:

DriveSpec = GetDriveName(GetAbsolutePathName(Path))

GetDriveName 方法

描述

返回一个包含指定路径的驱动器名字的字符串。

语法

object.GetDriveName(path)

GetDriveName 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
path必需的。要返回其驱动器名字的部件的路径说明。

说明

如果驱动器不能确定,GetDriveName 方法返回一个长度为零的字符串("")。

注意   GetDriveName 方法只对提供的路径字符串起作用。它没有尝试去辨认路径,也不对指定路径是否存在进行检查。


GetExtensionName 方法

描述

返回一个包含路径中最后部件扩展名的字符串。

语法

object.GetExtensionName(path)

GetExtensionName 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
path必需的。.要返回其扩展名的部件的路径说明。

说明

对于网络驱动器,根目录(/)被认为是一个部件。

如果没有部件和 path 参数相匹配,GetExtensionName 方法返回一个长度为零的字符串 ("")。


GetFile 方法

描述

返回一个和指定路径中文件相对应的 File 对象。.

语法

object.GetFile(filespec)

GetFile 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject. 的名字。
filespec必需的。Filespec 是到一个指定文件的路径(绝对的或相对的)。

说明

如果指定的文件不存在,则发生一个错误。


GetFileName 方法

描述

返回指定路径中的最后部件,该路径不是驱动器说明的一部分。

语法

object.GetFileName(pathspec)

GetFileName 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
pathspec必需的。到一个指定文件的路径(绝对的或相对的)。

说明

如果 pathspec 不是以已命名部件结尾,GetFileName 方法返回一个零长度字符串("")。

注意   GetFileName 方法仅在提供的路径字符串上起作用。它没有尝试去辨认路径,也不对指定路径是否存在进行检查。


GetFolder 方法

描述

返回一个和指定路径中文件夹相对应的 Folder 对象。

语法

object.GetFolder(folderspec)

GetFolder方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject. 的名字。
folderspec必需的。Folderspec 是指定文件夹的路径(绝对的和相对的)。

说明

如果指定的文件夹不存在,则发生一个错误。


GetParentFolderName 方法

描述

返回一个包含指定路径最后部件父文件夹名字的字符串。

语法

object.GetParentFolderName(path)

GetParentFolderName 方法语法有如下几部分:

部分描述
object必需的。始终是 一个 FileSystemObject 的名字。
path必需的。要返回其父文件夹名字的部件的路径说明。

说明

如果 path 参数指定的部件没有父文件夹,则 GetParentFolderName 方法返回一个零长度字符串("")。

注意   GetParentFolderName 方法仅对提供的 path 字符串起作用。它没有尝试去辨认路径,也不对指定路径是否存在进行检查。


GetSpecialFolder 方法

描述

返回指定的特殊文件夹。

语法

object.GetSpecialFolder(folderspec)

GetSpecialFolder 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
folderspec必需的。要返回的特殊文件夹的名字。可以是在设置值部分中列出的任何常数。

设置值

folderspec 参数可为任何的下列值:

常数描述
WindowsFolder0Windows 文件夹,包含由 Windows 操作系统安装的文件。
SystemFolder1系统文件夹,包含库、字体、设备驱动程序。
TemporaryFolder2Temp 文件夹,用于存储临时文件。它的路径在 TMP 环境变量中。


GetTempName 方法

描述

返回一个随机产生的临时文件或文件夹的名字,该名字在执行需要临时文件或文件夹的操作时有用。

语法

object.GetTempName

可选的 object 始终是一个 FileSystemObject. 的名字。

说明

GetTempName 方法不产生一个文件,它仅提供一个临时文件名字,该名字可被 CreateTextFile 用于创建一个文件。


Item 方法

利用位置或键返回 Collection 对象的指定成员。

语法

object.Item(index)

Item 方法的语法具有下列对象限定符和部分:

部分描述
object必要。对象表达式,其值为“应用于”列表中对象。
index必要。为一表达式,指定集合中成员的位置。如果是数值表达式,则 index 必须是从 1 到集合 Count 属性值之间的数值。如果是字符串表达式,则当加入一被引用的成员到集合时,index 必须和 key 参数对应。

说明

如果 index 值无法与集合的任何现有成员匹配,就会导致错误发生。

Item 方法是集合的缺省方法。因此,以下两行程序代码等价:

Print MyCollection(1)
Print MyCollection.Item(1)

Items 方法

描述

返回一个包含 Dictionary 对象中所有条目的数组。

语法

object.Items

object始终是一个 Dictionary 对象的名字。

说明

下面的代码举例说明了 Items 方法的使用。:

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.Items             '取得条目
For i = 0 To d.Count -1 '重复数组
    Print a(i)          '打印条目
Next
...

Keys方法

描述

返回一个数组,该数组包含一个 Dictionary 对象中的全部已有的关键字。

语法

object.Keys

object始终是一个 Dictionary 对象的名字。

说明

下面的代码举例说明了 Keys 方法的使用。

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.keys              '取得关键字
For i = 0 To d.Count -1 '重复数组
    Print a(i)          '打印关键字
Next
...

Move 方法

描述

将一个指定的文件或文件夹从一个地方移动到另一个地方。

语法

object.Move destination

Move 方法语法有如下几部分:

部分描述
object必需的。始终是一个 File Folder 对象的名字。
destination必需的。文件或文件夹要移动到的目标。不允许有通配符。

说明

Move 方法对一个 File Folder 的结果和执行 FileSystemObject.MoveFile FileSystemObject.MoveFolder 操作的结果是一样的。但应当注意,后面的方法能够移动多个文件或文件夹。


MoveFile 方法

描述

将一个或多个文件从一个地方移动到另一个地方。

语法

object.MoveFile source, destination

MoveFile 方法语法有如下几部分:

部分描述
Object必需的。始终是一个 FileSystemObject 的名字。
Source必需的。一个或多个要移动文件的路径。Source 参数字符串只能在路径的最后部件中包含通配符。
destination必需的。一个或多个文件要移动到的目标路径。 Destination 参数不能包含通配符。

说明

如果 source 包含通配符或 destination 以路径分隔符 (/) 为结尾,则认为 destination 指定了一个存在的文件夹,在此文件夹中移动相匹配的文件。否则,认为 destination 是一个要创建的目标文件名。在上面任一情况下,当移动一个文件时可能出现三种事件。

  • 如果 destination 不存在,文件得到移动。这是通常的情况。

  • 如果 destination 是一个已存在文件,则发生一个错误。

  • 如果 destination 是一个目录,则发生一个错误。

如果一个在 source 中使用的通配符不能和任何一个文件匹配,也发生一个错误。 MoveFile 方法停止在它遇到的第一个错误上。不要尝试回卷错误发生前所做的任何改变。

重点   只有操作系统支持的情况下,这个方法才允许在卷之间移动文件。


MoveFolder 方法

描述

将一个或多个文件夹从一个地方移动到另一个地方。

语法

object.MoveFolder source, destination

MoveFolder 方法语法有如下几部分:

部分描述
object必需的。始终是一个 FileSystemObject 的名字。
source必需的。一个或多个要移动的文件夹路径。Source 参数字符串只能在路径的最后部件中包含通配符。
destination必需的。一个或多个文件夹要移动到的目标路径。Destination 参数不能包含通配符。

说明

如果 source 包含通配符或 destination 以路径分隔符 (/) 为结尾,则认为 destination 指定了一个已存在的文件夹,在此文件夹中移动相匹配的文件。否则,认为 destination 是一个要创建的目标文件夹名字。在上面的任一种情况下,当一个文件夹被移动时可能出现三种情况。

  • 如果 destination 不存在,文件夹得到移动。这是通常的情况。

  • 如果 destination 是一个已存在文件,则发生一个错误。

  • 如果 destination 是一个目录,则发生一个错误。

如果 source 中使用的一个通配符不能和任何文件夹相匹配,也发生一个错误。MoveFolder 方法停止在它遇到的第一个错误上。不要尝试回卷在错误发生前所做的任何改变。

重点   只有在操作系统支持的情况下,这个方法才允许文件夹在卷之间移动。


OpenAsTextStream 方法

描述

打开一个指定的文件并返回一个 TextStream 对象,该对象可用来对文件进行读、写、追加操作。

语法

object.OpenAsTextStream([iomode, [format]])

OpenAsTextStream 方法语法有如下几部分:

部分描述
Object必需的。始终是一个 File 对象的名字。
Iomode可选的。表明输入/输出方式。可为三个常数之一:ForReadingForWriting ForAppending
format可选的。三个 Tristate 值之一,用于指示打开文件的格式。如果省略,则文件以 ASCII 格式打开。

设置值

iomode 参数可为下面设置值中的任何值:

常数描述
ForReading1打开一个只读文件,不能对此文件进行写操作。
ForWriting2打开一个用于写操作的文件。如果和此文件同名的文件已存在,则覆盖以前内容。
ForAppending8打开一个文件并写到文件的尾部。

Format 参数可为下面设置值中的任何值:

常数描述
TristateUseDefault-2使用系统缺省打开文件。
TristateTrue-1以 Unicode 格式打开文件。
TristateFalse0以 ASCII 格式打开文件。

说明

OpenAsTextStream 方法提供了和 FileSystemObject. 的 OpenTextFile 方法相同的功能。此外,OpenAsTextStream 方法还可以用于对一个文件进行写操作。

下面的代码举例说明了 OpenAsTextStream 方法的使用:

Sub TextStreamTest
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, 
TristateFalse = 0
    Dim fs, f, ts, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    fs.CreateTextFile "test1.txt"            '创建一个文件
    Set f = fs.GetFile("test1.txt")
    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
    ts.Write "Hello World"
    ts.Close
    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
    s = ts.ReadLine
    MsgBox s
    ts.Close
End Sub

OpenTextFile 方法

描述

打开一个指定的文件并返回一个 TextStream 对象,该对象可用于对文件进行读操作或追加操作。

语法

object.OpenTextFile(filename[, iomode[, create[, format]]])

OpenTextFile 方法有如下几部分:

部分描述
Object必需的。始终是一个 FileSystemObject 的名字。
filename必需的。字符串表达式,它标识了打开的文件。
iomode可选的。表示输入/输出方式。可为两个常数之一:ForReadingForAppending
create可选的。Boolean 值,它表示如果指定的 filename 不存在是否可以创建一个新文件。如果创建新文件,其值为 True。若不创建文件其值为 False。缺省值为 False
format可选的。三种 Tristate 值之一,用于指示打开文件的格式。如果省略,则文件以 ASCII 格式打开。

设置值

iomode 参数可为下面设置值的任何一个:

常数描述
ForReading1打开一个只读文件。不能对此文件进行写操作。
ForAppending8打开一个文件并写到文件的尾部。

Format 参数可为下面设置值的任何值:

常数描述
TristateUseDefault-2使用系统缺省打开文件。
TristateTrue-1以 Unicode 格式打开文件。
TristateFalse  0以 ASCII 格式打开文件。

说明

下面的代码举例说明了使用 OpenTextFile 方法打开一个用于追加文本的文件:

Sub OpenTextFileTest
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Dim fs, f
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile("c:/testfile.txt", ForAppending,TristateFalse)
    f.Write "Hello world!"
    f.Close
End Sub

Print 方法

Immediate 窗口中显示文本。

语法

object.Print [outputlist]

Print 方法的语法具有下列对象限定符和部分:

部分描述
object必需的。对象表达式,其值为“应用于”列表中的对象。
outputlist可选的。要打印的表达式或表达式的列表。如果省略,则打印一空白行。

outputlist 参数具有以下语法和部分:

{Spc(n) | Tab(n)} expression charpos

部分描述
Spc(n)可选的。用来在输出中插入空白字符,这里,n 为要插入的空白字符数。
Tab(n)可选的。用来将插入点定位在绝对列号上,这里,n 为列号。使用无参数的 Tab(n) 将插入点定位在下一个打印区的起始位置。
expression可选。要打印的数值表达式或字符串表达式。
charpos可选。指定下个字符的插入点。使用分号 (;) 直接将插入点定位在上一个被显示的字符之后。使用 Tab(n) 将插入点定位在绝对列号上。使用无参数的 Tab 将插入点定位在下一个打印区的起始位置。如果省略 charpos,则在下一行打印下一字符。

说明

可以用空白或分号来分隔多个表达式。

对系统指定的国别设置,用小数点分隔符将所有打印到 Immediate 视窗的数据正确格式化。关键字要用适用于主应用程序的语言输出。

对于 Boolean 数据,或者打印 True 或者打印 False。根据主机应用程序的地区设置来翻译 True False 关键字。

使用系统能识别的标准短日期格式书写 Date 数据。当日期或时间部件丢失或为零时,只书写已提供的部件。

如果 outputlist 数据是 Empty,则无内容可写。但是,如果 outputlist 数据是 Null,则输出 Null。在输出 Null 关键字时,要把关键字正确翻译出来。

要把错误数据作为 Error errorcode 输出。在输出 Error 关键字时,要把关键字正确翻译出来。

如果在具有缺省显示空间的模块外使用此方法,则需要 object。例如,如果没有指定对象就在标准模块上调用此方法,则将导致错误发生,但是,如果在窗体模块上进行调用,则会在窗体上显示“outputlist”

注意 因为 Print 方法是按照字符比例进行打印,所以字符数与字符所占据的宽度固定的列的数目无关。例如,像 “W” 这样的宽字母占据的宽度超过一固定列宽,而像 "i" 这样的窄字母占据的宽度则较小。考虑到要使用比平均字符更宽的空间,表列一定要留有足够余地。另外,也可以使用固定间距的字体(像 Courier 字体)来确保每一字符均只占一列。


Raise 方法

产生运行时错误。

语法

object.Raise number, source, description, helpfile, helpcontext

Raise 方法具有下列对象限定符和命名参数:

参数描述
object必需的。总是 Err 对象。
Number必需的。Long整数,识别错误性质。Visual Basic 错误(既有 Visual Basic 定义的错误也有用户定义的错误)的范围在 0-65535 之间。从 0-512 的范围保留为系统错误;从 513-65535 的范围可以用做用户定义的错误。当在类模块中将 Number 属性设置成自己的错误代码时,可将错误代码号添加到 vbObjectError 常数上。例如,为了产生错误号 513,可将 vbObjectError + 513 赋值到 Number 属性。
source可选的。字符串表达式,为产生错误的对象或应用程序命名。当设置对象的这一属性时,要使用窗体 project.class。如果没有指定 source,则使用当前 Visual Basic 工程的程序设计 ID。
description可选的。描述错误的字符串表达式。如果没有指定,则检查 Number 的值。如果可以将错误映射成 Visual Basic 运行时错误代码,则将 Error 函数返回的字符串作为 Description 使用。如果没有与 Number 对应的 Visual Basic 错误,则要用到消息“应用程序定义的错误或对象定义的错误”。
helpfile可选的。帮助文件的完整限定的路径,在帮助文件中可以找到有关错误的帮助信息。如果没有指定,则 Visual Basic 会使用 Visual Basic 帮助文件的完整限定的驱动器、路径和文件名。
helpcontext可选的。识别 helpfile 内的标题的上下文 ID,而 helpfile 提供有助于了解错误的描述。如果省略,则使用处理有关错误的 Visual Basic 帮助文件的上下文 ID,该 ID 与 Number 属性对应。

说明

除了 number 之外,所有参数都是可选的。如果使用 Raise 而不指定一些参数,并且 Err 对象的属性设置含有未清除的值,则视这些值为错误的值。

Raise 被用来生成运行时错误,并可用来代替 Error 语句。当书写类模块时要生成错误,Raise 是有用的,因为 Err 对象比 Error 语句可能提供更丰富的信息。例如,用 Raise 方法,可以在 Source 属性中说明生成错误的来源,可以引用该错误的联机帮助。


Read 方法

描述

从一个 TextStream 文件中读取指定数量的字符并返回得到的字符串。

语法

object.Read(characters)

Read 方法语法有如下几部分:

部分描述
object必需的。始终是一个 TextStream 对象的名字。
characters必需的。从文件中要读取的字符数。

ReadAll 方法

描述

读取整个的 TextStream 文件并返回得到的字符串。

语法

object.ReadAll

object 始终是一个 TextStream 对象的名字。

说明

对于大的文件,使用 ReadAll 方法浪费内存资源。应使用其它的技术去输入一个文件,比如一行一行地读取文件。


ReadLine 方法

描述

从一个 TextStream 文件读取一整行(到换行符但不包括换行符)并返回得到的字符串。

语法

object.ReadLine

object参数始终是一个 TextStream 对象的名字。


Remove 方法

把成员从 Collection 对象中删除。

语法

object.Remove index

Remove 方法的语法具有下列对象限定符和部分:

部分描述
object必需的。对象表达式,其值为“应用于”列表中的对象。
Index必需的。表达式,指定集合成员的位置。如果是数值表达式,则 index 必须是介于 1 和集合 Count 属性值之间的数。如果是字符串表达式,则在将被引用的成员添加到集合时,index 必须和 key 参数一致。

说明

如果 index 的值与集合的现有成员不匹配,则会导致错误发生。


Remove 方法

描述

从一个 Dictionary 对象中删除一个关键字和条目对。

语法

object.Remove(key)

Remove 方法语法有如下几部分:

部分描述
Object必需的。始终是一个 Dictionary 对象的名字。
Key必需的。Key 与要从 Dictionary 对象中删除的关键字和条目对相关联。

说明

如果指定的关键字和条目对不存在,则发生一个错误。

下面的代码举例说明了 Remove 方法的使用:

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...
a = d.Remove()          '删除第二对

RemoveAll 方法

描述

RemoveAll 方法从 Dictionary 对象中删除所有关键字和条目对。

语法

object.RemoveAll

object始终是一个 Dictionary 对象的名字。

说明

下面的代码举例说明了 RemoveAll 方法的用法:

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...
a = d.RemoveAll         '清除字典

Skip 方法

描述

当读一个 TextStream 文件时跳过指定数量的字符。

语法

object.Skip(characters)

Skip 方法语法有下面几部分:

部分描述
object必需的。始终是一个 TextStream 对象的名字。
characters必需的。当读文件时要跳过的字符的数量。

说明

跳过的字符被放弃。


SkipLine 方法

描述

当读一个 TextStream 文件时跳过下一行。

语法

object.SkipLine

object始终是一个 TextStream 对象的名字。

说明

跳过一行是指读取并放弃一行中的所有字符,一直到并包括该行的换行符。

如果读的文件没有打开,则产生一个错误。


Write 方法

描述

写一个指定的字符串到一个 TextStream 文件。

语法

object.Write(string)

Write 方法语法有如下几部分:

部分描述
object必需的。始终是一个 TextStream 对象的名字。
string必需的。要写到文件中去的正文。

说明

指定的字符串被写入到文件中,在每个字符串之间没有插入空格或字符。使用 WriteLine 方法写入一个换行符或一个以换行符为结尾的字符串。


WriteBlankLines 方法

描述

写入指定数量的换行符到一个 TextStream 文件中。

语法

object.WriteBlankLines(lines)

WriteBlankLines 方法语法有如下几部分:

部分描述
object必需的。始终是一个 TextStream 对象的名字。
lines必需的。要写入的换行符数量。


WriteLine 方法

描述

写入一个指定的字符串和换行符到一个 TextStream 文件中。.

语法

object.WriteLine([string])

WriteLine 方法语法有如下几部分:

部分描述
object必需的。始终是一个 TextStream 对象的名字。
string可选的。要写入文件的正文。如果省略,一个换行符被写入文件中。


字符集 (0-127)

 0?32[space]64@96`
1·33!65A97a
2·34"66B98b
3·35#67C99c
4·36$68D100d
5·37%69E101e
6·38&70F102f
7·39'71G103g
8* *40(72H104h
9* *41)73I105i
10* *42*74J106j
11·43+75K107k
12·44,76L108l
13* *45-77M109m
14·46.78N110n
15·47/79O111o
16·48080P112p
17·49181Q113q
18·50282R114r
19·51383S115s
20·52484T116t
21·53585U117u
22·54686V118v
23·55787W119w
24·56888X120x
25·57989Y121y
26·58:90Z122z
27·59;91[123{
28·60<92/124|
29·61=93]125}
30·62>94^126~
31·63?95_127·

*·Microsoft Windows.不支持这些字符。

* *值 8、9、10 和 13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。


字符集 (128 - 255)

 128·160[space]192à224à
129·161?193á225á
130·162194?226a
131·163195?227?
132·164¤196?228?
133·165197?229?
134·166|198?230?
135·167§199?231?
136·168¨200è232è
137·169©201é233é
138·170a202ê234ê
139·171?203?235?
140·172?204ì236ì
141·173-205í237í
142·174®206?238?
143·175ˉ207?239?
144·176°208D240e
145177±209?241?
1461782210ò242ò
147·1793211ó243ó
148·180212?244?
149·181μ213?245?
150·182?214?246?
151·183·215×247÷
152·184?216?248?
153·1851217ù249ù
154·186o218ú250ú
155·187?219?251?
156·188?220ü252ü
157·189?221Y253y
158·190?222T254t
159·191?223?255?

·Microsoft Windows 并不支持这些字符。

本表中的值是 Windows 的默认值。 ANSI 特征集中 127 以上的值是由与操作系统有关的代码页决定的。


文档约定

Visual Basic 文档均遵循以下编排约定:

特定说明
Sub, If, ChDir, Print, True, Debug首字母大写的粗体字表示语言专用的关键字。
Setup操作命令以粗体字表示。
object, varname, arglist斜体的小写字母表示您须提供的信息。
pathname, filenumber粗斜体的小写字母表示参数,在那儿,可利用其位置指定或命名参数语法。
[expressionlist]用在语法中,括号中的项目代表可选的。
{While | Until}用在语法中,表示可从括号中的项目中选择一个。而且必须选择一个,除非所有项目外层还有一个中括号,例如:
 [{This | OrThat}]
ESC,ENTER小的大写字母代表按键名称和按键顺序。
ALT+F1, CTRL+R以加号 (+) 连接按键名称代表组合键,例如,ALT+F1 表示按下 ALT 键,再按下 F1。

代码约定

使用下列代码约定:

代码示例说明
MyString = "Hello, world!"这种字体都用于代码、变量与错误信息。
' This is a comment.符号 (') 引导注释文本。
MyVar = "This is an " _
& "example" _
& " of how to continue code."
空白加下划线 ( _) 可接续两行以上的代码。


Collection 对象

Collection 对象是项目所组成的有序集合,可以把这个集合作为单元来引用。

说明

Collection 对象提供了简便方法,直截了当将一组相关的项目视为单一对象来引用。集合中的项目或成员被这样一个事实联系起来:它们都属于这个集合。集合的成员不一定都是同一种数据类型的。

建立集合的方法与建立其它对象的方法一样。例如:

Dim X As New Collection

一旦建立集合之后,就可以用 Add 方法添加成员,用 Remove 方法删除成员。在用 For Each...Next 语句重复整个集合时,可以用 Item 方法从集合返回特定成员。


Debug 对象

Debug 对象在运行时将输出发送到 Immediate 窗口。

Dictionary 对象

描述

对象,用于存储数据关键字和条目对。

语法

Scripting.Dictionary

说明

Dictionary 对象与 PERL 关联数组等价。可以是任何形式的数据的条目被存储在数组中。每个条目都与一个唯一的关键字相关联。该关键字用来检索单个条目,通常是整数或字符串,可以是除数组外的任何类型。

下面的代码举例说明了如何创建一个 Dictionary 对象:

Dim d                   '创建一个变量
Set d = CreateObject(Scripting.Dictionary)
d.Add "a", "Athens"     '添加一些关键字和条目
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...

Drive 对象

描述

对特定磁盘驱动器或网络共享的属性提供访问。

说明

下面的代码举例说明了用 Drive 对象来访问驱动器属性:

Sub ShowFreeSpace(drvPath)
    Dim fs, d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(drvPath))
    s = "Drive " & UCase(drvPath) & " - " 
    s = s & d.VolumeName  & vbCrLf
    s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0) 
    s = s & " Kbytes"
    MsgBox s
End Sub

Drives 集合

描述

所有可用驱动器的只读集合。

说明

对于可删除的驱动器,不需要将媒体插入其中,它就可以在Drives集合中显示出来。

下面的代码举例说明了如何获得 Drives 集合,以及如何用 For Each...Next 语句来访问该集合中的每个Drive:

Sub ShowDriveList
    Dim fs, d, dc, s, n
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set dc = fs.Drives
    For Each d in dc
        s = s & d.DriveLetter & " - " 
        If d.DriveType = Remote Then
            n = d.ShareName
        Else
            n = d.VolumeName
        End If
        s = s & n & vbCrLf
    Next
    MsgBox s
End Sub

Err 对象

含有关于运行时错误的信息。

说明

Err 对象的属性由错误的生成者来设置,这个生成者或者是 Visual Basic,或者是对象,或者是程序设计员。

Err 对象的缺省属性是 Number。因为该缺省属性可以用对象名称 Err 表示,所以不必修改以前用 Err 函数或 Err 语句书写的代码。

当运行时错误发生时,Err 对象的属性被填入明确识别错误的信息以及处理这个错误所使用的信息。为了在代码中生成运行时错误,请用 Raise 方法。

在任意形式的 ResumeOn Error 语句之后以及在错误处理子程序内的 Exit SubExit Function、或 Exit Property 语句之后,将 Err 对象的属性重新设置为零或长度为零的字符串 ("")。可使用 Clear 方法重新明确设置 Err

为了对系统错误和类模块生成运行时错误,要使用 Raise 方法而不使用 Error 语句。在其它代码中是否使用 Raise 方法,这要看想要返回的信息量有多大。

Err 对象是具有全局范围的固有对象。在代码中没有必要建立这些对象的实例。


File 对象

描述

提供对文件所有属性的访问。

说明

下面的代码举例说明了如何获得一个 File 对象,以及如何查看它的一个属性。

Sub ShowFileInfo(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = f.DateCreated
    MsgBox s
End Sub

Files 集合

描述

在一个文件夹内的所有 File 对象的集合。

说明

下面的代码举例说明了如何获得一个 Files 集合,以及如何用 For Each...Next 语句来访问这个集合中的每个File:

Sub ShowFolderList(folderspec)
    Dim fs, f, f1, fc, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    Set fc = f.Files
    For Each f1 in fc
        s = s & f1.name 
        s = s & vbCrLf
    Next
    MsgBox s
End Sub

FileSystemObject 对象

描述

提供对计算机文件系统的访问。

语法

Scripting.FileSystemObject

说明

下面的代码举例说明了如何使用 FileSystemObject 返回一个 TextStream 对象,该对象是可读并可写的:

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:/testfile.txt", True)
a.WriteLine("This is a test.")
a.Close

在上面列出的代码中,CreateObject 函数返回 FileSystemObject (fs)。CreateTextFile 方法接着创建文件作为一个 TextStream 对象(a),而 WriteLine 方法则向创建的文本文件中写入一行文本。Close 方法刷新缓冲区并关闭文件。


Folder 对象

描述

提供对一个文件夹所有属性的访问。

说明

下面的代码举例说明了如何获得一个 Folder 对象,以及如何返回它的一个属性:

Sub ShowFolderInfo(folderspec)
    Dim fs, f, s,
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    s = f.DateCreated
    MsgBox s
End Sub

Folders 集合

描述

包含在一个 Folder 对象内的所有 Folder 对象的集合。

说明

下面的代码举例说明了如何获得一个 Folders 集合,以及如何用 For Each...Next 语句来访问该集合中的每个Folder:

Sub ShowFolderList(folderspec)
    Dim fs, f, f1, fc, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    Set fc = f.SubFolders
    For Each f1 in fc
        s = s & f1.name 
        s = s &  vbCrLf
    Next
    MsgBox s
End Sub

TextStream 对象

描述

加快对文件的顺序访问。

语法

TextStream.{property | method}

propertymethod 参数可以是和 TextStream 对象相关联的任何属性和方法。请注意,在实际应用中,TextStream 被一个变量占位符所替代,该变量占位符表示从 FileSystemObject 返回的 TextStream 对象。

说明

在下面的代码中,a 是由 FileSystemObject CreateTextFile 方法返回的 TextStream 对象:

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:/testfile.txt", True)
a.WriteLine("This is a test.")
a.Close

WriteLineCloseTextStream 对象的两个方法。


& 运算符

用来强制两个表达式作字符串连接。

语法

result = expression1 & expression2

& 运算符的语法具有以下几个部分:

部分描述
result必需的;任何String或Variant 变量。
expression1必需的;任何表达式。
expression2必需的;任何表达式。

说明

如果 expression 不是字符串,则将其转换成 String 变体。如果两个表达式都是字符串表达式,则 result 的数据类型是 String;否则 result String 变体。如果两个表达式都是 Null,则 result 也是 Null。但是,只要有一个 expression Null,那么在与其它表达式连接时,都将其作为长度为零的字符串 ("") 处理。任何 Empty 类型表达式也作为长度为零的字符串处理。


* 运算符

用来将两数相乘。

语法

result = number1*number2

* 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
number1必需的;任何数值表达式。
number2必需的;任何数值表达式。

说明

result 的数据类型通常与最精确的表达式的数据类型相同。精确度由最低到最高的顺序是

Byte、Integer、Long、Single、Currency、Double和Decimal。下列情况是例外:

如果result
乘法运算有一个 Single 和一个Long转换成 Double
result 的数据类型是 LongSingle Date 变体且超出正确范围,转换成有 Double Variant
result 的数据类型是 Byte 变体,且超出正确范围,转换成 Integer 变体。
result 的数据类型是 Integer 变体,且超出正确范围,转换成 Long 变体。

如果有一个或两个表达式是 Null 表达式,则 result Null。如果一个表达式是 Empty,则作为 0 处理。

注意 乘法用到的精确度等级与加法和减法用到的精确度等级不一样。


+ 运算符

用来求两数之和。

语法

result = expression1+expression2

+ 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
expression1必需的;任何表达式。
expression2必需的;任何表达式。

说明

在使用 + 运算符时有可能无法确定是做加法还是做字符串连接。为避免混淆,请使用 & 运算符进行连接,并且改进程序代码的可读性。

如果至少有一个表达式不是 Variant,则可运用以下法则:

如果
两个表达式都是数值数据类型 (Byte、Boolean、Integer、Long、Single、Double、Date、Currency 或是 Decimal)相加。
两个表达式都是 String连接。
一个表达式是数值数据类型而另一个是 Null 之外的任意 Variant相加。
一个表达式是 String 而其它是 Null 之外的任意 Variant连接。
一个表达式是 Empty Variant返回另一个不变的表达式作为 result
一个表达式是数值数据类型,而另一个是 String产生一个类型不匹配错误。
每个表达式都是 Nullresult Null

如果两个表达式都是 Variant 表达式,则可运用下列规则:

如果
两个 Variant 表达式都是数值相加。
两个 Variant 表达式都是字符串连接。
一个 Variant 表达式是数值而另一个是字符串相加。

对于只有数值数据类型表达式的单纯加法,result 的数据类型通常与其中最精确的表达式的数据类型相同。精确度由最低到最高的顺序是 ByteIntegerLongSingleDoubleCurrency Decimal。但下列情况例外:

如果result
一个 Single 和一个 Long 相加,一个 Double
result 的数据类型是 LongSingle Date 变体,且越出正确范围,转换成 Double 变体。
result 的数据类型是 Byte 变体,且超过本身的正确范围时,转换成 Integer 变体。
result 的数据类型是 Integer 变体,且超过本身的正确范围时,转换成 Long 变体。
将一个 Date 加到任何数据类型上,一个 Date

如果有一个或两个表达式是 Null 表达式,则 result Null。如果两个表达式都是 Empty,则 result Integer。但是,如果只有一个表达式是 Empty,则另一个表达式原封不动地作为 result 返回。

注意 加法和减法用到的精确度等级与乘法用到的精确度等级不一样。


- 运算符

用来求两数之差或表示数值表达式的负值。

语法 1

result = number1 - number2

语法 2

- number

- 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
number必需的;任何数值表达式。
number1必需的;任何数值表达式。
number2必需的;任何数值表达式。

说明

在语法 1 中,- 运算符是求两数之差的算术减法运算符。在语法 2 中,- 运算符为一元负运算符,说明表达式的值为负值。

result 的数据类型通常与最精确的表达式的数据类型相同。精确度由最低到最高的顺序是Byte、Integer、Long、Single、Double、Currency 和 Decimal。

下列情况例外:

如果result
当减法运算中有一个 Single 和一个 Long转换成一个 Double
result 的数据类型是一个 LongSingle 或 Date 变体,且超出正确范围,转换成包含 Double 的Variant。
result 的数据类型是一个 Byte 变体,且超出正确范围,转换成一个 Integer 变体。
result 的数据类型是一个 Integer 变体,且超出正确范围,转换成一个 Long 变体。
减法运算中有 Date 和其它任何数据类型,一个 Date
减法运算中有两个 Date 表达式,一个 Double

如果有一个或两个表达式是 Null 表达式,则 result Null。如果一个表达式是 Empty,则作为 0 处理。

注意 加法和减法用到的精确度等级与乘法用到的精确度等级不一样。


/ 运算符

用来进行两个数的除法运算并返回一个浮点数。

语法

result = number1/number2

/ 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
number1必需的;任何数值表达式。
number2必需的;任何数值表达式。

说明

result 的数据类型通常是 Double 或 Double 变体。下列情况是例外:

如果result
两个表达式都是 Byte、Integer 或Single表达式时,一个 Single,除非超出正确范围;如果发生这种情况,则产生错误。
两个表达式都是 ByteInteger Single 变体,一个 Single 变体,除非已超出正确范围;一旦发生这种情况,result 是一个包含 Double 的 Variant。
除法运算中有一个 Decimal及其它任何数据类型,一个 Decimal 数据类型。

如果有一个或是两个表达式是 Null 表达式,则 result Null。如果一个表达式是 Empty 则作为 0 处理。


/ 运算符

用来对两个数作除法并返回一个整数。

语法

result = number1/number2

/ 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
number1必需的;任何数值表达式。
number2必需的;任何数值表达式。

说明

在进行除法运算之前,数值表达式通过舍去小数部分转换成 Byte、Integer 或 Long表达式。

通常,无论 result 是不是整数,result 的数据类型都是 ByteByte 变体、IntegerInteger 变体、LongLong 变体。任何小数部分都被删除。但是,如果任何一个表达式是 Null,则 result Null。如果一个表达式是 Empty,则作为0 处理。


^运算符

用来求一个数字的某次方,次方数为 exponent 值。

语法

result = number^exponent

^ 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
number必需的;任何数值表达式。
exponent必需的;任何数值表达式。

说明

只有当 exponent 为整数值时,number 才可以为负数。在表达式中执行多个指数运算时,^ 运算符的计算顺序从左到右。

result 的数据类型通常是 Double 或包含 Double 的 Variant。但是,如果 number exponent 中有一个是 Null 表达式,则 result 也是 Null


= 操作符

描述

用于对一个变量或属性赋值。

语法

variable = value

= 操作符语法有如下几部分:

部分描述
variable任何变量或任何可写的属性。
value任何数值型或字符串文字、常数或表达式。

说明

等号左边的名字可以是一个简单的标量变量或一个数组的元素。等号左边的属性只能是运行时可写的属性。


AddressOf 运算符

一个一元运算符,它将其后面的过程的地址传递给一个 API 过程,该 API 过程在参数表对应位置中需要一个函数指针。

语法

AddressOf procedurename

必需的 procedurename 指定要传递的地址是哪一个过程的地址。这个过程必须是发出调用命令的工程中的一个标准模块模块里的一个过程。

说明

当一个过程的名称出现在一个参数列表中时,通常该过程已经被计算,并且该过程返回值的地址也会被传递。AddressOf 允许该过程的地址被传递给动态链接库 (DLL) 中的一个 Windows API 函数,而不是传递该过程的返回值。API 函数然后就可以使用这个地址来调用相应的 Basic 过程,这个过程就是我们所知道的回调。AddressOf 运算符只出现在对 API 过程的调用中。

尽管可以使用 AddressOf 运算符在 Basic 过程之间传递过程指针,却不能通过这样的一个指针从 Basic 内部调用一个函数。这就是说,例如,一个使用 Basic 编写的类 不能使用这样的一个指针来回调自己的控制器。当使用 AddressOf 运算符在 Basic 内的过程之间传递一个过程的指针时,被调用过程的参数类型必须定义为 As Long

警告 如果不能完全理解函数回调的概念,则使用 AddressOf 运算符可能会导致意想不到的结果。必须理解回调的 Basic 部份是如何工作的,以及接受所传递的函数地址的 DLL 的代码是如何工作的。调试这样的交互操作是非常困难的,因为该程序和开发环境运行在相同的进程中。在某些情况下,系统的调试也许是不可能的。

注意 可以使用 Microsoft Visual C++ (或者类似的工具)编译的 DLLs 来创建自己的回调函数原型。要使用 AddressOf 运算符来工作,您的原型必需使用 __stdcall 调用约定。缺省的调用约定 (__cdecl) 不能与 AddressOf 运算符一起工作。

因为一个回调的调用程序不在用户自己的程序中,所以很重要的一点是要保证回调过程中的错误不被回传到调用者。可以通过把 On Error Resume Next 语句放置于回调过程的起始处来达到这个要求。


And 运算符

用来对两个表达式进行逻辑连接。

语法

result = expression1 And expression2

And 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
expression1必需的;任何表达式。
expression2必需的;任何表达式。

说明

如果两个表达式的值都是 True,则 resultTrue。如果其中一个表达式的值是 False,则 resultFalse。下列表格说明如何确定 result

如果 expression1expression2result
TrueTrueTrue
TrueFalseFalse
TrueNullNull
FalseTrueFalse
FalseFalseFalse
FalseNullFalse
NullTrueNull
NullFalseFalse
NullNullNull

And 运算符还对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为且在 expression2 中的位为result
000
010
100
111


比较运算符

用来比较表达式。

语法

result = expression1 comparisonoperator expression2

result = object1 Is object2

result = string Like pattern

比较运算符具有以下几个部分:

部分描述
result必需的;任何数值变量。
expression必需的;任何表达式。
comparisonoperator必需的;任何比较运算符。
object必需的;任何对象名称。
string必需的;任何字符串表达式。
pattern必需的;任何字符串表达式或字符的范围。

说明

下列表格中有一系列比较运算符以及判定 result TrueFalse 还是 Null 的条件:

运算符True ifFalse ifNull if
<(小于)expression1 < expression2expression1 >= expression2expression1 or expression2 = Null
<=(小于或等于)expression1 <= expression2expression1 > expression2expression1 or expression2 = Null
>(大于)expression1 > expression2expression1 <= expression2expression1 or expression2 = Null
>=(大于或等于)expression1 >= expression2expression1 < expression2expression1 or expression2 = Null
=(等于)expression1 = expression2expression1 <> expression2expression1 or expression2 = Null
<>(不等于)expression1 <> expression2expression1 = expression2expression1 or expression2 = Null

注意 Is Like 运算符有特定的比较功能,它们不同於表格中的运算符。

在比较两个表达式的时候可能难以确定将要比较的表达式是数字还是字符串。下列表格将说明如何比较表达式,或说明当其中一个表达式不是 Variant 时,如何获得比较的结果。

如果
两个表达式都是数值数据类型 (Byte、Boolean、Integer、Long、Single、Double、Date、Currency 或Decimal)进行数值比较。
两个表达式都是 String进行字符串比较
一个表达式是数值数据类型而另一个是数字 Variant、或可以为一数字进行数值比较。
一个表达式是数值数据类型而另一个是不能转换成数字的字符串 Variant产生类型不匹配的错误。
一个表达式是 String,而另一个是除了 Null 以外的任何 Variant进行字符串比较。
一个表达式是 Empty 而另一个是数值数据类型进行数值比较,使用 0 作为 Empty 表达式。
一个表达式是 Empty 而另一个是 String进行字符串比较,使用长度为零的字符串 ("") 作为 Empty 表达式。

如果 expression1 expression2 都是 Variant 表达式, 则它们的基本类型决定了比较方式。下列表格说明如何比较表达式,或指出通过比较得到的结果,此结果取决于 Variant 的基本类型:

如果
两个 Variant 表达式都是数值进行数值比较。
两个 Variant 表达式都是字符串进行字符串比较。
一个 Variant 表达式是数值而另一个是字符串数值表达式小于字符串表达式。
一个 Variant 表达式是 Empty 而另一个是数值进行数值比较,使用 0 作为 Empty 表达式。
一个 Variant 表达式是 Empty 而另一个是字符串进行字符串比较,使用长度为零的字符串 ("") 作为 Empty 表达式。
两个 Variant 表达式都是 Empty表达式相等。

当一个 Single 与一个 Double 作比较时,Double 会进行舍入处理而与此 Single 有相同的精确度。

如果一个 Currency 与一个 Single Double 进行比较,则 SingleDouble 转换成一个 Currency。与此相似,当一个 Decimal 要与一个 SingleDouble 进行比较时,SingleDouble 会转换成一个 Decimal。对于 Currency,任何小于 .0001 的小数将被舍弃,对于 Decimal,任何小于 1E-28 的小数将被舍弃,或者可能产生溢出错误。舍弃这样的小数部分会使原来不相等的两个数值经过比较后相等。


Eqv 运算符

用来对两个表达式进行逻辑等价运算。

语法

result = expression1 Eqv expression2

Eqv 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
expression1必需的;任何表达式。
expression2必需的;任何表达式。

说明

如果有一个表达式是 Null,则 result 也是 Null。如果表达式都不是 Null,则根据下表来确定 result

如果 expression1expression2result
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseTrue

Eqv 运算符对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为且在 expression2 中的位为result
001
010
100
111


Imp 运算符

用来对两个表达式进行逻辑蕴涵运算。

语法

result = expression1 Imp expression2

Imp 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
expression1必需的;任何表达式。
expression2必需的;任何表达式。

说明

下列表格说明如何确定 result

如果 expression1expression2result
TrueTrueTrue
TrueFalseFalse
TrueNullNull
FalseTrueTrue
FalseFalseTrue
FalseNullTrue
NullTrueTrue
NullFalseNull
NullNullNull

Imp 运算符对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为且在 expression2 中的位为result
001
011
100
111


Is 运算符

用来比较两个对象的引用变量。

语法

result = object1 Is object2

Is 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
object1必需的;任何对象名称。
object2必需的;任何对象名称。

说明

如果 object1object2 两者引用相同的对象,则 resultTrue;否则,resultFalse。有很多方法使两个变量引用相同的对象。

在以下示例中,A 和 B 已被设置成与 C 引用相同的对象:

Set A = B

在下例中,A 和 B 引用的对象与 C 相同:

Set A = C
Set B = C

Like 运算符

用来比较两个字符串。

语法

result = string Like pattern

Like 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
string必需的;任何字符串表达式。
pattern必需的;任何字符串表达式,遵循“说明”中的模式匹配约定。

说明

如果 string pattern 匹配,则 resultTrue;如果不匹配,则 resultFalse。但是如果 stringpattern 中有一个为 Null,则 resultNull

Like 运算符的特性随着 Option Compare 语句而不同。每个模块的缺省字符串比较方法是 Option Compare Binary

在字符串比较中,Option Compare Binary 的结果是根据字符的内部二进制表示法导出的排序顺序得到的。在 Microsoft Windows 中,排序顺序由代码页决定。下例说明通常二进制的排序顺序:

A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ <


Mod 运算符

用来对两个数作除法并且只返回余数。

语法

result = number1 Mod number2

Mod 的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
number1必需的;任何数值表达式。
number2必需的;任何数值表达式。

说明

在进行 Mod 运算或求余数运算时,该运算符将 number1 number2 除(将浮点数字四舍五入成整数),并把余数作为 result 的值返回。例如,在下列表达式中,A (result) 等于 5。

A = 19 Mod 6.7

一般说来,不管 result 是否为一个整数,result 的数据类型为 Byte,Byte 变体、Integer、Integer 变体、Long 或一个包含 Long 的Variant。任何小数部分都被删除。但是,如果任何一个 Null,类型的表达式出现时,result 都将是 Null。任何 Empty 类型表达式都作为 0 处理。


Not 运算符

用来对表达式进行逻辑否定运算。

语法

result = Not expression

Not 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
expression必需的;任何表达式。

说明

下表说明如何确定 result

如果 expressionresult
TrueFalse
FalseTrue
NullNull

此外,Not 运算符改变任何变量的位值,并根据下表设置 result 中相应的位:

如果在 expression 的位为则在 result 中的位为
01
10


Or 运算符

用来对两个表达式进行逻辑析取运算。

语法

result = expression1 Or expression2

Or 运算符的语法具有以下几个部分:

部分描述
result必需的;任何数值变量。
expression1必需的;任何表达式。
expression2必需的;任何表达式。

说明

如果两个表达式中至少有一个为 True,则 result True。下列表格说明如何确定 result

如果 expression1expression2result
TrueTrueTrue
TrueFalseTrue
TrueNullTrue
FalseTrueTrue
FalseFalseFalse
FalseNullNull
NullTrueTrue
NullFalseNull
NullNullNull

Or 运算符也对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为且在 expression2 中的位为result
000
011
101
111


Xor 运算符

用来对两个表达式进行逻辑互斥或运算。

语法

[result =] expression1 Xor expression2

Xor 运算符的语法具有以下几个部分:

部分描述
result可选;任何数值变量。
expression1必需的;任何表达式。
expression2必需的;任何表达式。

说明

如果表达式中有一个而且只有一个值为 True,则 resultTrue。但是,如果表达式中有一个为 Null,则 result 也为 Null。当两个表达式都不为 Null,则根据下表来确定 result

如果 expression1expression2result
TrueTrueFalse
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

Xor 运算符既可作为逻辑运算符,也可作为位运算符。使用互斥或的逻辑进行的两个表达式的逐位比较,其结果通过下表说明:

如果 expression1expression2result
000
011
101
110


AtEndOfLine 属性

描述

只读属性,在 TextStream 文件中,如果文件指针正好在行尾标记的前面,那么该属性值返回 True;否则返回 False

语法

object.AtEndOfLine

object 总是一个 TextStream 对象的名称。

说明

AtEndOfLine 属性仅应用于已打开供读取的 TextStream 文件;否则就会出错。

下面的代码举例说明了 AtEndOfLine 属性的用法:

Dim fs, a, retstring
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("c:/testfile.txt", ForReading, False)
Do While a.AtEndOfLine <> True
    retstring = a.Read(1)
    ...
Loop
a.Close

AtEndOfStream 属性

描述

只读属性,如果文件指针在 TextStream 文件末尾,则该属性值返回 True;否则返回 False

语法

object.AtEndOfStream

object 总是一个 TextStream 对象的名称。

说明

AtEndOfStream 属性仅应用于已打开供读取的 TextStream 文件;否则就会出错。

下面的代码举例说明了 AtEndOfStream 属性的用法:

Dim fs, a, retstring
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("c:/testfile.txt", ForReading, False)
Do While a.AtEndOfStream <> True
    retstring = a.ReadLine
    ...
Loop
a.Close

Attributes 属性

描述

设置或者返回文件或文件夹的属性。读/写或只读,取决于属性。

语法

object.Attributes [= newattributes]

Attributes 属性有下列几个部分:

部分描述
object必需的。总是某个 File 或者 Folder 对象的名字。
newattributes可选的。如果提供的话,newattributes 就是所指定 object 的新属性值。

设置

newattributes 参数可以是具有下列值中的任意一个或任意的逻辑组合:

常数描述
Normal0一般文件。未设置属性。
ReadOnly1只读文件。属性为读/写。
Hidden2隐藏文件。属性为读/写。
System4系统文件。属性为读/写。
Volume8磁盘驱动器卷标。属性为只读。
Directory16文件夹或目录。属性为只读。
Archive32自上次备份后已经改变的文件。属性为读/写。
Alias64链接或快捷方式。属性为只读。
Compressed128压缩文件。属性为只读。

说明

下面的代码用一个文件举例说明了 Attributes 属性的用法:

Sub SetClearArchiveBit(filespec)
    Dim fs, f, r
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(fs.GetFileName(filespec))
    If f.attributes and 32 Then
        r = MsgBox("The Archive bit is set, do you want to clear it?", vbYesNo, "Set/Clear Archive Bit")
        If r = vbYes Then 
            f.attributes = f.attributes - 32
            MsgBox "Archive bit is cleared."
        Else
            MsgBox "Archive bit remains set."
        End If
    Else
        r = MsgBox("The Archive bit is not set. Do you want to set it?", vbYesNo, "Set/Clear Archive Bit")
        If r = vbYes Then 
            f.attributes = f.attributes + 32
            MsgBox "Archive bit is set."
        Else
            MsgBox "Archive bit remains clear."
        End If
    End If
End Sub

AvailableSpace 属性

描述

返回在指定的驱动器或网络共享上的用户可用空间容量。

语法

object.AvailableSpace

object 总是一个 Drive 对象。

说明

一般来说,AvailableSpace 属性的返回值与 FreeSpace 属性的返回值是相同的。对于支持限额的计算机系统来说,两个值之间可能会有所不同。

下面的代码举例说明了 AvailableSpace 属性的用法:

Sub ShowAvailableSpace(drvPath)
    Dim fs, d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(drvPath))
    s = "Drive " & UCase(drvPath) & " - " 
    s = s & d.VolumeName  & vbCrLf
    s = s & "Available Space: " & FormatNumber(d.AvailableSpace/1024, 0) 
    s = s & " Kbytes"
    MsgBox s
End Sub

Calendar 属性

返回或设置一个值,指出工程中所使用日历的类型。

可以为 Calendar使用下列设置之一:

设置描述
vbCalGreg0使用Gregorian 日历(缺省)。
vbCalHijri1使用Hijri 日历。

说明

可以程序化地只设置Calendar 属性。例如,要使用Hijri 日历,使用:

Calendar = vbCalHijri

Column 属性

描述

只读属性,返回 TextStream 文件中当前字符位置的列号。

语法

object.Column

object 总是一个 TextStream 对象的名称。

说明

在写了一个新行字符后,但在写任何其他字符之前,Column 的值是 1。


CompareMode 属性

描述

设置或返回某个 Dictionary 对象中的比较字符串关键字的比较模式。

语法

object.CompareMode[ = compare]

CompareMode 属性具有下列部分:

部分描述
object必需的。总是一个 Dictionary 对象的名称。
compare可选的。如果提供的话,compare 是一个代表比较模式的值,该比较模式用于象 StrComp 这样的函数。

设置

compare 参数可以具有下列值:

常数描述
VbUseCompareOption–1使用 Option Compare 语句的设置值进行比较。
vbBinaryCompare 0进行二进制比较。
vbTextCompare 1进行文字比较。
vbDatabaseCompare 2仅用于 Microsoft Access。进行基于您自己数据库中信息的比较。

说明

如果试图对已经包含数据的 Dictionary 对象的比较模式进行更改的话,就会出错。

CompareMode 属性所用的参数值与 StrComp 函数所用的 compare 参数相同。可以用大于 2 的值表示使用特定 Locale IDs (LCID) 的比较。


Count 属性

返回 Long(长整数),包含集合中的对象数目。只读。

Count 属性

描述

返回集合或 Dictionary 对象中的条目数。只读。

语法

object.Count

object 总是“应用于”列表中某一项的名称。

说明

下面的代码举例说明了 Count 属性的使用方法:

Dim a, d, i             '创建一些变量
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"     '添加一些关键字和条目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
a = d.Keys              '获得关键字
For i = 0 To d.Count -1 '遍及数组
    Print a(i)          '打印关键字
Next
...

DateCreated 属性

描述

返回指定文件或文件夹的创建日期和时间。只读。

语法

object.DateCreated

object 总是一个 fileFolder对象。

说明

下面的代码用一个文件举例说明了 DateCreated 属性的用法:

Sub ShowFileInfo(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = "Created: " & f.DateCreated
    MsgBox s
End Sub

DateLastAccessed 属性

描述

返回最后一次访问指定文件或文件夹的日期和时间。只读。

语法

object.DateLastAccessed

object 总是一个 fileFolder 对象。

说明

下面的代码用一个文件举例说明了 DateLastAccessed 属性的用法:

Sub ShowFileAccessInfo(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = UCase(filespec) & vbCrLf
    s = s & "Created: " & f.DateCreated & vbCrLf
    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified  
    MsgBox s, 0, "File Access Info"
End Sub

重点   这种方法由其下一级操作系统决定其行为。如果操作系统不支持提供时间信息,则没有返回信息。


DateLastModified 属性

描述

返回最后一次修改指定文件或文件夹的日期和时间。只读。

语法

object.DateLastModified

object 总是一个 fileFolder 对象。

说明

下面的代码用一个文件举例说明了 DateLastModified 属性的用法:

Sub ShowFileAccessInfo(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = UCase(filespec) & vbCrLf
    s = s & "Created: " & f.DateCreated & vbCrLf
    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified  
    MsgBox s, 0, "File Access Info"
End Sub

Description 属性

返回或设置一个字符串表达式,包含与对象相关联的描述性字符串。可读/可写。

对于 Err 对象,返回或设置与错误相关联的描述性字符串。

说明

Description 属性设置对错误进行简短描述。当无法处理或不想处理错误的时候,可以使用这个属性提醒用户。在生成用户自定义的错误时,将有关此错误的一个简短陈述指定给 Description 属性。如果 Description 未填入数据,而且 Number 的值与 Visual Basic 运行时错误一致,那么在生成错误时,将 Error 函数返回的字符串放置在 Description 中。


Drive 属性

描述

返回指定文件或文件夹所在的驱动器符号。只读。

语法

object.Drive

object 总是一个 FileFolder 对象。

说明

下面的代码举例说明了 Drive 属性的用法:

Sub ShowFileAccessInfo(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = f.Name & " on Drive " & UCase(f.Drive) & vbCrLf
    s = s & "Created: " & f.DateCreated & vbCrLf
    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified  
    MsgBox s, 0, "File Access Info"
End Sub

DriveLetter 属性

描述

返回某个物理本地驱动器或网络共享的驱动器字母。只读。

语法

object.DriveLetter

object 总是一个 Drive 对象。

说明

如果指定的驱动器没有同某个驱动器字母关联起来,例如,未被映射到一个驱动器字母的网络共享,则 DriveLetter 属性返回一个 0 字节长度的字符串 ("")。

下面的代码举例说明了 DriveLetter 属性的用法:

Sub ShowDriveLetter(drvPath)
    Dim fs, d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(drvPath))
    s = "Drive " & d.DriveLetter & ": - " 
    s = s & d.VolumeName  & vbCrLf
    s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0) 
    s = s & " Kbytes"
    MsgBox s
End Sub

Drives 属性

描述

返回包含本地机器上所有可用 Drive 对象的 Drives 集合。

语法

object.Drives

object 总是一个 FileSystemObject

说明

对于可删除媒体驱动器来说,不需要插入媒体,就可使其出现在 Drives 集合中。

可以用 For Each...Next 结构遍及 Drives 集合中的成员,如下面的代码所示:

Sub ShowDriveList
    Dim fs, d, dc, s, n
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set dc = fs.Drives
    For Each d in dc
        s = s & d.DriveLetter & " - " 
        If d.DriveType = 3 Then
            n = d.ShareName
        Else
            n = d.VolumeName
        End If
        s = s & n & vbCrLf
    Next
    MsgBox s
End Sub

DriveType 属性

描述

返回一个值,表示指定驱动器的类型。

语法

object.DriveType

object 总是一个 Drive 对象。

说明

下面的代码举例说明了 DriveType 属性的用法:

Sub ShowDriveType(drvpath)
    Dim fs, d, s, t
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(drvpath)
    Select Case d.DriveType
        Case 0: t = "Unknown"
        Case 1: t = "Removable"
        Case 2: t = "Fixed"
        Case 3: t = "Network"
        Case 4: t = "CD-ROM"
        Case 5: t = "RAM Disk"
    End Select
    s = "Drive " & d.DriveLetter & ": - " & t
    MsgBox s
End Sub

Files 属性

描述

返回由所有 File 对象组成的 Files 集合,这些 File 对象包含在指定的文件夹中──包括设置了隐藏和系统文件属性的那些文件。

语法

object.Files

object 总是一个 Folder 对象。

说明

下面的代码举例说明了 Files 属性的用法:

Sub ShowFileList(folderspec)
    Dim fs, f, f1, fc, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    Set fc = f.Files
    For Each f1 in fc
        s = s & f1.name 
        s = s &  vbCrLf
    Next
    MsgBox s
End Sub

FileSystem 属性

描述

返回指定驱动器所使用的文件系统类型。

语法

object.FileSystem

object 总是一个 Drive 对象。

说明

可以得到的返回类型包括 FAT、NTFS、以及 CDFS。

下面的代码举例说明了 FileSystem 属性的用法:

Sub ShowFileSystemType
    Dim fs,d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive("e:")
    s = d.FileSystem
    MsgBox s
End Sub

FreeSpace 属性

描述

返回指定驱动器上或网络共享的用户可用磁盘剩余空间容量。只读。

语法

object.FreeSpace

object 总是一个 Drive 对象。

说明

一般来说,FreeSpace 属性的返回值和 AvailableSpace 属性的返回值是相同的。对于支持限额的计算机系统来说,二者之间可能有所不同。

下面的代码举例说明了 FreeSpace 属性的用法:

Sub ShowFreeSpace(drvPath)
    Dim fs, d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(drvPath))
    s = "Drive " & UCase(drvPath) & " - " 
    s = s & d.VolumeName  & vbCrLf
    s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0) 
    s = s & " Kbytes"
    MsgBox s
End Sub

HelpContext 属性

返回或设置一个字符串表达式,包含 Microsoft Windows 帮助文件中的主题的上下文 ID。可读 / 可写。

说明

HelpContext 属性被用来自动显示 HelpFile 属性中指定的帮助主题。如果 HelpFile HelpContext 都是空的,则检查 Number 的值。如果 Number 的值与 Visual Basic 运行时错误一致,则对此错误使用 Visual Basic 帮助上下文 ID。如果 Number 的值与 Visual Basic 错误不一致,则在屏幕上显示 Visual Basic 帮助文件的内容。

注意 应该在应用程序中写入一些例程来处理常见错误。当使用对象编程时,可以用该对象的帮助文件来提高处理错误的质量,而如果错误无法补救,则要为用户显示一段有意义的消息。


HelpFile 属性

返回或设置一个字符串表达式,表示帮助文件的完整限定路径。可读/可写。

说明

如果 HelpFile 中指定了帮助文件,则当用户在错误消息对话框中按下 Help 按钮(或))时,帮助文件被自动调用。如果 HelpContext 属性包含被指定文件的有效的上下文 ID,则自动显示那一主题。如果未指定 HelpFile,则显示 Visual Basic 帮助文件。

注意 应该在应用程序中写入一些例程来处理常见错误。当使用对象编程时,可以用该对象的帮助文件来提高处理错误的质量,而如果错误无法补救,则要为用户显示一段有意义的消息。


IsReady 属性

描述

如果指定的驱动器已准备好,返回 True;否则返回 False

语法

object.IsReady

object 总是一个 Drive 对象。

说明

对于可删除媒体驱动器和 CD-ROM 驱动器来说,仅当插入了适当的媒体,并已准备好供访问时,IsReady 才返回 True

下面的代码举例说明了 IsReady 属性的用法:

Sub ShowDriveInfo(drvpath)
    Dim fs, d, s, t
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(drvpath)
    Select Case d.DriveType
        Case 0: t = "Unknown"
        Case 1: t = "Removable"
        Case 2: t = "Fixed"
        Case 3: t = "Network"
        Case 4: t = "CD-ROM"
        Case 5: t = "RAM Disk"
    End Select
    s = "Drive " & d.DriveLetter & ": - " & t
    If d.IsReady Then 
        s = s & vbCrLf & "Drive is Ready."
    Else
        s = s & vbCrLf & "Drive is not Ready."
    End If
    MsgBox s
End Sub

IsRootFolder 属性

描述

如果指定的文件夹是根文件夹,则返回 True;否则返回 False

语法

object.IsRootFolder

object 总是一个 Folder 对象。

说明

下面的代码举例说明了 IsRootFolder 属性的用法:

Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
Sub DisplayLevelDepth(pathspec)
    Dim f, n
    Set f = fs.GetFolder(pathspec)
    If f.IsRootFolder Then
        MsgBox "The specified folder is the root folder."
    Else
        Do Until f.IsRootFolder
            Set f = f.ParentFolder
            n = n + 1
        Loop
        MsgBox "The specified folder is nested " & n & " levels deep."
    End If
End Sub

Item 属性

描述

Dictionary 对象中指定的 Key,设置或返回一个 Item 。对于集合来说,基于指定的 Key ,返回一个 Item 。读/写属性。

语法

object.Item(key) [= newitem]

Item 属性具有下列部分:

部分描述
object必需的。总是一个集合或 Dictionary 对象的名称。
key必需的。与被检索或添加的条目相关联的 Key
newitem可选的。仅用于 Dictionary 对象;没有用于集合的应用程序。如果提供的话,newitem 是与指定的 Key 相关联的新值。

说明

如果在改变某个 item 时,没有找到 key,则用指定的newitem创建一个新的 key 。如果在试图返回某个已存在条目时,没有找到 key,则创建一个新 key,且其相应的条目为空。


Key 属性

描述

在一个 Dictionary 对象中设置一个 key

语法

object.Key(key) = newkey

Key 属性具有下列部分:

部分描述
object必需的。总是一个 Dictionary 对象的名字。
key必需的。被更改的 Key值。
newkey必需的。替换指定 key 的新值。

说明

如果在更改某个 key 时,没有找到 key,则会出现运行时错误。


LastDLLError 属性

返回因调用动态链接库 (DLL) 而产生的系统错误号。只读。

说明

LastDLLError 属性只适用于由 Visual Basic 代码进行的 DLL 调用。在调用时,被调用的函数通常返回一个表明成功还是失败的代码,同时对 LastDLLError 属性填充数据。请检查 DLL 函数的文档,确定返回值,表明是成功还是失败。只要返回失败代码,Visual Basic 的应用程序就应立即检查 LastDLLError 属性。在设置 LastDLLError 属性时不会有任何例外。


Line 属性

描述

只读属性,返回一个 TextStream 文件中的当前行号。

语法

object.Line

object 总是一个 TextStream 对象的名字。

说明

文件初次打开后,在写任何东西之前,Line 的值为 1。


Name 属性

描述

设置或返回指定文件或文件夹名。读/写属性。

语法

object.Name [= newname]

Name 属性有下列几部分:

部分描述
object必需的。总是某个 FileFolder 对象的名字。
newname可选的。如果提供的话,newname 是指定的 object 的新名。

说明

下面的代码举例说明了 Name 属性的用法:

Sub ShowFileAccessInfo(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = f.Name & " on Drive " & UCase(f.Drive) & vbCrLf
    s = s & "Created: " & f.DateCreated & vbCrLf
    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified  
    MsgBox s, 0, "File Access Info"
End Sub

Number 属性

返回或设置表示错误的数值。Number Err 对象的缺省属性。可读/可写。

说明

从对象返回用户自定义的错误时,把被选作错误代码的数与 vbObjectError 常数相加,并由此设置 Err.Number。例如,用下列代码返回作为错误代码的数字 1051:

Err.Raise Number := vbObjectError + 1051, Source:= SomeClass

ParentFolder 属性

描述

返回指定文件或文件夹的父文件夹对象。只读。

语法

object.ParentFolder

object 总是一个 FileFolder 对象。

说明

下面的代码用一个文件举例说明了 ParentFolder 属性的用法:

Sub ShowFileAccessInfo(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & vbCrLf
    s = s & "Created: " & f.DateCreated & vbCrLf
    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified  
    MsgBox s, 0, "File Access Info"
End Sub

Path 属性

描述

返回指定文件、文件夹、或驱动器的路径。

语法

object.Path

object 总是一个 FileFolder、Drive 对象。

说明

对于驱动器字母来说,不包括根驱动器。例如,C 驱动器的路径是 C:,而不是 C:/。

下面的代码用一个 File 对象举例说明了 Path 属性的用法:

Sub ShowFileAccessInfo(filespec)
    Dim fs, d, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = UCase(f.Path) & vbCrLf
    s = s & "Created: " & f.DateCreated & vbCrLf
    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified  
    MsgBox s, 0, "File Access Info"
End Sub

RootFolder 属性

描述

返回一个 Folder 对象,该对象表示一个指定驱动器的根文件夹。只读属性。

语法

object.RootFolder

object 总是一个 Drive 对象。

说明

驱动器上所包含的所有文件和文件夹都可以使用返回的 Folder 对象进行访问。


SerialNumber 属性

描述

返回用于唯一标识磁盘卷标的十进制序列号。

语法

object.SerialNumber

object 总是一个 Drive 对象。

说明

可以使用 SerialNumber 属性确保正确的磁盘已插入到某个带有可删除媒体的驱动器中。

下面的代码举例说明了 SerialNumber 属性的用法:

Sub ShowDriveInfo(drvpath)
    Dim fs, d, s, t
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
    Select Case d.DriveType
        Case 0: t = "Unknown"
        Case 1: t = "Removable"
        Case 2: t = "Fixed"
        Case 3: t = "Network"
        Case 4: t = "CD-ROM"
        Case 5: t = "RAM Disk"
    End Select
    s = "Drive " & d.DriveLetter & ": - " & t
    s = s & vbCrLf & "SN: " & d.SerialNumber
    MsgBox s
End Sub

ShareName 属性

描述

返回指定驱动器的网络共享名。

语法

object.ShareName

object 总是一个 Drive 对象。

说明

如果 object 不是一个网络驱动器,则 ShareName 属性返回一个 0 字节长度的字符串 ("")。

下面的代码举例说明了 ShareName 属性的用法:

Sub ShowDriveInfo(drvpath)
    Dim fs, d, s 
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
    s = "Drive " & d.DriveLetter & ": - " & d.ShareName
    MsgBox s
End Sub

ShortName 属性

描述

返回需要较早的 8.3 命名约定的程序所使用的短名字。

语法

object.ShortName

object 总是一个 FileFolder 对象。

说明

下面的代码用一个 File 对象举例说明了 ShortName 属性的用法:

Sub ShowShortName(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = "The short name for " & "" & UCase(f.Name)
    s = s & "" & vbCrLf
    s = s & "is: " & "" & f.ShortName & ""
    MsgBox s, 0, "Short Name Info"
End Sub

ShortPath 属性

描述

返回需要较早的 8.3 文件命名约定的程序所使用的短路径。

语法

object.ShortPath

object 总是一个 FileFolder 对象。

说明

下面的代码用一个 File 对象举例说明了 ShortName 属性的用法:

Sub ShowShortPath(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = "The short path for " & "" & UCase(f.Name)
    s = s & "" & vbCrLf
    s = s & "is: " & "" & f.ShortPath & ""
    MsgBox s, 0, "Short Path Info"
End Sub

Size 属性

描述

对于文件来说,返回以字节为单位的指定文件大小。对于文件夹来说,返回以字节为单位的包含在文件夹中所有文件和子文件夹的大小。

语法

object.Size

object 总是一个 FileFolder 对象。

说明

下面的代码用一个 Folder 对象举例说明了 Size 属性的用法:

Sub ShowFolderSize(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(filespec)
    s = UCase(f.Name) & " uses " & f.size & " bytes."
    MsgBox s, 0, "Folder Size Info"
End Sub

Source 属性

返回或设置一个字符串表达式,指明最初生成错误的对象或应用程序的名称。可读 / 可写。

说明

Source 属性是字符串表达式,指定生成错误的对象;此表达式通常是这个对象的类名或程序设计的 ID。在程序代码无法处理被访问对象产生的错误时,请使用 Source 提供消息。例如,如果访问 Microsoft Excel 时生成了一个“除以零”的错误,则 Microsoft Excel 将 Err.Number 设置成代表此错误的错误代码,并将 Source 设置成 Excel.Application。

在错误生成时,Source 就是应用程序的程序设计 ID。对于类模块,Source 应该包含一个具有 project.class 窗体的名称。当代码中出现不可预料的错误时,Source 属性会自动填上数据。对于标准模块中的错误,Source 含有工程名称。对于类模块中的错误,Source 包含具有 project.class 窗体的名称。


SubFolders 属性

描述

返回包含所有文件夹的一个 Folders 集合,这些文件夹包含在某个特定的文件夹中,包括设置了隐藏和系统文件属性的那些文件夹。

语法

object.SubFolders

object 总是一个 Folder 对象。

说明

下面的代码举例说明了 SubFolders 属性的用法:

Sub ShowFolderList(folderspec)
    Dim fs, f, f1, s, sf
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    Set sf = f.SubFolders
    For Each f1 in sf
        s = s & f1.name 
        s = s &  vbCrLf
    Next
    MsgBox s
End Sub

TotalSize 属性

描述

以字节为单位,返回驱动器或网络共享的总空间大小。

语法

object.TotalSize

object 总是一个 Drive 对象。

说明

下面的代码举例说明了 TotalSize 属性的用法:

Sub ShowSpaceInfo(drvpath)
    Dim fs, d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
    s = "Drive " & d.DriveLetter & ":"
    s = s & vbCrLf
    s = s & "Total Size: " & FormatNumber(d.TotalSize/1024, 0) & " Kbytes"
    s = s & vbCrLf
    s = s & "Available: " & FormatNumber(d.AvailableSpace/1024, 0) & " Kbytes"
    MsgBox s
End Sub

Type 属性

描述

返回关于某个文件或文件夹类型的信息。例如,对于以.TXT 结尾的文件来说,返回 "Text Document"。

语法

object.Type

object 总是一个 FileFolder 对象。

说明

下面的代码举例说明了返回某个文件夹类型的 Type 属性的用法。在这个示例中,试图将 Recycle Bin 的路径或其他唯一的文件夹提供给过程。

Sub ShowFileSize(filespec)
    Dim fs, f, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(filespec)
    s = UCase(f.Name) & " is a " & f.Type 
    MsgBox s, 0, "File Size Info"
End Sub

VolumeName 属性

描述

设置或返回指定驱动器的卷标名。读/写属性。

语法

object.VolumeName [= newname]

VolumeName 属性有下列几部分:

部分描述
object必需的。总是一个 Drive 对象的名字。
newname可选的。如果提供的话,newname 是指定 object 的新名字。

说明

下面的代码举例说明了 VolumeName 属性的用法:

Sub ShowVolumeInfo(drvpath)
    Dim fs, d, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
    s = "Drive " & d.DriveLetter & ": - " & d.VolumeName
    MsgBox s
End Sub

AppActivate 语句

激活一应用程序窗口。

语法

AppActivate title[, wait]

AppActivate 语句的语法具有以下几个命名参数:

部分描述
title必需的。字符串表达式,所要激活的应用程序窗口的标题。可以使用 Shell 函数返回的任务识别码来替换 title,以激活应用程序。
wait可选的。Boolean值,说明在激活另一个应用程序之前调用的应用程序是否有焦点。如果为 False(缺省),那么,即使调用的应用程序没有焦点,也直接激活指定的应用程序。如果为 True,则调用的应用程序会等到有焦点后,才激活指定的应用程序。

说明

AppActivate 语句将焦点移动到命名的应用程序或窗口,但并不影响焦点是否最大化或最小化。当用户采取行动改变焦点或将窗口关闭时,就会将焦点从活动的应用程序窗口移动出去。可用 Shell 函数启动一个应用程序并设置窗口样式。

在决定激活哪个应用程序时,请将 title 与每一个运行中的应用程序的标题字符串进行比较。如果没有完全匹配,就激活任何这样的应用程序,其标题字符串以 title 开头。如果以 title 命名的应用程序有很多实例,则激活任何一个实例。


Beep 语句

通过计算机喇叭发出一个声调。

语法

Beep

说明

呼叫的频率与时间长短取决于硬件和系统软件,并随电脑不同而不同。.


Call 语句

将控制权转移到一个 Sub 过程,Function 过程,或动态连接库 (DLL)过程。

语法

[Call] name [argumentlist]

Call 语句的语法具有以下几个部分:

部分描述
Call可选参数;关键字。如果指定了这个关键字,则 argumentlist 必须加上括号,例如:
 Call MyProc(0)
name必要参数,要调用的过程名称。
argumentlist 

说明

调用一个过程时,并不一定要使用 Call 关键字。如果使用 Call 关键字来调用一个需要参数的过程,argumentlist 就必须要加上括号。如果省略了 Call 关键字,那么也必须要省略 argumentlis 外面的括号。如果使用 Call 语法来调用内建函数或用户定义函数,则函数的返回值将被丢弃。

若要将整个数组传给一个过程,使用数组名,然后在数组名后加上空括号。


ChDir 语句

改变当前的目录或文件夹。

语法

ChDir path

必要的 path 参数是一个字符串表达式,它指明哪个目录或文件夹将成为新的缺省目录或文件夹。path 可能会包含驱动器。如果没有指定驱动器,则 ChDir 在当前的驱动器上改变缺省目录或文件夹。

说明

ChDir 语句改变缺省目录位置,但不会改变缺省驱动器位置。例如,如果缺省的驱动器是 C,则下面的语句将会改变驱动器 D 上的缺省目录,但是 C 仍然是缺省的驱动器:

ChDir "D:/TMP"   

ChDrive 语句

改变当前的驱动器。

语法

ChDrive drive

必要的 drive 参数是一个字符串表达式,它指定一个存在的驱动器。如果使用零长度的字符串 (""),则当前的驱动器将不会改变。如果 drive 参数中有多个字符,则 ChDrive 只会使用首字母。


Close 语句

关闭 Open 语句所打开的输入/输出 (I/O) 文件。

语法

Close [filenumberlist]

可选的 filenumberlist参数为一个或多个文件号,其中 filenumber 为任何有效的文件号,语法如下:

[[#]filenumber] [, [#]filenumber] . . .

说明

若省略 filenumberlist,则将关闭 Open 语句打开的所有活动文件。

当关闭 OutputAppend 打开的文件时,将属于此文件的最终输出缓冲区写入操作系统缓冲区。所有与该文件相关联的缓冲区空间都被释放。

在执行 Close 语句时,文件与其文件号之间的关联将终结。


Const 语句

声明用于代替文字量的常数。

语法

[Public | Private] Const constname [As type] = expression

Const 语句的语法包含下面部分:

部分描述
Public可选的。该关键字用于在模块级别中声明在所有模块中对所有过程都可以使用的常数。在过程中不能使用。
Private可选的。该关键字用于在模块级声明只能在包含该声明的模块中使用的常数。不能在过程中使用。
constname必需的。常数的名称;遵循标准的变量命名约定。
type可选的。常数的数据类型;可以是Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String 或 Variant。所声明的每个变量都要使用一个单独的 As 类型子句。
expression必需的。文字,其它常数,或由除 Is 之外的任意的算术操作符和逻辑操作符所构成的任意组合。

说明

在缺省情况下常数是私有的。过程中的常数总是私有的;它们的可见性无法改变。在标准模块中,可以用 Public 关键字来改变模块级常数可见性的缺省值。不过,在类模块中,常数只能是私有的,而且用 Public 关键字也不能改变其可见性。

为了在一行中声明若干个常数,可以使用逗号将每个常数赋值分开。用这种方法声明常数时,如果使用了 PublicPrivate 关键字,则该关键字对该行中所有常数都有效。

在给常量赋值的表达式中,不能使用变量,用户自定义的函数,或 Visual Basic 的内部函数(如 Chr)。

注意 常数可以使程序更具可读性,以及易于修改。在程序运行时,常数不会象变量那样无意中被改变。

如果在声明常数时没有显式地使用 As type 子句,则该常数的数据类型是最适合其表达式的数据类型。

Sub、Function Property 过程中声明的常数都是该过程的局部常数。在过程外声明的常数,在包含该声明的模块中被定义。在可以使用表达式的地方,都可以使用常数。


Date 语句

设置当前系统日期。

语法

Date = date

对于运行 Microsoft Windows 95 的系统,要设置的 date 必须介于 1980 年 1月 1 日与 2099 年 12 月 31 日之间。对于运行 Microsoft Windows NT 的系统,date 必须介于公元 1980 年 1 月 1 日到 2079 年 12 月 31 日之间。


Declare 语句

用于在模块级别中声明对动态链接库 (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 语句的语法包含下面部分:

部分描述
Public可选的。用于声明对所有模块中的所有其它过程都可以使用的过程。
Private可选的。用于声明只能在包含该声明的模块中使用的过程。
Sub可选的(但 SubFunction 二者需选其一)。表示该过程没有返回值。
Function可选的(但 SubFunction 二者需选其一)。表示该过程会返回一个可用于表达式的值。
name必需的。任何合法的过程名。注意动态链接库的入口处(entry points)区分大小写。
Lib必需的。指明包含所声明过程的动态链接库或代码资源。所有声明都需要 Lib 子句。
libname必需的。包含所声明的过程动态链接库名或代码资源名。
Alias可选的。表示将被调用的过程在动态链接库 (DLL) 中还有另外的名称。当外部过程名与某个关键字重名时,就可以使用这个参数。当动态链接库的过程与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用 Alias。如果该动态链接库过程中的某个字符不符合动态链接库的命名约定时,也可以使用 Alias
aliasname可选的。动态链接库或代码资源中的过程名。如果首字符不是数字符号 (#),则 aliasname 是动态链接库中该过程的入口处的名称。如果首字符是 (#),则随后的字符必须指定该过程的入口处的顺序号。
arglist可选的。代表调用该过程时需要传递的参数的变量表。
type可选的。Function 过程返回值的数据类型;可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)或 Variant,用户定义类型,或对象类型。

arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]

部分描述
Optional可选的。表示参数不是必需的。如果使用该选项,则 arglist 中的后续参数都必需是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional
ByVal可选的。表示该参数按值传递。
ByRef表示该参数按地址传递。 ByRef 是 Visual Basic 的缺省选项。
ParamArray可选的。只用于 arglist 的最后一个参数,表示最后的参数是一个 Variant 元素的 Optional 的数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal、ByRefOptional 一起使用。
varname必需的。代表传给该过程的参数的变量名;遵循标准的变量命名约定。
( )对数组变量是必需的。指明 varname 是一个数组。
type可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object、Variant、用户自定义的类型或对象类型。

说明

Function 过程而言,过程的数据类型决定其返回值的数据类型。可以在 arglist 之后使用 As 子句来指定函数返回值的数据类型。在 arglist 中,可以使用 As 子句来指定任何传给该过程的参数的数据类型。不单可以指定为任何标准数据类型,还可以在 arglist 中指定 As Any 来禁止类型检查,从而允许将任意数据类型传递给该过程。

空圆括号表示该 Sub Function 过程没有参数,且 Visual Basic 应确保不会传递任何参数。在下面的示例中,First 不带任何参数。如果对 First 的调用中使用了参数,就会产生错误:

Declare Sub First Lib "MyLib" ()

如果带参数表,则每次调用该过程时都要检查参数的个数和类型。在下面的示例中,First 有一个 Long 参数:

Declare Sub First Lib "MyLib" (X As Long)

注意Declare 语句的参数表中不能有定长的字符串;只有变长的字符串才能传给过程。定长的字符串可以作为过程参数使用,但在传递前都要被转换为变长的字符串。

注意 当所调用的外部过程需要一个值为 0 的字符串时,就要使用 vbNullString 常数。该常数与零长度字符串 ("") 是不相同的。


Deftype 语句

在模块级别上,为变量和传给过程的参数,设置缺省数据类型,以及为其名称以指定的字符开头的 FunctionProperty 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]

letter1letter2 参数指定设置缺省数据类型的名称范围。每个参数都是指变量,参数和 Function 过程,或 Property Get 过程名称的首字母,且参数可以是字母表中的任意字母。letterrange 中不区分字母的大小写。

说明

语句的名字就确定相应的数据类型:

语句数据类型
DefBool布尔
DefByteByte
DefIntInteger
DefLngLong
DefCurCurrency
DefSngSingle
DefDblDouble
DefDecDecimal(目前尚不支持)
DefDateDate
DefStrString
DefObjObject
DefVarVariant

 


例如,在下面的程序段中,Message 就是一个字符串变量:

DefStr A-Q
. . .
Message = "Out of stack space."

Deftype 语句只在使用该语句的模块中有效。例如,一个模块中的 DefInt 语句只对在该模块中声明的变量和传给过程的参数的缺省数据类型,以及 FunctionProperty Get 过程的返回值的类型有效;而其它模块中的变量、参数、以及返回值的缺省数据类型就不受影响。如果不用 Deftype 语句显式地声明,则所有变量、参数、Function 过程、以及 Property Get 过程的缺省数据类型都是 Variant

当指定字符范围时,通常为以字符集的前 128 个字符中的字符开始的变量定义数据类型。不过,如果指定的字符范围是A-Z,则将所有的变量,包括以字符集的扩展部分(128-255) 中的国际字符开始的变量的缺省类型都设为指定的类型。

在指定了A-Z 范围之后,就不能再使用 Deftype 语句来重新定义任何子范围的变量了。在指定一个范围后,如果另一个 Deftype 语句定义的范围中含有前面已定义的字符,就会产生错误。不过,不管变量是否已定义,都可以使用带 As type 子句的 Dim 语句来显式指定其数据类型。例如,可以在模块级使用如下代码将一个缺省数据类型为 Integer 的变量定义为 Double

DefInt A-Z
Dim TaxRate As Double

Deftype 语句对用户定义类型中的元素无影响,因为这些元素必须显式声明。


DeleteSetting 语句

在 Windows 注册表中,从应用程序项目里删除区域或注册表项设置。

语法

DeleteSetting appname, section[, key]

DeleteSetting 语句的语法具有下列命名参数:

部分描述
appname必需的。字符串表达式,包含应用程序或工程的名称,区域或注册表项用于这些应用程序或工程。
section必要。字符串表达式,包含要删除注册表项设置的区域名称。如果只有 appname section,则将指定的区域连同所有有关的注册表项设置都删除。
key可选。字符串表达式,包含要删除的注册表项设置。

说明

如果提供了所有参数,则删除指定的注册表项设置。如果试图使用不存在的区域或注册表项设置上的 DeleteSetting 语句,则发生一个运行时错误。


Dim 语句

声明变量并分配存储空间。

语法

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .

Dim 语句的语法包含下面部分:

部分描述
WithEvents可选的。关键字,说明 varname 是一个用来响应由 ActiveX 对象触发的事件的对象变量。只有在类模块中才是合法的。使用 WithEvents,可以声明任意个所需的单变量,但不能使用 WithEvents 创建数组。NewWithEvents 不能一起使用。
varname必需的。变量的名称;遵循标准的变量命名约定。
subscripts可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:
 [lower To] upper [, [lower To] upper] . . .
 如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有使用 Option Base 语句,则下界为 0。
New可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。
type可选的。变量的数据类型;可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length (对定长的字符串)、Object、Variant、用户定义类型、或对象类型。所声明的每个变量都要一个单独的 As type 子句。

说明

在模块级别中用 Dim 声明的变量,对该模块中的所有过程都是可用的。在过程级别中声明的变量,只在过程内是可用的。

可以使用 Dim 语句在模块级或过程级中声明变量的数据类型。例如,下面的语句声明了 Integer 类型的变量。

Dim NumberOfEmployees As Integer

也可以使用 Dim 语句来声明变量的对象类型。下面的语句为工作表的新建实例声明了一个变量。

Dim X As New Worksheet

如果定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将该引用对象的变量赋值为一个已有对象。在该变量被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任一个对象实例。

也可以使用带空圆括号的 Dim 语句来定义动态数组。在定义动态数组后,可以在过程内使用 ReDim 语句来定义该数组的维数和元素。如果试图在 PrivatePublicDim 语句中重新定义一个已显式定义了大小的数组的维数时,就会发生错误。

如果不指定数据类型或对象类型,且在模块中没有 Deftype 语句,则该变量按缺省设置是 Variant 类型。

当初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。

注意 当在过程中使用 Dim 语句时,通常将 Dim 语句放在过程的开始处。


Do...Loop 语句

当条件为 True 时,或直到条件变为 True 时,重复执行一个语句块中的命令。

语法

Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]

Loop

或者可以使用下面这种语法:

Do
[statements]
[Exit Do]
[statements]

Loop [{While | Until} condition]

Do Loop 语句的语法具有以下几个部分:

部分描述
condition可选参数。数值表达式或字符串表达式,其值为 TrueFalse。如果 condition 是 Null,则 condition 会被当作 False
statements一条或多条命令,它们将被重复当或直到 condition True

说明

Do…Loop 中可以在任何位置放置任意个数的 Exit Do 语句,随时跳出Do...Loop 循环。Exit Do 通常用于条件判断之后,例如If Then,在这种情况下,Exit Do 语句将控制权转移到紧接在 Loop 命令之后的语句。

如果 Exit Do 使用在嵌套的Do…Loop 语句中,则 Exit Do 会将控制权转移到 Exit Do 所在位置的外层循环。


End 语句

结束一个过程或块。

语法

End

End Function

End If

End Property

End Select

End Sub

End Type

End With

End 语句的语法有以下几种形式:

语句描述
End停止执行。不是必要的,可以放在过程中的任何位置关闭代码执行、关闭以 Open 语句打开的文件并清除变量。
End Function必要的,用于结束一个 Function 语句。
End If必要的,用于结束一个If…Then…Else 语句块。
End Property必要的,用于结束一个Property LetProperty Get、或 Property Set 过程。
End Select必要的,用于结束一个 Select Case 语句。
End Sub必要的,用于结束一个 Sub 语句。
End Type必要的,用于结束一个用户定义类型的定义(Type 语句)。
End With必要的,用于结束一个 With 语句。

说明

在执行时,End 语句会重置所有模块级别变量和所有模块的静态局部变量。若要保留这些变量的值,改为使用 Stop 语句,则可以在保留这些变量值的基础上恢复执行。

注意   End 语句不调用 Unload、QueryUnload、或 Terminate 事件或任何其它 Visual Basic 代码,只是生硬地终止代码执行。窗体和类模块中的 Unload、QueryUnload、和 Terminate 事件代码未被执行。类模块创建的对象被破坏,由 Open 语句打开的文件被关闭,并且释放程序所占用的内存。其它程序的对象引用无效。

End 语句提供了一种强迫中止程序的方法。Visual Basic 程序正常结束应该卸载所有的窗体。只要没有其它程序引用该程序公共类模块创建的对象并无代码执行,程序将立即关闭。


Enum 语句

定义枚举类型。

语法

 [Public | Private] Enum name

membername [= constantexpression]

membername [= constantexpression]

. . .

End Enum

Enum 语句包含下面部分:

部分描述
Public可选的。表示该 Enum 类型在整个工程中都是可见的。Enum 类型的缺省情况是 Public
Private可选的。表示该 Enum 类型只在所声明的模块中是可见的。
name必需的。该 Enum 类型的名称。name 必须是一个合法的 Visual Basic 标识符,在定义该 Enum 类型的变量或参数时用该名称来指定类型。
membername必需的。用于指定该 Enum 类型的组成元素名称的合法 Visual Basic 标识符。
constantexpression可选的。元素的值(为 Long 类型)。可以是别的 Enum 类型。如果没有指定 constantexpression,则所赋给的值或者是 0(如果该元素是第一个 membername),或者比其直接前驱的值大 1。

说明

所谓枚举变量,就是指用 Enum 类型定义的变量。变量和参数都可以定义为 Enum 类型。Enum 类型中的元素被初始化为 Enum 语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:

Enum SecurityLevel
   IllegalEntry = -1
   SecurityLevel1 = 0
   SecurityLevel2 = 1
End Enum

Enum 语句只能在模块级别中出现。定义 Enum 类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定 Enum 类型。类模块中的 Public Enum 类型并不是该类的成员;只不过它们也被写入到类型库中。在标准模块中定义的 Enum 类型则不写到类型库中。具有相同名字的 Public Enum 类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类型库中有两个 Enum 类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。

不能在 With 块中使用 Enum 类型作为目标。


Erase 语句

重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。

语法

Erase arraylist

所需的 arraylist 参数是一个或多个用逗号隔开的需要清除的数组变量。

说明

Erase 根据是固定大小(常规的)数组还是动态数组,来采取完全不同的行为。Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:

数组类型Erase 对固定数组元素的影响
固定数值数组将每个元素设为 0。
固定字符串数组(长度可变)将每个元素设为零长度字符串 ("")。
固定字符串数组(长度固定)将每个元素设为 0。
固定 Variant 数组将每个元素设为 Empty。
用户定义类型的数组将每个元素作为单独的变量来设置。
对象数组将每个元素设为特定值 Nothing

Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。


Error 语句

模拟错误的发生。

语法

Error errornumber

必要的 errornumber 可以是任何有效的错误号。

说明

Error 语句获得的支持是向后兼容的。在新的代码中,特别是在建立对象时,要使用 Err 对象的 Raise 方法产生运行时错误。

如果已经定义 errornumber,那么,在 Err 对象的属性被赋予下列值之后,Error 语句会调用错误处理程序:

属性
Number作为参数指定给 Error 语句的值。可以是任何有效的错误号。
Source当前 Visual Basic 工程的名称。
Description字符串表达式,如果这个字符串存在,则表达式将与 Error 函数的返回值一致,该返回值是 Error 函数对指定的 Number 的返回值。如果这个字符串不存在,则 Description 包含一个长度为零的字符串 ("")。
HelpFileVisual Basic 帮助文件的完整限定的驱动器、路径和文件名。
HelpContext对于与 Number 属性一致的错误所指定的 Visual Basic 帮助文件上下文 ID。
LastDLLError零。

如果不存在错误处理程序,或未做任何启动动作,那么就会由 Err 对象属性发布一个错误信息并将错误信息显示出来。

注意 并非全部 Visual Basic 主应用程序都可以建立对象。请参考主机应用程序的文档来判断它能否建立类和对象。


Event 语句

定义用户自定义的事件。

语法

[Public] Event procedurename [(arglist)]

Event 语句包含下面部分:

部分描述
Public可选的。指定该 Event 在整个工程中都是可见的。缺省情况下 Events 类型是 Public。应注意,事件只能在所声明的模块中产生。
procedurename必需的。事件的名称;遵循标准的变量命名约定。

arglist 参数的语法及语法的各个部分如下:

[ByVal | ByRef] varname[( )] [As type]

部分描述
ByVal可选的。表示该参数是按值传递的。
ByRef可选的。表示该参数是按地址传递的。ByRef 是 Visual Basic 的缺省设置。
varname必需的。代表要传递给过程的参数变量的名称;遵循标准的变量命名约定。
type可选的。指传递给过程的参数的数据类型;可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object、Variant、用户定义类型或对象类型。

说明

事件被声明之后,就可以使用 RaiseEvent 语句来产生该事件。如果在标准模块中出现 Event 声明,就会产生语法错误。不能声明带返回值的事件。在下面的代码段中,给出了声明事件和产生事件的典型事件:

'在类模块的模块级中声明一个事件

Event LogonCompleted (UserName as String)

Sub
   RaiseEvent LogonCompleted("AntoineJan")
End Sub

注意 可以象声明过程的参数一样来声明事件的参数,但有以下不同:事件不能有带命名参数、Optional 参数、或者 ParamArray 参数。事件没有返回值。


Exit 语句

退出 Do...LoopFor...NextFunctionSub Property 代码块。

语法

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

Exit 语句的语法有以下几种形式:

语句描述
Exit Do提供一种退出 Do...Loop 循环的方法,并且只能在 Do...Loop 循环中使用。Exit Do 会将控制权转移到 Loop 语句之后的语句。当 Exit Do 用在嵌套的 Do...Loop 循环中时,Exit Do 会将控制权转移到 Exit Do 所在位置的外层循环。
Exit For提供一种退出 For 循环的方法,并且只能在 For...NextFor Each...Next 循环中使用。Exit For 会将控制权转移到 Next 之后的语句。当 Exit For 用在嵌套的 For 循环中时,Exit For 将控制权转移到 Exit For 所在位置的外层循环。
Exit Function立即从包含该语句的 Function 过程中退出。程序会从调用 Function 的语句之后的语句继续执行。
Exit Property立即从包含该语句的 Property 过程中退出。程序会从调用 Property 过程的语句之后的语句继续执行。
Exit Sub立即从包含该语句的 Sub 过程中退出。程序会从调用 Sub 过程的语句之后的语句继续执行。

说明

不要将 Exit 语句与 End 语句搞混了。Exit 并不说明一个结构的终止。


FileCopy 语句

复制一个文件。

语法

FileCopy source, destination

FileCopy 语句的语法含有以下这些命名参数:

部分描述
source必要参数。字符串表达式,用来表示要被复制的文件名。source 可以包含目录或文件夹、以及驱动器。
destination必要参数。字符串表达式,用来指定要复制的目地文件名。destination 可以包含目录或文件夹、以及驱动器。

说明

如果想要对一个已打开的文件使用 FileCopy 语句,则会产生错误。


For Each...Next 语句

针对一个数组或集合中的每个元素,重复执行一组语句。

语法

For Each element In group
[statements]
[Exit For]
[statements]

Next [element]

For...Each...Next 语句的语法具有以下几个部分:

部分描述
element必要参数。用来遍历集合或数组中所有元素的变量。对于集合来说,element 可能是一个 Variant 变量、一个通用对象变量或任何特殊对象变量。对于数组而言,element只能是一个 Variant 变量。
group必要参数。对象集合或数组的名称(用户定义类型的数组除外)。
statements可选参数,针对 group 中的每一项执行的一条或多条语句。

说明

如果集合中至少有一个元素,就会进入 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...Next 语句

以指定次数来重复执行一组语句。

语法

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]

Next [counter]

For…Next 语句的语法具有以下几个部分:

部分描述
counter必要参数。用做循环计数器的数值变量。这个变量不能是布尔或数组元素。
start必要参数。counter 的初值。
End必要参数,counter 的终值。
Step可选参数。counter 的步长。如果没有指定,则 step 的缺省值为 1。
Statements可选参数。放在 For Next 之间的一条或多条语句,它们将被执行指定的次数。

说明

step 参数可以是正数或负数。step 参数值决定循环的执行情况,如下所示:

循环执行,如果
正数或 0counter <= end
负数counter >= end

当所有循环中的语句都执行后,step 的值会加到 counter 中。此时,循环中的语句可能会再次执行(基于循环开始执行时同样的测试),也可能是退出循环并从 Next 语句之后的语句继续执行。

提示 在循环中改变 counter 的值,将会使程序代码的阅读和调试变得更加困难。

循环中可以在任何位置放置任意个 Exit For 语句,随时退出循环。 Exit For经常在条件判断之后使用,例如 If...Then,并将控制权转移到紧接在 Next 之后的语句。

可以将一个 For...Next 循环放置在另一个 For...Next 循环中,组成嵌套循环。不过在每个循环中的 counter 要使用不同的变量名。下面的体系结构是正确的:

For I = 1 To 10
   For J = 1 To 10
      For K = 1 To 10
         ...
      Next K
   Next J
Next I

注意 如果省略 Next 语句中的 counter,就像 counter 存在时一样执行。但如果 Next 语句在它相对应的 For 语句之前出现,则会产生错误。


Function 语句

声明 Function 过程的名称,参数以及构成其主体的代码。

语法

[Public | Private | Friend] [Static] Function name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]

End Function

Function 语句的语法包含下面部分:

部分描述
Public可选的。表示所有模块的所有其它过程都可访问这个 Function 过程。如果是在包含 Option Private 的模块中使用,则这个过程在该工程外是不可使用的。
Private可选的。表示只有包含其声明的模块的其它过程可以访问该 Function 过程。
Friend可选的。只能在类模块中使用。表示该 Function 过程在整个工程中都是可见的,但对于对象实例的控制者是不可见的。
Static可选的。表示在调用之间将保留 Function 过程的局部变量值。Static 属性对在该 Function 外声明的变量不会产生影响,即使过程中也使用了这些变量。
name必需的。Function 的名称;遵循标准的变量命名约定。
arglist可选的。代表在调用时要传递给 Function 过程的参数变量列表。多个变量应用逗号隔开。
type可选的。Function 过程的返回值的数据类型,可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定长)、Object、Variant或任何用户定义类型。
statements可选的。在 Function 过程中执行的任何语句组。
expression可选的。Function 的返回值。

其中的 arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分描述
Optional可选的。表示参数不是必需的。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional 声明。
ByVal可选的。表示该参数按值传递。
ByRef可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByValByRef,或 Optional 一起使用。
varname必需的。代表参数的变量的名称;遵循标准的变量命名约定。
type可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object Variant。如果参数不是 Optional,则也可以是用户定义类型,或对象类型。
defaultvalue可选的。任何常数或常数表达式。只对于 Optional 参数时是合法的。如果类型为 Object,则显式缺省值只能是 Nothing

说明

如果没有使用 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、CosChr 的使用方式一样。

在表达式中,可以通过使用函数名,并在其后用圆括号给出相应的参数列表来调用一个 Function 过程。请参阅 Call 语句关于如何调用 Function 过程的详细说明。

要从函数返回一个值,只需将该值赋给函数名。在过程的任意位置都可以出现这种赋值。如果没有对 name 赋值,则过程将返回一个缺省值:数值函数返回 0,字符串函数返回一个零长度字符串 (""),Variant 函数则返回 Empty。如果在返回对象引用的 Function 过程中没有将对象引用赋给 name (通过 Set),则函数返回 Nothing

下面的示例说明如何给一个名为 BinarySearch 的函数赋返回值。在这个示例中,将 False 赋给了该函数名,表示没有找到某个值。

Function BinarySearch(. . .) As Boolean
. . .
   '值未找到,返回一个 False 值。
   If lower > upper Then
      BinarySearch = False
      Exit Function
   End If
. . .
End Function

Function 过程中使用的变量分为两类:一类是在过程内显式声明的,另一类则不是。在过程内显式声明的变量(使用 Dim 或等效方法)都是局部变量。对于那些没有在过程中显式声明的变量,除非它们在该过程外更高级别的位置有显示地声明,否则也是局部的。

注意 过程可以使用没有在过程内显式声明的变量,但只要有任何在模块级别中定义的名称与之相同,就会产生名称冲突。如果过程中使用的未声明的变量与另一个过程,常数,或变量的名称相同,则会认为过程使用的是模块级的名称。显式声明变量就可以避免这类冲突。可以使用 Option Explicit 语句来强制显式声明变量。

注意 Visual Basic 可能会重新安排数学表达式以提高内部效率。若 Function 过程会改变某个数学表达式中变量的值,则应避免在此表达式中使用该函数。


Get 语句

将一个已打开的磁盘文件读入一个变量之中。

语法

Get [#]filenumber, [recnumber], varname

Get 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
recnumber可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),以表示在此处开始读出数据。
varname必要。一个有效的变量名,将读出的数据放入其中。

说明

通常用 Put Get 读出的数据写入一个文件

文件中第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。若省略 recnumber,则会读出紧随上一个 GetPut 语句之后的下一个记录或字节(或读出最后一个 Seek 函数指出的记录或字节)。所有用于分界的逗号都必须罗列出来,例如:

Get #4,,FileBuffer

下列规则适用于以 Random 方式打开的文件:

  • 如果要读出的数据的长度小于 Open 语句的 Len 子句中所指定的长度,Get 会在某个边界之内读出随后的记录,在这里,边界的长度等于记录的长度。将此文件缓冲区内的现有内容填入到一个空间之内,该空间介于一个记录的结尾与下一个记录的开头之间。因为无法确定填入的数据量,所以,应设法使记录的长度与读出的数据长度一致,这通常是个好办法。

  • 如果读出的变量是一个可变长度字符串,则 Get 语句先读出一个含有字符串长度的双字节描述符,然后读出放入变量中的数据。所以,Open 语句中的 Len 子句所指定的记录长度必须至少比字符串的实际长度多两个字节。

  • 如果读出的变量是一个数值类型的 Variant,则 Get 先读出两个字节,识别 Variant VarType,然后读出放入此变量中的数据。例如,在读出 VarType 3 的 Variant 时,Get 读出六个字节:前两个字节说明 Variant VarType 3 (Long),后四个字节则包含 Long 类型数据。Open 语句中的 Len 子句所指定的记录长度必须至少比储存变量所需的实际长度多两个字节。

    注意 可以使用 Get 语句从磁盘中读出一个 Variant 数组,但不能使用它读出包含数组的标量 Variant。也不能使用 Get 从磁盘中读出对象。

  • 如果读出的变量是 VarType 8 (String) 的 Variant,则 Get 先读出两个字节,识别 VarType,接下来的两个字节指出字符串的长度,然后读出字符串数据。Open 语句中的 Len 子句所指定的记录长度必须比实际字符串的长度至少多四个字节。

  • 如果读出的变量是一个动态数组,则 Get 会读出一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensions。读出数组数据和数组描述符就需要占据字节,而 Open 语句中的 Len 子句所指定的记录长度必须大于或等於这些字节数的总和。 例如,在将数组写入磁盘时,下列数组声明需要 118 个字节:
    Dim MyArray(1 To 5,1 To 10) As Integer
    

    这 118 个字节的分配情况如下:18 个字节用于描述符 (2 + 8 * 2),100 个字节用于数据 (5 * 10 * 2)。

  • 如果读出的变量是一个大小固定的数组,则 Get 只读出数据。它不读出描述符。

  • 如果读出的变量是任何其他类型的变量(不是可变长度的字符串或 Variant£©,则 Get 只读出变量数据。Open 语句中的 Len 子句所指定的记录长度必须大于或等於要读出的数据的长度。

  • Get 在读出用户定义类型的元素时,好象是单独地读出每一个元素,只是不在元素之间进行填充。在磁盘上,(用 Put 写入的)用户定义的类型的动态数组之前有一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensionsOpen 语句中的 Len 子句所指定的记录长度必须大于或等於读出个别元素(包括任何数组及其描述符在内)所需的全部字节数总和。

对于以 Binary 方式打开的文件,Random 的所有规则都适用,但以下情况除外:

  • Open 语句中的 Len 子句不起作用时,Get 连续从磁盘中读出所有变量;也就是说,两个记录之间没有任何填充。

  • 对于任何不属于用户定义的类型的数组,Get 只读出数据。它不会读出描述符。

  • Get 读出可变长度字符串,不管这些字符串是否具有长度为 2 字节的描述符,它们都不是用户定义的类型的元素。所读出的字节数等於字符串已包含的字符数。例如,下列语句从文件号为 1 的文件中读出十个字节:
    VarString = String(10, )
    Get #1,,VarString

GoSub...Return 语句

在一个过程中跳到另一个子程序中执行,执行后再返回。

语法

GoSub line
...
line
...

Return

必要的 line 参数可以是任何行标签或行号。

说明

可以在过程中的任何地方使用 GoSub Return,但是 GoSub 和与之相应的 Return 语句必须放在同一个过程中。一个子程序中可以包含一个以上的 Return 语句,但是当碰到第一个 Return 语句时,程序就会返回到紧接在刚刚执行的 GoSub 语句之后的语句继续执行。

注意 不能使用 GoSub...Return 来进入或退出 Sub 过程。

提示 创建分开的过程,并使用 GoSub...Return 来调用,可以使程序更具结构化。


GoTo 语句

无条件地转移到过程中指定的行。

语法

GoTo line

必要的 line 参数可以是任意的行标签或行号。

说明

GoTo 只能跳到它所在过程中的行。

注意 太多的 GoTo 语句,会使程序代码不容易阅读及调试。尽可能使用结构化控制语句(Do...LoopFor...NextIf...Then...ElseSelect Case)。


If...Then...Else 语句

根据表达式的值有条件地执行一组语句。

语法

If condition Then [statements][Else elsestatements]

或者,可以使用块形式的语法:

If condition Then
[statements]

[ElseIf condition-n Then
[elseifstatements] ...

[Else
[elsestatements]]

End If

If...Then...Else 语句的语法具有以下几个部分:

部分描述
condition必要参数。一个或多个具有下面两种类型的表达式:
 数值表达式或字符串表达式,其运算结果为 TrueFalse。如果 condition 为 Null,则 condition 会视为 False。
 TypeOf objectname Is objecttype 形式的表达式。其中的 objectname 是任何对象的引用,而 objecttype 则是任何有效的对象类型。如果 objectnameobjecttype 所指定的一种对象类型,则表达式为 True,否则为False
statements在块形式中是可选参数;但是在单行形式中,且没有 Else 子句时,则为必要参数。一条或多条以冒号分开的语句,它们在 condition True 时执行。
condition-n可选参数。与 condition 同。
elseifstatements可选参数。一条或多条语句,它们在相关的 condition-n True 时执行。
elsestatements可选参数。一条或多条语句,它们在前面的 condition condition-n 都不为 True 时执行。

说明

可以使用单行形式(第一种语法)来做短小简单的测试。但是,块形式(第二种语法)则提供了更强的结构化与适应性,并且通常也是比较容易阅读、维护及调试的。

注意 在单行形式中,按照 If...Then 判断的结果也可以执行多条语句。所有语句必须在同一行上并且以冒号分开,如下面语句所示:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

在块形式中,If 语句必须是第一行语句。其中的 ElseElseIf,和 End If 部分可以只在之前加上行号或行标签。If 块必须以一个 End If 语句结束。

要决定某个语句是否为一个 If 块,可检查 Then 关键字之后是什么。如果在 Then 同一行之后,还有其它非注释的内容,则此语句就是单行形式的 If 语句。

ElseElseIf 子句都是可选的。在 If 块中,可以放置任意多个 ElseIf 子句,但是都必须在 Else 子句之前。If 块也可以是嵌套的。

当程序运行到一个 If 块(第二种语法)时,condition 将被测试。如果 conditionTrue,则在 Then 之后的语句会被执行。如果 condition False,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。如果找到某个为 True 的条件时,则其紧接在相关的 Then 之后的语句会被执行。如果没有一个 ElseIf 条件式为 True(或是根本就没有 ElseIf 子句),则程序会执行 Else 部分的语句。而在执行完 Then Else 之后的语句后,会从 End If 之后的语句继续执行。

提示 根据单一表达式来执行多种可能的动作时,Select Case 更为有用。不过,TypeOf objectname Is objecttype 子句不能在 Select Case 语句中使用。

注意 TypeOf 不能与诸如 Long、Integer 以及其他不是 Object 的固定数据类型一起使用。


Implements 语句

指定要在包含该语句的类模块中实现的接口或类。

语法

Implements [InterfaceName | Class]

所需的 InterfaceNameClass 是类型库中的接口或类的名称,该类型库中的方法将用与 Visual Basic 类中相一致的方法来实现。

说明

所谓接口就是代表接口封装的成员(方法以及属性)的原型集合;也就是说,它只包含成员过程的声明部分。一个类提供一个或多个接口的所有方法以及属性的一种实现方案。类的控制者每次调用函数时,该函数所执行的代码由类来提供。每个类至少应实现一个缺省接口。在 Visual Basic 中,一个已实现的接口中任何没有显式声明的成员都是缺省接口的隐式成员。

当 Visual Basic 类实现接口时,都会提供该接口的类型库中说明的所有 Public 过程的版本。除了提供接口原型与自编过程之间的映射关系之外,Implements 语句还使这个类接收对指定接口 ID 的 COM QueryInterface 调用。

注意 Visual Basic 不能实现派生出来的类或接口。

在实现接口或类时,必须包括所用到的 Public 过程。如果在实现接口或类时遗漏了成员,就会产生错误。如果正在实现的类中某个过程还没有代码,则可以产生一个适当的错误信息 (Const E_NOTIMPL = &H80004001),以便用户意识到该成员还没有实现。

Implements 语句不能在标准模块中使用。


Input # 语句

从已打开的顺序文件中读出数据并将数据指定给变量。

语法

Input #filenumber, varlist

Input # 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
varlist必要。用逗号分界的变量列表,将文件中读出的值分配给这些变量;这些变量不可能是一个数组或对象变量。但是,可以使用变量描述数组元素或用户定义类型的元素。

说明

通常用 Write #Input # 语句读出的数据写入文件。该语句只能用于以 Input Binary 方式打开的文件。

在读出数据时不经修改就可直接将标准的字符串或数值数据指定给变量。下表说明如何处理其它输入数据:

数据指定给变量的值
分隔逗号或空白行Empty
#NULL#Null
#TRUE# or #FALSE#True False
#yyyy-mm-dd hh:mm:ss#用表达式表示的日期与/或时间
#ERROR errornumber#errornumber(此变量是一个 Variant,用来标记错误)

输入数据中的双引号符号 (" ") 将被忽略。

文件中数据项目的顺序必须与 varlist 中变量的顺序相同,而且与相同数据类型的变量匹配。如果变量为数值类型而数据不是数值类型,则指定变量的值为零。

在输入数据项目时,如果已到达文件结尾,则会终止输入,并产生一个错误。

注意 为了能够用 Input # 语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用 Write # 语句而不使用 Print # 语句。使用 Write # 语句可以确保将各个单独的数据域正确分隔开。


Kill 语句

从磁盘中删除文件。

语法

Kill pathname

必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。

说明

Microsoft Windows 中,Kill 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。


Let 语句

将表达式的值赋给变量或属性。

语法

[Let] varname = expression

Let 语句的语法包含下面部分:

部分描述
Let可选的。显式使用 Let 关键字也是一种格式,但通常都省略该关键字。
varname必需的。变量或属性的名称;遵循标准变量命名约定。
expression必需的。赋给变量或属性的值。

说明

只有当表达式是一种与变量兼容的数据类型时,该表达式的值才可以赋给变量或属性。不能将字符串表达式的值赋给数值变量,也不能将数值表达式的值赋给字符串变量。如果这样做,就会在编译时间出现错误。

可以用字符串或数值表达式赋值给 Variant 变量,但反过来不一定正确。任何除 Null 之外的 Variant 都可以赋给字符串变量,但只有当 Variant 的值可以解释为某个数时才能赋给数值变量。可以使用 IsNumeric 函数来确认 Variant 是否可以转换为一个数。

注意 将一种数值类型的表达式赋给另一种数值类型的变量时,会强制将该表达式的值转换为结果变量的数值类型。

Let 语句可以将一个记录类型的变量赋给属于同一用户定义类型的变量。使用 LSet 语句可以给不同用户自定义类型的记录变量赋值。使用 Set 语句可以将对象引用赋给变量。


Line Input # 语句

从已打开的顺序文件中读出一行并将它分配给 String变量。

语法

Line Input #filenumber, varname

Line Input # 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
varname必要。有效的 Variant 或 String 变量名。

说明

通常用 Print # Line Input # 语句读出的数据从文件中写出来。

Line Input # 语句一次只从文件中读出一个字符,直到遇到回车符 (Chr(13)) 或回车-换行符 (Chr(13) + Chr(10)) 为止。回车-换行符将被跳过,而不会被附加到字符串上。


Lock,Unlock 语句

对于用 Open 语句打开的全部文件或一部分文件,其它进程所进行的控制访问。

语法

Lock [#]filenumber[, recordrange]
. . .

Unlock [#]filenumber[, recordrange]

Lock Unlock 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
recordrange可选。要锁定或解锁的记录范围。

设置

recordrange 参数的设置如下:

recnumber | [start] To end

设置描述
recnumber记录号(Random 方式的文件)或字节数(Binary 方式的文件),指定要开始锁定或解锁的位置。
start第一个要锁定或解锁的记录号或字节数。
end最后一个要锁定或解锁的记录号或字节数。

说明

在有若干个进程访问同一个文件的环境中,要使用 Lock Unlock 语句。

在使用 LockUnlock 语句时,这两个语句总是成对出现。Lock Unlock 的参数必须完全一致。

文件中的第一个记录或字节在位置 1,第二个记录或字节在位置 2,依此类推。若只指定一个记录,则只对该记录进行锁定或解锁。若指定某个范围内的记录并省略起始记录 (start),则将此范围内的所有记录从头到尾 (end) 进行锁定或解锁。如果使用无 recnumberLock,则会将整个文件都锁定;而使用无 recnumberUnlock 则会将整个文件都解锁。

若已经以顺序输入或输出的方式打开文件,则无论 start end 指定什么范围,Lock Unlock 都将影响整个文件。

警告 在关闭一个文件或退出程序之前,务必要确保用 Unlock 语句删除对文件进行的所有锁定。若不能删除锁定,则会产生无法预料的后果。


LSet 语句

在一字符串变量中将一字符串往左对齐,或是将一用户定义类型变量复制到另一用户自定义类型变量。

语法

LSet stringvar = string

LSet varname1 = varname2

LSet 语句的语法有下面这些部分:

部分说明
stringvar必要参数。字符串变量名称。
string必要参数。在 stringvar 内想往左对齐的字符串表达式。
Varname1必要参数。用户自定义类型变量名,内容将复制进来。
Varname2必要参数。用户自定义类型变量名,内容将复制出去。

说明

Lset 会将 stringvar 中空余的字符以空白替换。

如果 string stringvar 还长,Lset 只在 stringvar 中放置最左边几个字符,且长度为 stringvar 的长度。

警告 不能使用 Lset 将一用户自定义类型变量复制到另一用户自定义类型变量。将一个数据类型的数据复制到留给另一数据类型的空间,可能会造成不可预料的结果。

当从一用户自定义类型复制一变量给其他变量时,此变量的二进制数据会从一个变量复制到另一个变量的内存空间中,但并不关心为元素指定的数据类型。


Mid 语句

在一 Variant (String) 变量中以另一个字符串中的字符替换其中指定数量的字符。

语法

Mid(stringvar, start[, length]) = string

Mid 语句的语法具有下面几个部分:

部分描述
stringvar必要参数。被更改的字符串变量名。
start必要参数;Variant (Long)。stringvar 中被替换的字符开头位置。
length可选参数;Variant (Long)。被替换的字符数。如果省略,string将全部用上。
string必要参数。字符串表达式,替换部分 stringvar 的字符串。

说明

被替换的字符数量总是小于或等于 stringvar 的字符数。

注意 MidB 语句作用于包含在字符串中的字节数据。在 MidB 语句中,start 指定 stringvar 中被替换的字节开头位置,而 length 为替换的字节数。


MkDir 语句

创建一个新的目录或文件夹。

语法

MkDir path

必要的 path 参数是用来指定所要创建的目录或文件夹的字符串表达式。path 可以包含驱动器。如果没有指定驱动器,则 MkDir 会在当前驱动器上创建新的目录或文件夹。


Name 语句

重新命名一个文件、目录、或文件夹。

语法

Name oldpathname As newpathname

Name 语句的语法具有以下几个部分:

部分描述
oldpathname必要参数。字符串表达式,指定已存在的文件名和位置,可以包含目录或文件夹、以及驱动器。
newpathname必要参数。字符串表达式,指定新的文件名和位置,可以包含目录或文件夹、以及驱动器。而由 newpathname 所指定的文件名不能存在。

说明

 Name 语句重新命名文件并将其移动到一个不同的目录或文件夹中。如有必要,Name 可跨驱动器移动文件。 但当 newpathname 和 oldpathname 都在相同的驱动器中时,只能重新命名已经存在的目录或文件夹。 Name 不能创建新文件、目录或文件夹。

在一个已打开的文件上使用 Name,将会产生错误。必须在改变名称之前,先关闭打开的文件。Name 参数不能包括多字符 (*) 和单字符 (?) 的通配符。


On Error 语句

启动一个错误处理程序并指定该子程序在一个过程中的位置;也可用来禁止一个错误处理程序。

语法

On Error GoTo line

On Error Resume Next

On Error GoTo 0

On Error 语句的语法可以具有以下任何一种形式:

语句描述
On Error GoTo line 启动错误处理程序,且该例程从必要的 line 参数中指定的 line 开始。line 参数可以是任何行标签或行号。如果发生一个运行时错误,则控件会跳到 line,激活错误处理程序。指定的 line 必须在一个过程中,这个过程与 On Error 语句相同; 否则会发生编译时间错误。
On Error Resume Next说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用 On Error GoTo
On Error GoTo 0禁止当前过程中任何已启动的错误处理程序。

说明

如果不使用 On Error 语句,则任何运行时错误都是致命的;也就是说,结果会导致显示错误信息并中止运行。

一个“允许的”错误处理程序是由 On Error 语句打开的一个处理程序;一个“活动的”错误处理程序是处理错误的过程中允许的错误处理程序。如果在错误处理程序处于活动状态时(在发生错误和执行 ResumeExit SubExit FunctionExit Property 语句之间这段时间)又发生错误,则当前过程的错误处理程序将无法处理这个错误。控件返回调用的过程。如果调用过程有一个已启动的错误处理程序,则激活错误处理程序来处理该错误。如果调用过程的错误处理程序也是活动的,则控件将再往回传到前面的调用过程,这样一直进行下去,直到找到一个被允许的但不是活动的错误处理程序为止。如果没有找到被允许而且不活动的错误处理程序,那么在错误实际发生的地方,错误本身是严重的。错误处理程序每次将控件返回调用过程时,该过程就成为当前过程。在任何过程中,一旦错误处理程序处理了错误,在当前过程中就会从 Resume 语句指定的位置恢复运行。

注意 一个错误处理程序不是 Sub 过程或 Function 过程。它是一段用行标签或行号标记的代码。

错误处理程序依靠 Err 对象的 Number 属性中的值来确定错误发生的原因。在其它任何错误发生之前,或在调用一个可能会导致错误发生的过程之前,错误处理程序应该先测试或存储 Err 对象中相关的属性值。Err 对象中的属性值只反映最近发生的错误。Err.Description 中包含有与 Err.Number 相关联的错误信息。

On Error Resume Next 会使程序从紧随产生错误的语句之后的语句继续执行,或是从紧随最近一次调用含有 On Error Resume Next 语句的过程的语句继续运行。这个语句可以置运行时错误于不顾,使程序得以继续执行。可以将错误处理程序放置在错误发生的地方,而不必将控件传输到过程中的其它位置。在调用另一个过程时,On Error Resume Next 语句成为非活动的,所以,如果希望在例程中进行嵌入错误处理,则应在每一个调用的例程中执行 On Error Resume Next 语句。

注意 当处理在访问其它对象期间产生的错误时,与其使用 On Error GoTo 指令,不如使用 On Error Resume Next。每次和对象打交道,在不知道用代码访问哪个对象时,检查一下 Err 都会打消这种疑虑。可以确定是哪个对象产生错误(Err.Source 中指定的对象),也可以确定是哪个对象将错误代码放在 Err.Number

On Error GoTo 0 停止在当前过程中处理错误。即使过程中包含编号为 0 的行,它也不把行 0 指定为处理错误的代码的起点。如果没有 On Error GoTo 0 语句,在退出过程时,错误处理程序会自动关闭。

在错误未发生的时候,为了防止错误处理程序代码运行,请像在下段程序中那样,在紧靠着错误处理程序的前面写入 Exit Sub、Exit Function Exit Property 语句。

Sub InitializeMatrix(Var1, Var2, Var3, Var4)
   On Error GoTo ErrorHandler
   . . .
   Exit Sub
ErrorHandler:
   . . .
   Resume Next
End Sub

此处,错误处理程序代码在 Exit Sub 语句之后,而在 End Sub 语句之前,从而与过程中的流程分开。错误处理程序代码可以在程序中的任何地方写入。

当对象作为文件运行时,对象中未捕获的错误都被返回控制应用程序。在开发环境中,如果设置了正确选项,未捕获的错误只返回控制应用程序。请参考主应用程序的文档的有关描述,从而得知,在调试时应该设置哪些选项、如何设置这些选项以及主机能否建立类。

如果建立一个访问其它对象的对象,则应该着手处理从那些对象返回的未处理错误。如果无法处理这种错误,请将 Err.Number 中的错误代码当作自己的一个错误,然后将错误回传给对象的调用者。应该将错误代码添加到 vbObjectError 常数上来指定这个错误。举例来说,如果错误代码为 1052,则使用如下方法指定错误:

Err.Number = vbObjectError + 1052

注意 调用动态链接库 (DLL) 期间产生的系统错误不会产生例外情况,也不会被 Visual Basic 的错误捕获操作所捕获。当调用 DLL 函数时,应该(根据 API 的详细说明)检查每一个返回值以确定是成功还是失败,如果失败,则检查 Err 对象的 LastDLLError 属性中的值。


On...GoSub、On...GoTo 语句

根据表达式的值,转到特定行执行。

语法

On expression GoSub destinationlist

On expression GoTo destinationlist

On...GoSub On...GoTo 语句的语法具有以下几个部分:

部分描述
expression必要参数。数值表达式,其运算结果应该是一个界于 0 到 255 之间的整数,包含 0 和 255。如果 expression 的计算结果不是一个整数,则它会先四舍五入为一个整数。
destinationlist必要参数。行号或行标签的列表,之间要以逗号隔开。

说明

expression 的值会决定转到 destinationlist 中的哪一行。如果 expression 的值小于 1 或大于列表的项目个数,则会产生下面的结果之一:

如果表达式的值
等于 0控制权会转移到 On...GoSubOn...GoTo 之后的语句。
大于串的项目个数控制权会转移到 On...GoSubOn...GoTo 之后的语句。
负数会发生错误。
大于 255会发生错误。

可以在同一个列表中混合使用行号和行标签。在 On...GoSub On...GoTo 中也可随意使用任意个行号和行标签。但是,如果使用了太多的行标签或行号,以至于在一行中放不下,那么就必须在一行后使用>续行符来衔接到下一行。

提示 若要执行多重分支,Select Case 提供了一种结构化与适应性更强的方法。


Open 语句

能够对文件输入/输出 (I/O)。

语法

Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

Open 语句的语法具有以下几个部分:

部分描述
pathname必要。字符串表达式,指定文件名,该文件名可能还包括目录、文件夹及驱动器。
mode必要。关键字,指定文件方式,有 AppendBinaryInputOutput、或 Random 方式。如果未指定方式,则以 Random 访问方式打开文件。
access可选。关键字,说明打开的文件可以进行的操作,有 ReadWrite、或 Read Write 操作。
lock可选。关键字,说明限定于其它进程打开的文件的操作,有 SharedLock ReadLock Write、和 Lock Read Write 操作。
filenumber必要。一个有效的文件号,范围在 1 到 511 之间。使用 FreeFile 函数可得到下一个可用的文件号。
reclength可选。小于或等于 32,767(字节)的一个数。对于用随机访问方式打开的文件,该值就是记录长度。对于顺序文件,该值就是缓冲字符数。

说明

对文件做任何 I/O 操作之前都必须先打开文件。Open 语句分配一个缓冲区供文件进行 I/O 之用,并决定缓冲区所使用的访问方式。

如果 pathname 指定的文件不存在,那么,在用 AppendBinaryOutput、或 Random 方式打开文件时,可以建立这一文件。

如果文件已由其它进程打开,而且不允许指定的访问类型,则 Open 操作失败,而且会有错误发生。

如果 mode Binary 方式,则 Len 子句会被忽略掉。

重要BinaryInput Random 方式下可以用不同的文件号打开同一文件,而不必先将该文件关闭。在 Append Output 方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件。


Option Base 语句

在模块级别中使用,用来声明数组下标的缺省下界。

语法

Option Base {0 | 1}

说明

由于下界的缺省设置是 0,因此无需使用 Option Base 语句。如果使用该语句,则必须写在模块的所有过程之前。一个模块中只能出现一次 Option Base,且必须位于带维数的数组声明之前。

注意   Dim、Private、Public、ReDim 以及 Static 语句中的 To 子句提供了一种更灵活的方式来控制数组的下标。不过,如果没有使用 To 子句显式地指定下界,则可以使用 Option Base 将缺省下界设为 1。使用 Array 函数或 ParamArray 关键字创建的数组的下界为 0;Option BaseArrayParamArray 不起作用。

Option Base 语句只影响位于包含该语句的模块中的数组下界。


Option Compare 语句

在模块级别中使用,用于声明字符串比较时所用的缺省比较方法。

语法

Option Compare {Binary | Text | Database}

说明

如果使用,则 Option Compare 语句必须写在模块的所有过程之前。

Option Compare 语句为模块指定字符串比较的方法(Binary、Text Database)。如果模块中没有 Option Compare 语句,则缺省的文本比较方法是 Binary

Option Compare Binary 是根据字符的内部二进制表示而导出的一种排序顺序来进行字符串比较。在 Microsoft Windows 中,排序顺序由代码页确定。典型的二进制排序顺序如下例所示:

A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < ?

Option Compare Text 根据由系统国别确定的一种不区分大小写的文本排序级别来进行字符串比较。当使用 Option Compare Text 对相同字符排序时,会产生下述文本排序级别:

(A=a) < ( _=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_) 

Option Compare Database 只能在 Microsoft Access 中使用。当需要字符串比较时,将根据数据库的国别 ID 确定的排序级别进行比较。


Option Explicit 语句

在模块级别中使用,强制显式声明模块中的所有变量。

语法

Option Explicit

说明

如果使用,Option Explicit 语句必须写在模块的所有过程之前。

如果模块中使用了 Option Explicit,则必须使用 Dim、Private、Public、ReDimStatic 语句来显式声明所有的变量。如果使用了未声明的变量名在编译时间会出现错误。

如果没有使用 Option Explicit 语句,除非使用 Deftype 语句指定了缺省类型,否则所有未声明的变量都是 Variant 类型的。

注意 使用 Option Explicit 可以避免在键入已有变量时出错,在变量的范围不是很清楚的代码中使用该语句可以避免混乱。


Option Private 语句

在允许引用跨越多个工程的主机应用程序中使用 Option Private Module,可以防止在模块所属的工程外引用该模块的内容。在不允许这种引用的主机应用程序中,例如,Visual Basic 的独立方式版本,Option Private 就不起作用。

语法

Option Private Module

说明

如果使用 Option Private 语句,则必须是写在模块级别中的任何过程之前。

如果模块中使用了 Option Private Module,则其公用部分(例如,在模块级定义的变量,对象,以及用户定义类型)在该模块所属的工程内仍是可用的,但对其它应用程序或工程则是不可用的。

注意 只有在支持同时加载多个工程,且允许在加载的工程间引用的主应用程序中可使用 Option Private。例如,Microsoft Excel 允许加载多个工程,Option Private Module 就可以用来限制跨工程的可见性。尽管 Visual Basic 允许加载多个工程,但在 Visual Basic 中是从不允许跨工程引用的。


Print # 语句

将格式化显示的数据写入顺序文件中。

语法

Print #filenumber, [outputlist]

Print # 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
outputlist可选。表达式或是要打印的表达式列表。

设置

outputlist 参数的设置如下:

[{Spc(n) | Tab[(n)]}] [expression] [charpos]

设置描述
Spc(n)用来在输出数据中插入空白字符,而 n 指的是要插入的空白字符数。
Tab(n)用来将插入点定位在某一绝对列号上,这里,n 是列号。使用无参数的 Tab 将插入点定位在下一个打印区的起始位置。
expression要打印的数值表达式或字符串表达式。
charpos指定下一个字符的插入点。使用分号将插入点定位在上一个显示字符之后。用 Tab(n) 将插入点定位在某一绝对的列号上,用无参数的 Tab 将插入点定位在下一个打印区的起始处。如果省略 charpos,则在下一行打印下一个字符。

说明

通常用 Line Input #Input 读出 Print # 在文件中写入的数据。

如果省略参数 outputlist,而且,filenumber 之后只含有一个列表分隔符,则将一空白行打印到文件中。多个表达式之间可用一个空白或一个分号隔开。空白与分号等效。

对于 Boolean 类型的数据,打印的是 True False。无论在什么国别,都不将 True False 这两个关键字翻译出来。

使用操作系统所能够辨认的标准短日期格式可将 Date 类型的数据写入文件中。在未指定日期或时间部件或这些部件的设置为零时,只将指定的部分写入文件中。

如果 outputlist 的数据是 Empty,则不将任何数据写入文件。但是,如果 outputlist 的数据是 Null,则将 Null 写入文件。

对于 Error 类型的数据而言,输出的数据看起来与 Error errorcode 一样。而且无论在什么地区,都不将 Error 关键字翻译出来。

Print # 写入文件的所有数据都是国际通用的;也就是说,可以正确利用十进制分隔符将这些数据格式化。

因为 Print # 将数据的图像写入文件,所以必须将各项数据分隔开来,以便正确打印。如果使用无参数的 Tab 将打印位置移动到下一个打印区,则 Print # 也会将打印字段之间的空白写入文件中。

注意 如果今后想用 Input # 语句读出文件的数据,就要用 Write # 语句而不用 Print # 语句将数据写入文件。因为在使用 Write # 时,将数据域分界就可确保每个数据域的完整性,因此可用 Input # 再将数据读出来。使用 Write # 还能确保任何地区的数据都被正确读出。


Private 语句

在模块级别中使用,用于声明私有变量及分配存储空间。

语法

Private [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

Private 语句的语法包含下面部分:

部分描述
WithEvents可选的。关键字,说明 varname 是用来响应由 ActiveX 对象所触发的事件的对象变量。只有在类模块中才是合法的。使用 WithEvents,可以定义任意个所需的单变量,但不能用 WithEvents 创建数组。NewWithEvents 不能一起使用。
varname必需的。变量的名称;遵循标准的变量命名约定。
subscripts可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数的使用语法如下:
 [lower To] upper [,[lower To] upper] . . .
 如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。
New可选的。使其可以隐式地创建对象的关键字。如果使用 New 声明对象变量,则在第一次引用该变量时创建该对象的新实例,因此不必使用 Set 语句来对该对象引用赋值。New 关键字不能声明任何内部数据类型的变量以及从属对象的实例,也不能与 WithEvents 一起使用。
type可选的。变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对可变长的字符串)、String * length(对定长的字符串)、Object、Variant、用户定义类型或对象类型。所声明的每个变量都要一个单独的 As type 子句。

说明

Private 变量只能在包含其声明的模块中使用。

可以使用 Private 语句声明变量的数据类型。例如,下面的语句声明了一个 Integer 类型的变量。

Private NumberOfEmployees As Integer

也可以使用 Private 语句来声明变量的对象类型。下面的语句为工作表的新实例声明了一个变量。

Private X As New Worksheet

如果在定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将一个已有的对象赋给该引用对象的变量。在赋值之前,所声明的这个对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。

如果不指定数据类型或对象类型,且在模块中没有使用 Deftype 语句,则按缺省情况该变量为 Variant 类型。

可以用带空圆括号的 Private 语句来声明动态数组,然后可以在过程内用 ReDim 语句来定义该数组的维数和元素。如果试图在 PrivatePublic Dim 语句中重新定义一个已显式定义了大小的数组的维数,就会发生错误。

当初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。

注意 当在过程中使用 Private 语句时,通常将 Private 语句放在过程的开始。


Property Get 语句

声明 Property 过程的名称,参数以及构成其主体的代码,该过程获取一个属性的值。

语法

[Public | Private | Friend] [Static] Property Get name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Property]
[statements]
[name = expression]

End Property

Property Get 语句的语法包含下面部分:

部分描述
Public可选的。表示所有模块的所有其它过程都可访问 Property Get 过程。如果在包含 Option Private 的模块中使用,则该过程在该工程外是不可使用的。
Private可选的。表示只有包含其声明的模块的其它过程可以访问该 Property Get 过程。
Friend可选的。只能在类模块中使用。表示该 Property Get 过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。
Static可选的。表示在调用之间保留该 Property Get 过程的局部变量的值。Static 属性对在该 Property Get 过程外声明变量不会产生影响,即使过程中也使用了这些变量。
name必需的。Property Get 过程的名称;遵循标准的变量命名约定,但不能与同一模块中的 Property LetProperty Set 过程同名。
arglist可选的。代表在调用时要传递给 Property Get 过程的参数的变量列表。多个变量则用逗号隔开。Property Get 过程中的每个参数的名称和数据类型必须与相应 Property Let 过程(如果存在)中的参数一致。
type可选的。该 Property Get 过程的返回值的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定长)、Object、Variant或任何用户定义类型。任何类型的数组都不能作为返回值,但包含数组的 Variant 可以作为返回值。

Property Get 过程的返回值类型必须与相应的 Property Let 过程(如果有)的最后一个(有时是仅有的)参数的数据类型相同,该 Property Let 过程将其右边表达式的值赋给属性。

statements可选的。Property Get 过程体中所执行的任何语句组。
expression可选的。Property Get 语句所定义的过程返回的属性值。

其中的 arglist 参数的语法及语法的各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分描述
Optional可选的。表示参数不是必需的。如果使用了该选项,则 arglist 中的后续参数都是可选的,而且必须都使用 Optional 关键字声明。
ByVal可选的。表示该参数按值传递。
ByRef可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal、ByRef Optional 一起使用。
varname必需的。代表参数的变量名称;遵循标准的变量命名约定。
type可选的。传递给该过程的参数的数据类型;可以是 Byte、BooleanInteger、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、ObjectVariant。如果参数不是 Optional,则也可以是用户自定义的类型,或对象类型。
defaultvalue可选的。任何常数或常量表达式。只在 Optional 参数时是合法的。如果类型为 Object,则显式的缺省值只能是 Nothing

说明

如果没有使用 Public,Private Friend 显式指定,则 Property 过程缺省为公用。如果没有使用 Static,则在调用之后不会保留局部变量的值。Friend 关键字只能在类模块中使用。Friend 过程可以被工程中的任何模块的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。

所有的可执行代码都必须属于某个过程。不能在别的 Property、Sub Function 过程中定义 Property Get 过程。

Exit Property 语句使执行立即从一个 Property Get 过程中退出。程序接着从调用该 Property Get 过程的语句下一条语句开始执行。在 Property Get 过程中的任何位置都可以有 Exit Property 语句。

Property Get 过程与 SubProperty Let 过程的相似之处是:Property Get 过程是一个可以获取参数,执行一系列语句,以及改变其参数的值的独立过程,而与 SubProperty Let 过程不同的是:当要返回属性的值时,可以在表达式的右边使用 Property Get 过程,这与使用 Function 或属性名的方式一样。


Property Let 语句

声明 Property Let 过程的名称,参数以及构成其主体的代码,该过程给一个属性赋值。

语法

[Public | Private | Friend] [Static] Property Let name ([arglist,] value)
[statements]
[Exit Property]
[statements]

End Property

Property Let 语句的语法包含下面部分:

部分描述
Public可选的。表示所有模块的所有其它过程都可访问该 Property Let 过程。如果在包含 Option Private 的模块中使用,则这个过程在该工程外是不可使用的。
Private可选的。表示只有在包含其声明的模块的其它过程中可以访问该 Property Let 过程。
Friend可选的。只能在类模块中使用。表示该 Property Let 过程在整个工程中都是可见的,但对于对象实例的控制者是不可见的。
Static可选的。表示在调用之间将保留 Property Let 过程的局部变量的值。Static 属性对在该 Property Let 过程外声明的变量不会产生影响,即使过程中也使用了这些变量。
name必需的。Property Let 过程的名称;遵循标准的变量命名约定,但不能与同一模块中的 Property GetProperty Set 过程同名。
arglist可选的。代表在调用时要传递给 Property Let 过程的参数的变量列表。多个变量则用逗号隔开。Property Let 过程中的每个参数的名称和数据类型必须与 Property Get 过程中的相应参数一致。
value必需的。指用于给属性赋值的变量。当调用该过程时,这个参数出现在调用表达式的右边。value 的数据类型必须和相应的 Property Get 过程的返回值类型一致。
statements可选的。Property Let 过程中执行的任何语句组。

其中的 arglist 参数的语法和语法的各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分描述
Optional可选的。表示参数不是必需的。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。注意,一个 Property Let 表达式的右边是不可能为 Optional 的。
ByVal可选的。表示该参数按值传递。
ByRef可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal、ByRef Optional 一起使用。
varname必需的。代表参数变量的名称;遵循标准的变量命名约定。
type可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果参数不是 Optional,则也可以是用户定义类型,或对象类型。
defaultvalue可选的。任何常数或常数表达式。只在 Optional 参数时是合法的。如果类型为 Object,则显式的缺省值只能是 Nothing

注意 每个 Property Let 语句必须为其所定义的过程定义至少一个参数。当这个 Property Let 语句所定义的过程被调用时,该参数(如果有多个参数则指最后一个)就包含了将赋给属性的实际值。该参数就是前述语法中的 value

说明

如果没有使用 Public、Private Friend 显式指定,则 Property 过程缺省为公用。如果没有使用 Static,则不会在调用之后保留局部变量的值。Friend 关键字只能在类模块中使用。不过 Friend 过程可以被工程中的任何模块的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。

所有的可执行代码都必须属于某个过程。不能在别的 Property、Sub Function 过程中定义 Property Let 过程。

Exit Property 语句使执行立即从一个 Property Let 过程中退出。程序接着从调用该 Property Let 过程的语句下一条语句开始执行。在 Property Let 过程的任何位置都可以有 Exit Property 语句。

Property Let 过程与 FunctionProperty Get 过程的相似之处是:Property Let 过程是一个可以获取参数,执行一系列语句,以及改变其参数值的独立过程。而与 FunctionProperty Get 过程不同的是:这两个过程都有返回值,而 Property Let 过程只能用于属性表达式或 Let 语句的左边。


Property Set 语句

声明 Property 过程的名称,参数以及构成其主体的代码,该过程设置一个对象引用。

语法

[Public | Private | Friend] [Static] Property Set name ([arglist,] reference)
[statements]
[Exit Property]
[statements]

End Property

Property Set 语句的语法包含下面部分:

部分描述
Optional可选的。表示调用者可以提供或不提供该参数。
Public可选的。表示所有模块的所有其它过程都可访问这个 Property Set 过程。如果在包含 Option Private 的模块中使用,则这个过程在该工程外是不可使用的。
Private可选的。表示只有包含其声明的模块的其它过程可以访问该 Property Set 过程。
Friend可选的。只能在类模块中使用。表示该 Property Set 过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。
Static可选的。表示在调用之间保留 Property Set 过程的局部变量的值。Static 属性对在该 Property Set 外声明的变量不会产生影响,即使过程中也使用了这些变量。
name必需的。Property Set 过程的名称;遵循标准的变量命名约定,但不能与同一模块中的 Property GetProperty Let 过程同名。
arglist可选的。代表在调用时要传递给 Property Set 过程的参数的变量列表。对于多个变量则用逗号隔开。
reference必需的。对象引用赋值的右边所使用的包含对象引用的变量。
statements可选的。Property 过程体中所执行的任何语句组。

其中的 arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分描述
Optional可选的。表示参数不是必需的。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。注意:Property Set 表达式的右边不可能是 Optional
ByVal可选的。表示该参数按值传递。
ByRef可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal、ByRef Optional 一起使用。
varname必需的。代表参数的变量的名称;遵循标准的变量命名约定。
type可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果参数不是 Optional,则也可以是用户定义类型,或对象类型。
defaultvalue可选的。任何常数或常数表达式。只在 Optional 参数时是合法的。如果类型为 Object,则显式的缺省值只能是 Nothing

注意 每个 Property Set 语句必须为其所定义的过程定义至少一个参数。当 Property Set 语句所定义的过程被调用时,这个参数(如果有多个参数则指最后一个)就包含了将赋给属性的实际的对象引用。这个参数就是前述语法中的 reference。它不能是 Optional

说明

如果没有使用 Public、Private Friend 显式指定,则 Property 过程按缺省情况是公用的。如果没有使用 Static,则在调用之后不会保留局部变量的值。Friend 关键字只能在类模块中使用。不过 Friend 过程可以被工程中的任何模块的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。

所有的可执行代码都必须属于某个过程。不能在别的 Property、Sub Function 过程中定义 Property Set 过程。

Exit Property 语句使执行立即从一个 Property Set 过程中退出。程序接着从调用该 Property Set 过程的语句下一条语句执行。在 Property Set 过程的任何位置都可以有 Exit Property 语句。

Property Set 过程与 FunctionProperty Get 过程的相似之处是:它们都是一个可以获取参数,执行一系列语句,以及改变其参数的值的独立过程。而与 FunctionProperty Get 过程不同的是:这两个过程都有返回值,而 Property Set 过程只能用于对象引用赋值(Set 语句)的左边。


Public 语句

在模块级别中使用,用于声明公用变量和分配存储空间。

语法

Public [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]] . . .

Public 语句的语法包含下面部分:

部分描述
WithEvents可选的。关键字,说明 varname 是用来响应由 ActiveX 对象触发的事件的对象变量。只有在类模块中才是合法的。使用 WithEvents,可以定义任意个所需的单个变量,但不能用 WithEvents 创建数组。NewWithEvents 不能一起使用。
varname必需的。变量的名称;遵循标准的变量命名约定。
subscripts可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:
 [lower To] upper [,[lower To] upper] . . .
 如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。
New可选的。用它可以隐式地创建对象的关键字。如果使用 New 声明对象变量,则在第一次引用该变量时创建该对象的新实例,因此不必使用 Set 语句来对该对象引用赋值。New 关键字不能用来声明任何内部数据类型的变量以及从属对象的实例,也不能与 WithEvents 一起使用。
type可选的。变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object或 Variant,用户定义类型,或对象类型。所声明的每个变量都要有一个单独的 As type 子句。

说明

Public 语句声明的变量在所有应用程序的所有没有使用 Option Private Module 的模块的任何过程中都是可用的;若该模块使用了 Option Private Module,则该变量只是在其所属工程中是公用的。

注意 不能在类模块中使用 Public 语句来声明一个定长的字符串变量。

使用 Public 语句可以声明变量的数据类型。例如,下面的语句声明了一个 Integer 类型的变量。

Public NumberOfEmployees As Integer

也可以使用 Public 语句来声明变量的对象类型。下面的语句为工作表的新实例声明了一个变量。

Public X As New Worksheet

如果在定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将一个已有的对象赋给这个引用对象的变量。在被赋值之前,所声明的这个对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。

可以用带空圆括号的 Public 语句来声明动态数组。在声明了动态数组之后,可以在过程内用 ReDim 语句来定义该数组的维数和元素。如果试图在 Private、Public Dim 语句中重定义一个已被显式定义了大小的数组的维数,就会发生错误。

如果不指定数据类型或对象类型,且在模块中没有使用 Deftype 语句,则按缺省情况该变量为 Variant 类型。

当初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素都作为各自独立的变量进行初始化。


Put 语句

将一个变量的数据写入磁盘文件中。

语法

Put [#]filenumber, [recnumber], varname

Put 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
recnumber可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),指明在此处开始写入。
varname必要。包含要写入磁盘的数据的变量名。

说明

通常用 GetPut 写入的文件数据读出来。

文件中的第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。如果省略 recnumber,则将上一个 GetPut 语句之后的(或上一个 Seek 函数指出的)下一个记录或字节写入。所有用于分界的逗号都必须罗列出来,例如:

Put #4,,FileBuffer

下列规则适用于以 Random 方式打开的文件:

  • 如果已写入的数据的长度小于 Open 语句的 Len 子句指定的长度,则 Put 以记录长度为边界写入随后的记录。记录终点与下一个记录起点之间的空白将用现有文件缓冲区内的内容填充。因为填入的数据量无法确定,所以一般说来,最好设法使记录的长度与写入的数据长度一致。如果写入的数据长度大于由 Open 语句的 Len 子句所指定的长度,就会导致错误发生。

  • 如果写入的变量是一个可变长度的字符串,则 Put 先写入一个含有字符串长度的双字节描述符,然后再写入变量。Open 语句的 Len 子句所指定的记录长度至少要比实际字符串的长度多两个字节。

  • 如果写入的变量是数值类型的 Variant Put 先写入两个字节来辨认 Variant VarType,然后才写入变量。例如,当写入 VarType 3 的 Variant 时,Put 会写入六个字节:其中,前两个字节辨认出 Variant VarType 3 (Long),后四个字节则包含 Long 类型的数据。Open 语句的 Len 子句所指定的记录长度必须至少比储存变量所需的实际字节多两个字节。

注意   Put 语句可用来将一个 Variant 数组写入磁盘,但不能用来将包含数组的标量 Variant 写入磁盘。Put 也不能用来将对象写入磁盘。

  • 如果写入的变量是 VarType 8 (String) 的 Variant,则 Put 先写入两个字节来辨认 VarType,接下来的两个字节则指出字符串的长度,然后再写入字符串数据。Open 语句的 Len 子句所指定的记录长度必须至少比实际的字符串长度多四个字节。

  • 如果写入的变量是动态数组,则 Put 写入一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensionsOpen 语句的 Len 子句所指定的记录长度必须大于或等於为读出数组数据和数组描述符所需要的所有字节数总和。例如,在将数组写入磁盘时,下列数组声名需要 118 个字节的空间:
    Dim MyArray(1 To 5,1 To 10) As Integer
    
  • 这 118 个字节的分配情况如下:18 个字节用于描述符 (2 + 8 * 2),100 个字节用于数据 (5 * 10 * 2)。

  • 如果写入的变量是大小固定的数组,则 Put 只写入数据。它不将描述符写入磁盘。

  • 如果写入的变量是任何其他类型的变量(不是可变长度的字符串或 Variant£©,则 Put 只写入变量数据。Open 语句的 Len 子句所指定的记录长度必须大于或等於要读出的数据长度。

  • Put 写入用户定义类型的元素时,除了不在元素之间进行填充外,好象是单独地写入每一个元素。在磁盘上,有一个描述符位于 Put 写入的用户定义的类型的动态数组之前,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensionsOpen 语句中的 Len 子句所指定的记录长度必须大于或等於为写入各个元素(包括任何数组及其描述符在内)所需的全部字节数总和。

对于以 Binary 方式打开的文件,上述所有 Random 规则都适用,除了:

  • Open 语句中的 Len 子句不起作用。Put 语句连续地将所有变量写入磁盘;也就是说,两个记录之间没有任何填充。

  • 对于任何不属于用户定义的类型的数组,Put 只写入数据。它不会写入描述符。

  • 对于非用户定义的类型的可变长度字符串,Put 将其直接写入,而无须有双字节描述符。写入的字节数等於字符串所包含的字符数。例如,下列语句将十个字节写入文件号为 1 的文件中:
    VarString$ = String$(10, )
    Put #1,,VarString$

RaiseEvent 语句

引发在一个类、窗体、或者文档中的模块级中声明的一个事件。

语法

RaiseEvent eventname [(argumentlist)]

必需的 eventname 是在模块 中声明的,并且符合 Basic 变量命名约定的一个事件的名称。

RaiseEvent 语句的语法有如下部分:

部分描述
Eventname必需的。所引发的事件的名称。
Argumentlist可选的。用逗号分隔的变量、数组,或者表达式的列表。argumentlist 必须用圆括号括起来。如果没有参数,则圆括号必须被忽略。

说明

如果在事件被引发的模块内该事件没有被声明,就会发生一个错误。下面这个程序片段说明了一个事件的声明以及一个引发该事件的过程。

' 在类模块的模块级声明一个事件
Event LogonCompleted (UserName as String)

Sub
   ' 引发该事件。
   RaiseEvent LogonCompleted ("AntoineJan")
End Sub

如果在 RaiseEvent 中该事件没有参数,包括空的圆括号,则对该事件的调用就会导致一个错误。不能使用 RaiseEvent 来引发在模块中没有明确定义的事件。例如,如果一个窗体有一个 Click 事件,则不能使用 RaiseEvent 来引发该窗体的 Click 事件。如果在窗体模块 中声明了一个 Click 事件,则它将覆盖窗体自己的 Click 事件。仍然可以使用调用该事件的正常语法来调用该窗体的 Click 事件,但是不能使用 RaiseEvent 语句。

事件的引发是根据连接建立的顺序来进行的。因为事件可以有 ByRef 参数,所以后来连接的进程可能接收已经被一个更早的事件处理程序更改的参数。


Randomize 语句

初始化随机数生成器。

语法

Randomize [number]

可选的 number 参数是 Variant 或任何有效的数值表达式。

说明

Randomize numberRnd 函数的随机数生成器初始化,该随机数生成器给 number 一个新的种子值。如果省略 number,则用系统计时器返回的值作为新的种子值。

如果没有使用 Randomize,则(无参数的)Rnd 函数使用第一次调用 Rnd 函数的种子值。

注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。


ReDim 语句

在过程级别中使用,用于为动态数组变量重新分配存储空间。

语法

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

ReDim 语句的语法包括以下几个部分:

部分描述
Preserve可选的。关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。
varname必需的。变量的名称;遵循标准的变量命名约定。
subscripts必需的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:
 [lower To] upper [,[lower To] upper] . . .
 如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。
type可选的。变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、用户定义类型或对象类型。所声明的每个变量都要有一个单独的 As type 子句。对于包含数组的 Variant 而言,type 描述的是该数组的每个元素的类型,不能将此 Variant 改为其它类型。

说明

ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、PublicDim 语句声明过的动态数组的大小。

可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant 中,且没有使用 Preserve 关键字,则可以使用 As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。

如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。

如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。

在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。在使用引用对象的变量之前,必须使用 Set 语句将一个已有的对象赋给该变量。在被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。

注意 如果 ReDim 语句所使用的变量在模块级别或过程级别不存在,则该语句就相当于一个声明语句。如果此后在一个更广的范围内又创建了同名的变量,即使使用了 Option ExplicitReDim 也将使用后声明的这个变量,且不会导致编译错误。为了避免这种冲突,就不应把 ReDim 作为声明语句使用,而只应作为重定义数组大小的语句。

注意 要改变 Variant 所包含的数组的大小,必须在试图改变其数组大小之前显式声明该 Variant 变量。


Rem 语句

用来在程序中包含注释。

语法

Rem comment

也可以使用如下语法:

' comment

comment 参数是可选的,指要包括的任何注释文本。在 Rem 关键字与 comment 之间要加一个空格。

说明

如果使用行号或行标签,则可以从 GoToGoSub 语句转到一个 Rem 语句行。程序会从该 Rem 语句下面的第一条可执行语句继续执行。如果在其它语句行后使用 Rem 关键字,则必须使用冒号 (:) 与语句隔开。

可以用一个撇号 (') 来代替 Rem 关键字。若使用撇号,则在其它语句行使用时不必加冒号。


Reset 语句

关闭所有用 Open 语句打开的磁盘文件。

语法

Reset

说明

Reset 语句关闭 Open 语句打开的所有活动文件,并将文件缓冲区的所有内容写入磁盘。


Resume 语句

在错误处理程序结束后,恢复原有的运行。

语法

Resume [0]

Resume Next

Resume line

Resume 语句的语法可以具有以下任何一种形式:

语句描述
Resume如果错误和错误处理程序出现在同一个过程中,则从产生错误的语句恢复运行。如果错误出现在被调用的过程中,则从最近一次调用包含错误处理程序的过程的语句处恢复运行。
Resume Next如果错误和错误处理程序出现在同一个程序中,则从紧随产生错误的语句的下个语句恢复运行。如果错误发生在被调用的过程中,则对最后一次调用包含错误处理程序的过程的语句(或 On Error Resume Next 语句),从紧随该语句之后的语句处恢复运行。
Resume line在必要的 line 参数指定的 line 处恢复运行。line 参数是行标签或行号,必须和错误处理程序在同一个过程中。

说明

在错误处理程序之外的任何地方使用 Resume 语句都会导致错误发生。


RmDir 语句

删除一个存在的目录或文件夹。

语法

RmDir path

必要的 path 参数是一个字符串表达式,用来指定要删除的目录或文件夹。path 可以包含驱动器。如果没有指定驱动器,则 RmDir 会在当前驱动器上删除目录或文件夹。

说明

如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。


RSet 语句

在一字符串变量中将一字符串往右对齐。

语法

RSet stringvar = string

RSet 语句的语法有下面这些部分:

部分说明
stringvar必要参数。为字符串变量名。
String必要参数。在 stringvar 内想往右对齐的字符串表达式。

说明

如果 stringvar string 长,Rset 会将 stringvar 中空余的字符以空白代替,直至字符串开头。

注意 RSet 不能用于用户定义类型。


SaveSetting 语句

在 Windows 注册表中保存或建立应用程序项目。

语法

SaveSetting appname, section, key, setting

SaveSetting 语句的语法具有下列命名参数:

部分描述

appname必要。字符串表达式,包含应用程序或工程的名称,对这些应用程序或工程使用设置
section必要。字符串表达式,包含区域名称,在该区域保存注册表项设置。
key必要。字符串表达式,包含将要保存的注册表项设置的名称。
setting必要。表达式,包含 key 的设置值。

说明

如果无论如何也不能保存注册表项设置,则将导致错误发生。


Seek 语句

Open 语句打开的文件中,设置下一个读/写操作的位置。

语法

Seek [#]filenumber, position

Seek 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
position必要。介于 1 - 2,147,483,647 之间的数字,指出下一个读写操作将要发生的位置。

说明

GetPut 语句中指定的记录号将覆盖由 Seek 语句指定的文件位置。

若在文件结尾之后进行 Seek 操作,则进行文件写入的操作会把文件扩大。如果试图对一个位置为负数或零的文件进行 Seek 操作,则会导致错误发生。


Select Case 语句

根据表达式的值,来决定执行几组语句中的其中之一。

语法

Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]

End Select

Select Case 语句的语法具有以下几个部分:

部分 描述
testexpression必要参数。任何数值表达式或字符串表达式。
expressionlist-n如果有 Case 出现,则为必要参数。其形式为 expressionexpression To expressionIs comparisonoperator expression的一个或多个组成的分界列表To 关键字可用来指定一个数值范围。如果使用 To 关键字,则较小的数值要出现在 To 之前。使用 Is 关键字时,则可以配合比较运算符(除 IsLike 之外来指定一个数值范围。如果没有提供,则 Is 关键字会被自动插入。
statements-n可选参数。一条或多条语句,当 testexpression 匹配expressionlist-n中的任何部分时执行。
elsestatements可选参数。一条或多条语句,当 testexpression 不匹配 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 子句中使用多重表达式或使用范围,例如,下面的语句是正确的:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

注意   Is 比较运算符和使用在 Select Case 语句中的 Is 关键字并不相同。

也可以针对字符串指定范围和多重表达式。在下面的例子中,Case 所匹配的字符串为:等于 everything、按英文字母顺序落入从 nutssoup 之间的字符串、以及 TestItem 所代表的当前值。

Case "everything", "nuts" To "soup", TestItem

Select Case 语句也可以是嵌套的。但每个嵌套的 Select Case 语句必须要有相应的 End Select 语句。


SendKeys 语句

将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。

语法

SendKeys string[, wait]

SendKeys 语句的语法具有以下几个命名参数:

部分描述
string必需的。字符串表达式,指定要发送的按键消息。
Wait可选的。指定等待方式的 BooleandefBooleanDataType@veendf98.chm 值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之前加以处理。

说明

每个按键由一个或多个字符表示。为了指定单一键盘字符,必须按字符本身的键。例如,为了表示字母 A,可以用 "A" 作为 string。为了表示多个字符,就必须在字符后面直接加上另一个字符。例如,要表示 A、B 及 C,可用 "ABC" 作为 string

SendKeys 来说,加号 (+)、插入符 (^)、百分比符号 (%)、上划线 (~) 及圆括号 ( ) 都具有特殊意义。为了指定上述任何一个字符,要将它放在大括号 ({}) 当中。例如,要指定正号,可用 {+} 表示。方括号 ([ ]) 对 SendKeys 来说并不具有特殊意义,但必须将它们放在大括号中。在其它应用程序中,方括号有特殊意义,在出现动态数据交换 (DDE) 的时候,它可能具有重要意义。为了指定大括号字符,请使用 {{} 及 {}}。

为了在按下按键时指定那些不显示的字符,例如 ENTER 或 TAB 以及那些表示动作而非字符的按键,请使用下列代码:

按键代码
BACKSPACE{BACKSPACE}, {BS}, 或 {BKSP}
BREAK{BREAK}
CAPS LOCK{CAPSLOCK}
DEL or DELETE{DELETE} 或 {DEL}
DOWN ARROW{DOWN}
END{END}
ENTER {ENTER}~
ESC{ESC}
HELP{HELP}
HOME{HOME}
INS or INSERT{INSERT} 或 {INS}
LEFT ARROW{LEFT}
NUM LOCK{NUMLOCK}
PAGE DOWN{PGDN}
PAGE UP{PGUP}
PRINT SCREEN{PRTSC}
RIGHT ARROW{RIGHT}
SCROLL LOCK{SCROLLLOCK}
TAB{TAB}
UP ARROW{UP}
F1{F1}
F2{F2}
F3{F3}
F4{F4}
F5{F5}
F6{F6}
F7{F7}
F8{F8}
F9{F9}
F10{F10}
F11{F11}
F12{F12}
F13{F13}
F14{F14}
F15{F15}
F16{F16}

为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下:

按键代码
SHIFT+
CTRL ^
ALT%

为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那些按键的码放在括号当中。例如,为了说明按下 E 与 C 的时候同时按下 SHIFT 键,请使用 "+(EC)"。为了说明在按下 E 的时候同时按下 SHIFT 键,但接着按 C 而不按 SHIFT,则使用 "+EC"。

为了指定重复键,使用 {key number} 的形式。必须在 keynumber 之间放置一个空格。例如,{LEFT 42} 意指 42 次按下 LEFT ARROW 键;{h 10} 则是指 10 次按下 H 键。

注意 不能用 SendKeys 将按键消息发送到这样一个应用程序,这个应用程序并没有被设计成在 Microsoft Windows 中运行。Sendkeys 也无法将 PRINT SCREEN 按键 {PRTSC} 发送到任何应用程序。


Set 语句

将对象引用赋给变量或属性。

语法

Set objectvar = {[New] objectexpression | Nothing}

Set 语句的语法包含下面部分:

部分描述
objectvar必需的。变量或属性的名称,遵循标准变量命名约定。
New可选的。通常在声明时使用 New,以便可以隐式创建对象。如果 New Set 一起使用,则将创建该类的一个新实例。如果 objectvar 包含了一个对象引用,则在赋新值时释放该引用。不能使用 New 关键字来创建任何内部数据类型的新实例,也不能创建从属对象。
objectexpression必需的。由对象名,所声明的相同对象类型的其它变量,或者返回相同对象类型的函数或方法所组成的表达式。
Nothing可选的。断绝 objectvar 与任何指定对象的关联。若没有其它变量指向 objectvar 原来所引用的对象,将其赋为 Nothing 会释放该对象所关联的所有系统及内存资源。

说明

为确保合法,objectvar 必须是与所赋对象相一致的对象类型。

Dim、Private、Public、ReDim以及 Static 语句都只声明了引用对象的变量。在用 Set 语句将变量赋为特定对象之前,该变量并没有引用任何实际的对象。

下面的示例说明了如何使用 Dim 来声明 Form1 类型的数组。Form1 实际上还没有实例。然后使用 Set 将新创建的 Form1 的实例的引用赋给 myChildForms 变量。在 MDI 应用程序中可以使用这些代码来创建子窗体。

Dim myChildForms(1 to 4) As Form1
Set myChildForms(1) = New Form1
Set myChildForms(2) = New Form1
Set myChildForms(3) = New Form1
Set myChildForms(4) = New Form1

通常,当使用 Set 将一个对象引用赋给变量时,并不是为该变量创建该对象的一份副本,而是创建该对象的一个引用。可以有多个对象变量引用同一个对象。因为这些变量只是该对象的引用,而不是对象的副本,因此对该对象的任何改动都会反应到所有引用该对象的变量。不过,如果在 Set 语句中使用 New 关键字,那么实际上就会新建一个该对象的实例。


SetAttr 语句

为一个文件设置属性信息。

语法

SetAttr pathname, attributes

SetAttr 语句的语法含有以下这些命名参数:

部分描述
pathname必要参数。用来指定一个文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。
Attributes必要参数。常数或数值表达式,其总和用来表示文件的属性。

设置值

attributes 参数设置可为:

常数描述
vbNormal0常规(缺省值)
VbReadOnly1只读。
vbHidden2隐藏。
vbSystem4系统文件
vbArchive32上次备份以后,文件已经改变

注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。

说明

如果想要给一个已打开的文件设置属性,则会产生运行时错误。


Static 语句

在过程级别中使用,用于声明变量并分配存储空间。在整个代码运行期间都能保留使用 Static 语句声明的变量的值。

语法

Static varname[([subscripts])] [As [New] type] [, varname[([subscripts])] [As [New] type]] . . .

Static 语句的语法包含下面部分:

部分描述
varname必需的。变量的名称;遵循标准变量命名约定。
subscripts可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:
 [lower To] upper [,[lower To] upper] . . .
 如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。
New可选的。用它可以隐式地创建对象的关键字。如果使用 New 声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来对该对象引用赋值。New 关键字不能用来声明任何内部数据类型的变量,也不能用来声明从属对象的实例。
type可选的。变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、用户定义类型或对象类型。所声明的每个变量都要有一个单独的 As type 子句。

说明

模块的代码开始运行后,使用 Static 语句声明的变量会一直保持其值,直至该模块复位或重新启动。可以在非静态的过程中使用 Static 语句显式声明只在该过程内可见,但具有与包含该过程定义的模块相同生命期的变量。

可以在过程中使用 Static 语句来声明在过程调用之间仍能保持其值的变量的数据类型。例如,下面的语句声明了一个定长的整型数组:

Static EmployeeNumber(200) As Integer

下面的语句为 worksheet 的新实例声明了一个变量:

Static X As New Worksheet

如果在定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将一个已有的对象赋给这个引用对象的变量。在被赋值之前,所声明的这个对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。若在声明中使用了 New 关键字,则在第一次引用对象时将新建一个该对象的实例。

如果不指定数据类型或对象类型,且在模块中没有使用 Deftype 语句,则按缺省情况,定义该变量为 Variant 类型。

注意   Static 语句与 Static 关键字很相似,但是针对不同的效果来使用的。如果使用 Static 关键字(如 Static Sub CountSales ())来声明一个过程,则该过程中的所有局部变量的存储空间都只分配一次,且这些变量的值在整个程序运行期间都存在。对非静态过程而言,该过程每次被调用时都要为其变量分配存储空间,当该过程结束时都要释放其变量的存储空间。Static 语句则用来在非静态的过程中声明特定的变量,以使其在程序运行期间能保持其值。

在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。

注意 如果在过程中使用 Static 语句,应和其它的声明语句(如 Dim)一样将其放在过程的开始。


Stop 语句

暂停执行。

语法

Stop

说明

可以在过程中的任何地方放置 Stop 语句,使用 Stop 语句,就相当于在程序代码中设置断点。

Stop 语句会暂停程序的执行,但是它不像 End,因为 Stop 不会关闭任何文件,或清除变量,除非它是以编译后的可执行文件 (.EXE) 方式来执行。


Sub 语句

声明子过程的名称,参数,以及构成其主体的代码。

语法

[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]

End Sub

Sub 语句的语法包含下面部分:

部分描述
Public可选的。表示所有模块的所有其它过程都可访问这个 Sub 过程。 如果在包含 Option Private 的模块中使用,则这个过程在该工程外是不可使用的。
Private可选的。表示只有在包含其声明的模块中的其它过程可以访问该 Sub 过程。
Friend可选的。只能在类模块中使用。表示该 Sub 过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。
Static可选的。表示在调用之间保留 Sub 过程的局部变量的值。Static 属性对在 Sub 外声明的变量不会产生影响,即使过程中也使用了这些变量。
name必需的。Sub 的名称;遵循标准的变量命名约定。
arglist可选的。代表在调用时要传递给 Sub 过程的参数的变量列表。多个变量则用逗号隔开。
statements可选的。Sub 过程中所执行的任何语句组。

其中的 arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分描述
Optional可选的。表示参数不是必需的关键字。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional
ByVal可选的。表示该参数按值传递。
ByRef可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByValByRef,或 Optional 一起使用。
varname必需的。代表参数的变量的名称;遵循标准的变量命名约定。
type可选的。传递给该过程的参数的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果没有选择参数 Optional,则可以指定用户定义类型,或对象类型。
defaultvalue可选的。任何常数或常数表达式。只对 Optional 参数合法。如果类型为 Object,则显式的缺省值只能是 Nothing

说明

如果没有使用 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 是一字符串,则 Time 会试着根据系统指定的时间,利用时间分隔符将其转换成一个时间。如果无法转换成一个有效的时间,则会导致错误发生。


Type 语句

在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。

语法

[Private | Public] Type varname
elementname [([subscripts])] As type
[elementname [([subscripts])] As type]
. . .

End Type

Type 语句的语法包含下面部分:

部分描述
Public可选的。用于声明可在所有工程的所有模块的任何过程中使用的用户定义类型。
Private可选的。用于声明只能在包含该声明的模块中使用的用户自定义的类型。
varname必需的。用户自定义类型的名称;遵循标准的变量命名约定
elementname必需的。用户自定义类型的元素名称。除了可以使用的关键字,元素名称也应遵循标准变量命名约定。
subscripts可选的。数组元素的维数。当定义大小可变的数组时,只须圆括号。subscripts 参数使用如下语法:
 [lower To] upper [,[lower To] upper] . . .
 如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。
type必需的。元素的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、其它的用户自定义的类型或对象类型。

说明

Type 语句只能在模块级使用。使用 Type 语句声明了一个用户自定义类型后,就可以在该声明范围内的任何位置声明该类型的变量。可以使用 DimPrivate、Public、ReDim Static 来声明用户自定义类型的变量。

在标准模块中,用户自定义类型按缺省设置是公用的。可以使用 Private 关键字来改变其可见性。而在类模块中,用户自定义类型只能是私有的,且使用 Public 关键字也不能改变其可见性。

Type...End Type 块中不允许使用行号和行标签。

用户自定义类型经常用来表示数据记录,记录一般由多个不同数据类型的元素组成。

下面的示例演示了一个用户自定义类型的大小固定的数组的用法:

Type StateData
   CityCode (1 To 100) As Integer   ' Declare a static array.
   County As String * 30
End Type

Dim Washington(1 To 100) As StateData

在上述示例中,StateData 中包括了一个 CityCode 静态数组,且记录Washington 的结构与 StateData 相同。

当在用户自定义类型中声明大小固定的数组时,必须用数字文字或常数而不能用变量来声明数组的维数。

数组的下界由 Option Base 语句的设置确定。


While...Wend 语句

只要指定的条件为 True,则会重复执行一系列的语句。

语法

While condition
[statements]

Wend

While...Wend 语句的语法具有以下几个部分:

部分描述
condition必要参数。数值表达式或字符串表达式,其计算结果为 TrueFalse。如果 condition 为 Null,则 condition 会视为 False
statements可选参数。一条或多条语句,当条件为 True 时执行。

说明

如果 condition True,则所有的 statements 都会执行,一直执行到 Wend 语句。然后再回到 While 语句,并再一次检查 condition,如果 condition 还是为 True,则重复执行。如果不为 True,则程序会从 Wend 语句之后的语句继续执行。

While...Wend 循环也可以是多层的嵌套结构。每个 Wend 匹配最近的 While 语句。

提示   Do...Loop 语句提供了一种结构化与适应性更强的方法来执行循环。


Width # 语句

将一个输出行的宽度指定给用 Open 语句打开的文件。

语法

Width #filenumber, width

Width # 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
width必要。范围在 0-255 之间的数值表达式,在新的一行开始之前,指出在该行上可出现多少字符。如果 width 等于 0,则行的长度不受限制。width 的缺省值为 0。

With 语句

在一个单一对象或一个用户定义类型上执行一系列的语句。

语法

With object
[statements]

End With

With 语句的语法具有以下几个部分:

部分描述
object必要参数。一个对象或用户自定义类型的名称。
statements可选参数。要执行在 object 上的一条或多条语句。

说明

With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在 With 控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用 With 语句来给同一个对象的几个属性赋值。

With MyLabel
   .Height = 2000
   .Width = 2000
   .Caption = "This is MyLabel"
End With

注意 当程序一旦进入 With 块,object 就不能改变。因此不能用一个 With 语句来设置多个不同的对象。

可以将一个 With 块放在另一个之中,而产生嵌套的 With 语句。但是,由于外层 With 块成员会在内层的 With 块中被屏蔽住,所以必须在内层的 With 块中,使用完整的对象引用来指出在外层的 With 块中的对象成员。

重点 一般来说,建议您不要跳入或跳出 With 块。如果在 With 块中的语句被执行,但是 WithEnd With 语句并没有执行,则一个包含对该对象引用的临时变量将保留在内存中,直到您退出该过程。


Write # 语句

将数据写入顺序文件。

语法

Write #filenumber, [outputlist]

Write # 语句的语法具有以下几个部分:

部分描述
filenumber必要。任何有效的文件号。
outputlist可选。要写入文件的数值表达式或字符串表达式,用一个或多个逗号将这些表达式分界。

说明

通常用 Input # 从文件读出 Write # 写入的数据。

如果省略 outputlist,并在 filenumber 之后加上一个逗号,则会将一个空白行打印到文件中。多个表达式之间可用空白、分号或逗号隔开。空白和分号等效。

Write # 将数据写入文件时将遵循几个通用的约定,使得无论什么国别都可用 Input # 读出并正确解释数据:

  • 在写入数值数据时总使用句号作为十进制分隔符。

  • 对于 Boolean 类型的数据,或者打印 #TRUE# 或者打印 #FALSE#。无论在什么地区,都不将 True False 这两个关键字翻译出来。

  • 使用通用的日期格式将 Date 类型的数据写入文件中。当日期或时间的部件丢失或为零时,只将现有部分写入文件中。

  • 如果 outputlist 的数据为 Empty,则不将任何数据写入文件。但对 Null 数据,则要写入 #NULL#

  • 如果 outputlist 数据为 Null 数据,则将 #NULL# 写入文件中。

  • 对于 Error 类型的数据,输出看起来与 #ERROR errorcode# 一样。无论在什么地区,都不将关键字 Error 翻译出来。

Print # 语句不同,当要将数据写入文件时,Write # 语句会在项目和用来标记字符串的引号之间插入逗号。没有必要在列表中键入明确的分界符。Write # 语句在将 outputlist 中的最后一个字符写入文件后会插入一个新行字符,即回车换行符,(Chr(13) + Chr(10))。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VisualLISP函数手册是一本包含了VisualLISP编程语言中的各种函数的参考书。VisualLISP是AutoCAD中的一种LISP方言,它可用于扩展AutoCAD的功能以满足用户的具体要求。Visual LISP主要用于自动化工具的编写和Autolisp语言的加强。通过编写VisualLISP函数,用户可以简化并加快AutoCAD中的常见任务,从而提高工作效率。 VisualLISP函数包括了AutoLISP语言中基本的函数以及AutoCAD中独有的函数,如与用户界面、图形对象和数据库的交互函数等。VisualLISP函数手册可以帮助用户深入了解VisualLISP编程语言,并帮助他们了解如何应用函数来解决实际问题。 VisualLISP函数手册按照函数的类型进行分类,如常用函数、图形函数和数据库函数等,使用户可以更快速地找到需要的函数。此外,手册还提供了详细的语法说明和示例代码,帮助用户更好地理解函数的用途。 总的来说,VisualLISP函数手册对于想要使用VisualLISP编程语言扩展AutoCAD功能的用户来说是一个非常有价值的参考书,它可以提高用户的工作效率并帮助他们解决实际问题。 ### 回答2: Visual Lisp是一种Lisp方言,与AutoCAD软件紧密结合,用于为AutoCAD提供自定义特性和工作流程。Visual Lisp函数手册提供了Visual Lisp的所有函数的详细说明。这个手册包含了Lisp的基本语法、自定义函数的定义和使用、变量、控制结构、列表和向量、文件的操作、错误处理和调试工具等。 Visual Lisp是一种强大的编程语言,但它的学习曲线比较陡峭,需要更长的时间来掌握,这使得函数手册成为了很重要的工具。通过函数手册,我们可以结合实例来理解函数的用法,这样可以让我们更好地理解编程概念,提高编程技能。函数手册还提供了大量的示例代码和练习题,可以帮助学习者加深对函数的理解,从而熟练掌握Visual Lisp编程。 需要注意的是,Visual Lisp函数手册包含了很多函数,但是并不是所有的函数都需要掌握,根据具体的需求来选择使用哪些函数来完成任务。同时,不仅要学习函数的使用,还要学会如何编写自己的函数,这样可以最大化地利用Visual Lisp的力量,为AutoCAD实现自定义功能。总之,Visual Lisp函数手册是成为一位优秀的AutoCAD工程师必不可少的资料之一。 ### 回答3: VisualLISP函数手册是一份详细列出了VisualLISP的所有函数、方法和变量的指南。这份手册提供了程序员们在编写AutoLISP程序时所需的全部信息,这些程序用于对AutoCAD进行自定义开发。 VisualLISP函数手册主要分为三部分:函数分类、函数示例和变量列表。在函数分类中,VisualLISP中的所有函数被分为N个类别,如数学函数、字符函数、列表函数等。在每个类别中都包含了相关函数的详细解释,包括函数的语法、参数、返回值和例子。这些信息能够大大降低编程过程中的犯错率,并且能够提高程序员的开发效率。 函数示例部分提供了VisualLISP中常用的一些函数的示例程序,包括程序的代码和执行结果。这些示例能够让程序员更好的理解函数的用途和细节。 在变量列表中,VisualLISP中所有的全局变量、局部变量和数据类型都被列出来,包括变量的命名规则、作用范围、数据类型和默认值等信息。使用这些变量会让程序员更好的组织和控制AutoLISP程序。 总之,VisualLISP函数手册是AutoCAD编程中不可或缺的参考书。它不仅提供了函数的详细信息和示例,而且还可以作为开发中的一个良好指导,使开发人员更好地理解AutoCAD中的AutoLISP开发技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值