为了教女票自动化,通读了vb部分的文档,下次估计会更新vba excel部分

1. 准备

以下操作由笔者均在 win10 + ms office excel 2013环境中实践。

1.1 配置环境

■开启Excel宏选项

文件>选项>自定义功能区>开发工具

■更友好的编辑设置

  • 开发工具> Visual Basic >工具>选项>

    • 编辑器>取消勾选【自动语法检测】,勾选【要求变量声明】
    • 编辑器格式>字体>Consolas(西方)
    • 编辑器格式>字体>>大小>11

■保存时弹出无法删除个人信息的警告框

  • 文件>选项>信任中心>信任中心设置>个人信息选项>

    • 取消勾选【保存时从文件属性中删除个人信息】

■强制声明所有变量

  • 代码头部加 Option Explicit

2. VB语言基础

2.1 数据类型

■ 数据类型速查

Boolean布尔型bHidden = True
Byte字节型 (0~255)byArrIndex=255
%Integer短整型(-32768~32767)nArrLen=999
&Long长整型(-2147483648~2147483647)lCounter=0
!Single单精度浮点型fStep=1.2
#Double双精度浮点型dScore=3.4
$String字符型sName="sheet1"
@Currenccy货币型
Decimal小数型
Date日期型
Object对象
Variant变体
用户自定义用户自定义类型

笔者其他匈牙利命名推荐

src源对象 
dest目的对象 
a数组
objApp对象
xlAppExcel对象
wbkWorkBook工作簿
wsWorksheet工作表
rRange表范围

■ 合法变量名

  • 字母开头
  • 只能是字母|数字|下划线
  • 不超过255
  • 不区分大小写

■ 声明、赋值

  • DimStatic只能在过程(Sub或者Function)内部被访问
  • Static下次再调用该过程的时候,数据就依然存在
Dim sText As String'声明变量
Dim sText$ '声明变量(缩写)
Const c_nCounter As Integer '常量
Static s_fPi As Single '静态变量
  • Private 这个模块才能访问
  • Public 整个应用程序都能使用
Private m_lCounter As Long '私有变量
Public g_byArrIndex As Byte '公有变量
  • 变量、对象赋值
Let lMax = 3000 '变量赋值
lMax = 3000 '变量赋值,可省略Let
Set wsTest = ActiveSheet '对象赋值

■ 数组 的 声明、赋值

  • 声明

    • Dim arr(1 To 100) As Byte 表示 arr=[1,2,...,99,100]
    • Dim arr(99) As Byte 表示 arr=[0,1,...,98,99]
    • Dim arr(1 To 3, 1 To 2) As Integer 形如 [[x,x],[x,x],[x,x]]
  • 赋值

    • arr(1)=1
    • Range("E1:G3").value=arr
    • arr=Range("E1:G3").value
  • 动态长度声明

    Dim nLen%
    'nLen = A列非空单元格数
    nLen=Application.WorksheetFunction.CountA(Range("A:A"))
    Dim aColA(1 To nLen) As String
  • 动态类型声明

    Dim aHeader As Variant
    arr = Array("序号",3.14,Date)

2.2 过程、函数

■ 过程

  • Private Sub object
Public Sub xxx()
    Dim title$'缩写示例
    title="hello word"
    MsgBox(title)
End Sub

■ 函数

Public Function weekCheck(str as String)

End Function
  • 数组操作

    • 分隔字符串到数组 arr=Split("赵,钱,孙,李",",")
    • 合并数组到字符串 txt=Join(arr,",")
    • 获取数组最小索引 LBound(arr)
    • 获取数组最大索引 UBound(arr)
  • 类型转换
  • Chr

2.2运算符

■ 算数运算符

+A + B
-A - B
*A * B
/B / A
\除商B A
Mod除余B Mod A
^指数B ^ A

■ 逻辑运算符

=等于A = B
<>不等A <> B
<小于A < B
>大于B > A
<=小于等于B <= A
>=大于等于B >= A
Is指数Object Is Object
Like指数String Like String

■ 逻辑运算符

假设变量A=10,变量B=0

ANDA<>0 AND B<>0False
ORA<>0 OR B<>0True
NOTNOT(a<>0 OR b<>0)False
XOR(a<>0 XOR b<>0)True

■ 连接运算符

假设变量A=5,变量B=10

+连接两个值A + B
&连接两个值A & B

■ 通配符

*任意多个字符"ab4" Like "a*"
?任意的单个字符"ab4" Like "a??"
#任意的单个数字"ab4" Like "ab#"
[charlist]charlist的任意一个字符"a" like "[a-z]"
[!charlist]不在charlist的任意一个字符"a" like "[!h-x]"

文档

活动事件

Private Sub object _Activate

激活

Private Sub UserForm_Activate()
    UserForm1.Caption = "Click my client area"
End Sub

Private Sub object _Deactivate

停用

Private Sub UserForm_Deactivate()
    UserForm1.Caption = "I just lost the focus!"
End Sub

Private Sub object _Initialize

在加载对象后、但在其显示之前出现。

Private Sub UserForm_Initialize()
    Load UserForm2
    UserForm2.Show
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

在UserForm关闭之前发生。

此事件一般用于确保应用程序所含的用户窗体中在应用程序关闭前没有未完成任务。

例如,如果用户尚未将新数据保存到任何 UserForm 中,则应用程序可能提示用户保存数据。

应用程序关闭时,您可使用 QueryClose 事件过程将 Cancel 属性设置为 True,以停止关闭过程。

CloseMode值:

vbFormControlMenu0用户已经从UserForm控制菜单中选择了关闭命令。
vbFormCode1Unload 语句是从代码调用的。
vbAppWindows2当前 Windows 操作环境会话正在关闭。
vbAppTaskManager3Windows的任务管理器正在关闭应用程序。

示例

下面的代码强制用户单击UserForm客户端区域以将其关闭。 如果用户尝试使用标题栏中的关闭 框,则Cancel 参数将设置为非零值,以防终止。 但是, 如果用户单击了 客户端区域, 则CloseMode 的值为 1且 Unload Me将执行。

Private Sub UserForm_Activate()
Me.Caption = "You must Click me to kill me!"
End Sub

Private Sub UserForm_Click()
Unload Me
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    '使用标题栏中的“关闭”框阻止用户关闭。
    If CloseMode <> 1 Then Cancel = 1
    Me.Caption = "The Close box won't work! Click me!"
End Sub

Private Sub UserForm_Resize()

调整父窗体 的大小时, 使用Resize事件过程移动控件或调整其大小。 还可以使用此事件过程重新计算变量或属性。

示例
下面的示例使用**Activate**和**Click**事件来说明**UserForm_Resize**事件的触发。 当用户单击窗体的客户端区域时, 它会增大或缩小, 并且在标题栏中指定新的高度。 请注意, Tag 属性用于存储用户窗体的初始高度。
' Activate event for UserForm1
Private Sub UserForm_Activate()
    UserForm1.Caption = "Click me to make me taller!"
    Tag = Height    ' Save the initial height.
End Sub

' Click event for UserForm1
Private Sub UserForm_Click()
    Dim NewHeight As Single
    NewHeight = Height
    ' If the form is small, make it tall.
    If NewHeight = Val(Tag) Then
        Height = Val(Tag) * 2
    Else
    ' If the form is tall, make it small.
        Height = Val(Tag)
    End If
End Sub

' Resize event for UserForm1
Private Sub UserForm_Resize()
    UserForm1.Caption = "New Height: " & Height & "  " & "Click to resize me!"
End Sub

Private Sub object _Terminate( )
在卸载对象后发生Terminate事件。 如果UserForm 或类的实例从内存中删除, 则不会触发Terminate事件, 因为应用程序异常终止。

例如, 如果应用程序在从内存中删除类或UserForm 的所有现有实例之前调用End 语句, 则不会对该类或UserForm 触发Terminate事件。

示例
以下事件过程导致UserForm 在用户点击客户端区域以消除该窗体之后发出了几秒中的哔哔声。
<pre>
Private Sub UserForm_Activate()
UserForm1.Caption = "Click me to kill me!"
End Sub

Private Sub UserForm_Click()
Unload Me
End Sub

Private Sub UserForm_Terminate()

Dim Count As Integer
For Count = 1 To 100
    Beep
Next

End Sub
</pre>

VB函数

■ 转换函数

Asc( string As String)

返回一个整数值,它表示与字符串中的第一个字母对应的字符代码。如果 string 不包含任何字符,将会出现运行时错误。

示例

Dim MyNumber
MyNumber = Asc("A")    ' Returns 65.
MyNumber = Asc("a")    ' Returns 97.
MyNumber = Asc("Apple")    ' Returns 65.

Chr( charcode As String)

返回一个字符串,其中包含与指定的字符代码关联的字符。0–31 之间的数字与标准非打印 ASCII 代码相同。 例如,Chr(10) 将返回换行符。 charcode 的正常范围是 0–255。

示例

Dim MyChar
MyChar = Chr(65)    ' Returns A.
MyChar = Chr(97)    ' Returns a.
MyChar = Chr(62)    ' Returns >.
MyChar = Chr(37)    ' Returns %.

▌CVErr


[▌Format( Expression, [ Format ], [ FirstDayOfWeek ], [ FirstWeekOfYear ])](#format)

数字使用预定义的指定数值格式或创建用户定义的数值格式。
日期和时间使用预定义的指定日期/时间格式或创建用户定义的日期/时间格式。
日期和时间序列号使用日期和时间格式或数值格式。
字符串创建您自己的用户定义的字符串格式。

Format 参数

Expression必需。 任何有效的表达式。
Format可选。 一个有效的指定格式表达式或用户定义的格式表达式。
FirstDayOfWeek可选。 一个指定一周的第一天的常量。
FirstWeekOfYear可选。 一个指定一年的第一周的常量。

firstdayofweek 参数

vbSunday1周日(默认)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

firstweekofyear 参数

vbFirstJan11从 1 月 1 日所在的周开始(默认)。
vbFirstFourDays2从一年中至少包含四天的第一周开始。
vbFirstFullWeek3从一年的第一个完整周开始。

日期符号

d1-31(月份中的某一日,不带前导零)
dd01-31(月份中的某一日,带前导零)
w1-7(星期几,从星期日 = 1 开始)
ww1-53(年份中的某一周,不带前导零;第 1 周从 1 月 1 日开始)
m1-12(年份中的某一月,不带前导零;从 1 月 = 1 开始)
mm01-12(年份中的某一月,带前导零;从 1 月 = 01 开始)
mmm显示缩写的月份名称(Hijri 月份名称没有缩写形式)
mmmm显示完整的月份名称

y 1-366(年份中的某一天)
yy 00-99(年份的最后两位数)
yyyy 100-9999(三位或四位数年份)

时间符号

h0-23(在 1-12 时附加“AM”或“PM”)(一天中的小时数,不带前导零)
hh00-23(在 01-12 时附加“AM”或“PM”)(一天中的小时数,带前导零)
n0-59(小时内的分钟数,不带前导零)
nn00-59(小时内的分钟数,带前导零)
m0-59(小时内的分钟数,不带前导零)。 仅在前面带有 h 或 hh 时
mm00-59(小时内的分钟数,带前导零)。 仅在前面带有 h 或 hh 时
s0-59(分钟内的秒数,不带前导零)
ss00-59(分钟内的秒数,带前导零)

示例

Dim MyTime, MyDate, MyStr
MyTime = #17:04:23#
MyDate = #January 27, 1993#

' Returns current system time in the system-defined long time format.
MyStr = Format(Time, "Long Time")

' Returns current system date in the system-defined long date format.
MyStr = Format(Date, "Long Date")

MyStr = Format(MyTime, "h:m:s")    ' Returns "17:4:23".
MyStr = Format(MyTime, "hh:mm:ss am/pm")    ' Returns "05:04:23 pm".
MyStr = Format(MyTime, "hh:mm:ss AM/PM")    ' Returns "05:04:23 PM".
MyStr = Format(MyDate, "dddd, mmm d yyyy")    ' Returns "Wednesday, Jan 27 1993".
' If format is not supplied, a string is returned.
MyStr = Format(23)    ' Returns "23".

' User-defined formats.
MyStr = Format(5459.4, "##,##0.00")    ' Returns "5,459.40".
MyStr = Format(334.9, "###0.00")    ' Returns "334.90".
MyStr = Format(5, "0.00%")    ' Returns "500.00%".
MyStr = Format("HELLO", "<")    ' Returns "hello".
MyStr = Format("This is it", ">")    ' Returns "THIS IS IT".

更多...


Hex( number As Number|String) As String

返回表示数字的十六进制值的字符串。如果 number 不是整数, 则在计算之前将其舍入为最接近的整数。
对于与十六进制相反的值, 请在十六进制值前面加上 &H。 例如,Hex(255)返回字符串 FF&HFF返回数字255

-2,147,483,648 到 2,147,483,647最多八个十六进制字符
NULLNULL
Empty (空)零 (0)

示例

Dim MyHex
MyHex = Hex(5)    ' Returns 5.
MyHex = Hex(10)    ' Returns A.
MyHex = Hex(459)    ' Returns 1CB.

Oct( number As Number|String) As String

返回一个表示数字的八进制值的变量(字符串)。

NULLNULL
为空零 (0)
任何其他数字多达 11 个八进制字符

示例

Dim MyOct
MyOct = Oct(4)     ' Returns 4.
MyOct = Oct(8)    ' Returns 10.
MyOct = Oct(459)    ' Returns 713.

Str( number As Number) As String

返回数字的字符串表示。始终为 number 的符号保留前导空格。

示例

Dim MyString
MyString = Str(459)    ' Returns " 459".
MyString = Str(-459.65)    ' Returns "-459.65".
MyString = Str(459.001)    ' Returns " 459.001".

▌Val( string As String) As Number

以适当类型的数值格式返回字符串中包含的数字。Val函数将在字符串无法识别为数字一部分的第一个字符处停止读取该字符串。 将无法识别通常被视为数值的一部分的符号和字符(例如美元符号和逗号)。但是, 函数识别基数前缀&O (用于八进制) 和&H (对于十六进制)。 空白、制表符和换行符将从参数中剔除。

示例

Val("    1615 198th Street N.E.") ' Returns 1615198
Val("&HFFFF") ' Returns -1
Dim MyValue
MyValue = Val("2457")    ' Returns 2457.
MyValue = Val(" 2 45 7")    ' Returns 2457.
MyValue = Val("24 and 57")    ' Returns 24.

■ 数学函数

▌Abs( number As Number) as Number

返回将传递给指定数字的绝对值的相同类型的值。

示例

Dim MyNumber
MyNumber = Abs(50.3)    ' Returns 50.3.
MyNumber = Abs(-50.3)    ' Returns 50.3.

▌Atn( number As Number) as Double
返回指定数字的余切值的 Double。

示例

Dim IntVar, StrVar, DateVar, MyCheck
' Initialize variables.
IntVar = 459: StrVar = "Hello World": DateVar = #2/12/69#
MyCheck = VarType(IntVar)    ' Returns 2.
MyCheck = VarType(DateVar)    ' Returns 7.
MyCheck = VarType(StrVar)    ' Returns 8.

▌Cos( number As Number) as Double
返回指定角的余弦的 Double。

示例

Dim MyAngle, MySecant
MyAngle = 1.3    ' Define angle in radians.
MySecant = 1 / Cos(MyAngle)    ' Calculate secant.

▌派生的数学函数


▌Exp( number as Number) As Double

返回指定进行幂计算的e(自然对数的基)的 Double。

示例

Dim MyAngle, MyHSin
' Define angle in radians.
MyAngle = 1.3
' Calculate hyperbolic sine.
MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2

**▌Int|Fix( number As Number)** as Integer

IntFix都删除数字的小数部分,并返回结果整数值。IntFix之间的区别在于,如果number为负,则Int返回小于或等于number的第一个负整数,而Fix返回大于或等于number的第一个负整数。例如,Int将-8.4转换为-9,而Fix将-8.4转换为-8。Fix(number)等于Sgn(number)* Int(Abs(number))

示例

Dim MyNumber
MyNumber = Int(99.8)    ' Returns 99.
MyNumber = Fix(99.2)    ' Returns 99.

MyNumber = Int(-99.8)    ' Returns -100.
MyNumber = Fix(-99.8)    ' Returns -99.

MyNumber = Int(-99.2)    ' Returns -100.
MyNumber = Fix(-99.2)    ' Returns -99.

Log(number As Number ) As Double

返回用于指定数字的自然对数的 Double 值。


[▌Rnd([ number As Number])](#rnd) As Single

返回一个包含伪随机数字的Single 。

小于 0使用_number_作为种子时, 每次使用相同的数字。
大于 0伪随机序列中的下一个号码。
等于 0最近生成的数字。
未提供伪随机序列中的下一个号码。

示例

Dim MyValue As Integer
MyValue = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6.

▌Sgn(nubmer As Number) As Integer
返回数字的符号

示例

Dim MyVar1, MyVar2, MyVar3, MySign
MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0
MySign = Sgn(MyVar1)    ' Returns 1.
MySign = Sgn(MyVar2)    ' Returns -1.
MySign = Sgn(MyVar3)    ' Returns 0.

--

▌Sin(* number as Number) As Double

返回指定角的正弦值的 Double。


▌Sqr(* number as Number) As Double

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


Tan(* number as Number) As Double
返回一个指定角的正切值的 Double 。


■ 类型转换函数

▌ CBool(expression):Boolean

将表达式转换为 Boolean。 如果该表达式计算结果为非零值,则 CBool 将返回 True,否则,返回 False。

示例

Dim A, B, Check
A = 5: B = 5 ' Initialize variables.
Check = CBool(A = B) ' Check contains True.

A = 0 ' Define variable.
Check = CBool(A) ' Check contains False.

▌ CByte(expression):Byte

将表达式转换为 Byte。

示例

Dim MyDouble, MyByte
MyDouble = 125.5678 ' MyDouble is a Double.
MyByte = CByte(MyDouble) ' MyByte contains 126.

▌ CCur(expression):Currency

将表达式转换为 Currency。强制实行货币运算,根据您的计算机的区域设置恰当地识别不同的小数分隔符、不同的千位分隔符和不同的货币选项。通常可能发生单精度、双精度或整数运算。

示例

Dim MyDouble, MyCurr
MyDouble = 543.214588 ' MyDouble is a Double.
MyCurr = CCur(MyDouble * 2) ' Convert result of MyDouble * 2
 ' (1086.429176) to a
 ' Currency (1086.4292).

▌ CDate(expression):Date

使用 IsDate 函数来确定是否可以将 date 转换为日期或时间。 CDate 识别日期文本和时间文本以及一些属于可接受日期范围的数字。 当转换数字为日期时,整个数字部分都将被转换为日期。 数字的任何小数部分都将被转换为一天的某个时间(从午夜开始)。

如果日、月和年的正确顺序是以已识别日期设置之外的格式提供的,那么则可能不能确定日、月和年的正确顺序。 此外,如果长日期格式还包含了星期几字符串,则不能识别该格式。

示例

Dim MyDate, MyShortDate, MyTime, MyShortTime
MyDate = "February 12, 1969" ' Define date.
MyShortDate = CDate(MyDate) ' Convert to Date data type.

MyTime = "4:35:47 PM" ' Define time.
MyShortTime = CDate(MyTime) ' Convert to Date data type.

▌ CDbl(expression):Double

将表达式转换为 Double。

示例

Dim MyCurr, MyDouble
MyCurr = CCur(234.456784) ' MyCurr is a Currency.
MyDouble = CDbl(MyCurr * 8.2 * 0.01) ' Convert result to a Double.

▌ CDec(expression):Decimal

将数值转换为 Decimal。

示例

Dim MyDecimal, MyCurr
MyCurr = 10000000.0587 ' MyCurr is a Currency.
MyDecimal = CDec(MyCurr) ' MyDecimal is a Decimal.

▌CInt(expression):Integer

将值转换为 Integer。将其四舍五入为最接近的数

示例

Dim MyDouble, MyInt
MyDouble = 2345.5678 ' MyDouble is a Double.
MyInt = CInt(MyDouble) ' MyInt contains 2346.

▌CLng(expression):Long

将值转换为 Long。将其四舍五入为最接近的数

示例

Dim MyVal1, MyVal2, MyLong1, MyLong2
MyVal1 = 25427.45: MyVal2 = 25427.55 ' MyVal1, MyVal2 are Doubles.
MyLong1 = CLng(MyVal1) ' MyLong1 contains 25427.
MyLong2 = CLng(MyVal2) ' MyLong2 contains 25428.

▌CSng(expression):Single

将值转换为 Single。

示例

Dim MyDouble1, MyDouble2, MySingle1, MySingle2
' MyDouble1, MyDouble2 are Doubles.
MyDouble1 = 75.3421115: MyDouble2 = 75.3421555
MySingle1 = CSng(MyDouble1) ' MySingle1 contains 75.34211.
MySingle2 = CSng(MyDouble2) ' MySingle2 contains 75.34216.

▌ CStr(expression):String

将数值转换为 String。

示例

Dim MyDouble, MyString
MyDouble = 437.324 ' MyDouble is a Double.
MyString = CStr(MyDouble) ' MyString contains "437.324".

▌ CVar(expression):Variant
将表达式转换为 Variant。

示例

Dim MyInt, MyVar
MyInt = 4534 ' MyInt is an Integer.
MyVar = CVar(MyInt & 000) ' MyVar contains the string
 ' 4534000.

■ 其他函数

[▌Array( ...arglist As Variant[] )](#array) as Array<Variant>

返回一个包含数组的 Variant。

示例

Dim MyWeek, MyDay
MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
' Return values assume lower bound set to 1 (using Option Base
' statement).
MyDay = MyWeek(2)    ' MyDay contains "Tue".
MyDay = MyWeek(4)    ' MyDay contains "Thu".

[▌CallByName( object, procname, calltype, [args()] )](#callbyname)
执行对象的方法,或者设置或返回对象的属性。

object必需: Object。 将对其执行函数的对象的名称。
procname必需: String。 包含对象的属性或方法的名称的字符串表达式。
calltype必需:一个类型为 vbCallType 的常量,它表示要调用的过程的类型。
args ()可选:Array

示例

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

Private Sub Form_Load()
    Label1.Caption = "Move"        ' Name of Move method.
End Sub

Private Sub Command1_Click()
    If Command1.Left <> 0 Then
        CallByName Command1, Label1.Caption, vbMethod, 0, 0
    Else
        CallByName Command1, Label1.Caption, vbMethod, 500, 500
    End If

[▌Choose( index, choice-1, [ choice-2, ..., [ choice-n ]] )](#choose) as

从参数列表选择和返回值。

index必需。 其值介于1到可用选项的数量之间。
choice必需。 包含一个可能的选择的变量表达式。

示例

Function GetChoice(Ind As Integer)
    GetChoice = Choose(Ind, "Speedy", "United", "Federal")
End Function

▌Date( ) as Date

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

示例

Dim MyDate
MyDate = Date    ' MyDate contains the current system date.

[▌DateDiff( interval, date1, date2, [ firstdayofweek, [ firstweekofyear ]] )](#datediff) as Long

指定两个指定的日期之间的时间间隔数。

interval必需。 表示用于计算 date1 和 date2 之间差异的时间间隔的字符串表达式。
date1、date2必需;Variant (Date)。 要在计算中使用的两个日期。
firstdayofweek可选。 一个指定一周的第一天的常量。 如果未指定,则会假定为星期日。
firstweekofyear可选。 一个指定一年的第一周的常量。 如果未指定,则会假定 1 月 1 日出现的那一周为第一周。

interval 参数

yyyy
q季度
m
y每年的某一日
d
w工作日
ww
h小时
n分钟
s

firstdayofweek 参数

vbSunday1周日(默认)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

firstweekofyear 参数

vbUseSystem0使用 NLS API 设置。
vbFirstJan11从 1 月 1 日所在的周开始(默认)。
vbFirstFourDays2从至少包含新的一年中的四天的那一周开始。
vbFirstFullWeek3从每年的第一个完整的星期开始。

示例

Dim TheDate As Date    ' Declare variables.
Dim Msg
TheDate = InputBox("Enter a date")
Msg = "Days from today: " & DateDiff("d", Now, TheDate)
MsgBox Msg

[▌DatePart( interval、 date、[ firstdayofweek,[ firstweekofyear ]] )](#datepart) as

Format 或 DatePart 函数可能返回一年中的上一个星期一的错误周数。

示例

Dim TheDate As Date    ' Declare variables.
Dim Msg
TheDate = InputBox("Enter a date:")
Msg = "Quarter: " & DatePart("q", TheDate)
MsgBox Msg

▌DateSerial( year, month, day ) as Date

返回指定年月日的 Date 。

year必需;类型为 Integer。 介于 100 和 9999 之间(含 100 和 9999)的数字或者数字表达式。
month必需;类型为 Integer。 任何数字表达式。
为期必需;类型为 Integer。 任何数字表达式。

示例

Dim MyDate
' MyDate contains the date for February 12, 1969.
MyDate = DateSerial(1969, 2, 12)    ' Return a date.

▌DateValue( date As String|Date) as Date

如果_date_是一个仅包含由有效日期分隔符分隔的数字的字符串, 则DateValue将根据您为系统指定的短日期格式识别月、日和年的顺序。 DateValue 还能清楚地识别包含月名称(长名称或简写形式)的日期。 例如,除了识别 12/30/1991 和 12/30/91 之外,DateValue 还识别 December 30, 1991 和 Dec 30, 1991。
如果省略 date 的年部分,则 DateValue 将使用计算机系统日期中的当前年。
如果 date 参数包含时间信息,则 DateValue 将不会返回它。 但是,如果 date 包含的时间信息无效(如“89:98”),则将出错。

示例

Dim MyDate
MyDate = DateValue("February 12, 1969")    ' Return a date.

▌Day( date As Number|String|Null) as Integer

返回一个Integer,它指定一个表示月中的某一天的介于 1 和 31(含 1 和 31)之间的整数。

示例

Dim MyDate, MyDay
MyDate = #February 12, 1969#    ' Assign a date.
MyDay = Day(MyDate)    ' MyDay contains 12.

[▌DDB( cost, salvage, life, period, [ factor ] )](#ddb) as Double

返回一个double , 它使用双倍余额递减法或其他指定方法来指定特定时间段内资产的折旧值。

cost必需。 指定资产的初始成本的双精度型。
salvage必需。 ** 在其使用寿命结束时指定资产的价值。
life必需。 指定资产使用年限的长度的double 。
period必需。 指定计算资产折旧的时段的double 。
factor可选。 指定余额下降比率的Variant 。 若省略它,则假定为 2(双倍余额递减法)。

示例

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, Depr
Const YRMOS = 12    ' Number of months in a year.
Fmt = "###,##0.00"
InitCost = InputBox("What's the initial cost of the asset?")
SalvageVal = InputBox("Enter the asset's value at end of its life.")
MonthLife = InputBox("What's the asset's useful life in months?")
Do While MonthLife < YRMOS    ' Ensure period is >= 1 year.
    MsgBox "Asset life must be a year or more."
    MonthLife = InputBox("What's the asset's useful life in months?")
Loop
LifeTime = MonthLife / YRMOS    ' Convert months to years.
If LifeTime <> Int(MonthLife / YRMOS) Then
    LifeTime = Int(LifeTime + 1)    ' Round up to nearest year.
End If
DepYear = CInt(InputBox("Enter year for depreciation calculation."))
Do While DepYear < 1 Or DepYear > LifeTime
    MsgBox "You must enter at least 1 but not more than " & LifeTime
    DepYear = InputBox("Enter year for depreciation calculation.")
Loop
Depr = DDB(InitCost, SalvageVal, LifeTime, DepYear)
MsgBox "The depreciation for year " & DepYear & " is " & _
Format(Depr, Fmt) & "."

[▌Dir( pathname, [ attributes ] )](#dir) as String

它表示与指定模式或文件属性或驱动器的卷标匹配的文件、目录或文件夹的名称。

pathname可选。 指定文件名的字符串表达式,可包括目录或文件夹和驱动器。 如果未找到 pathname,则返回零长度字符串 ("")。
attributes可选。 其和指定文件属性的常量或数值表达式。 如果省略它,则返回与 pathname 匹配但没有属性的文件。
vbNormal0(默认)指定没有属性的文件。
vbReadOnly1指定只读文件以及不带属性的文件。
vbHidden2指定隐藏文件以及不带属性的文件。
vbSystem4指定系统文件以及不带属性的文件。 在 Macintosh 上不可用。
vbVolume8指定卷标;如果指定任何其他属性,则忽略 vbVolume。 在 Macintosh 上不可用。
vbDirectory16指定目录或文件夹以及不带属性的文件。
vbAlias64指定文件名为别名。 仅在 Macintosh 上可用。

示例

'返回当前文件夹中的第一个 TEXT 文件的名称:
Dir("SomePath", MacID("TEXT"))
'若要循环访问文件夹中的所有文件,请指定一个空字符串
Dir("")

▌DoEvents( ) as Integer

VB中打开的窗体的数目

示例

' Create a variable to hold number of Visual Basic forms loaded
' and visible.
Dim I, OpenForms
For I = 1 To 150000    ' Start loop.
    If I Mod 1000 = 0 Then     ' If loop has repeated 1000 times.
        OpenForms = DoEvents    ' Yield to operating system.
    End If
Next I    ' Increment loop counter.

▌Environ( { envstring | number } ) as String

返回与操作系统环境变量关联的 字符串 。在 Macintosh 中不可用。

示例

Dim EnvString, Indx, Msg, PathLen    ' Declare variables.
Indx = 1    ' Initialize index to 1.
Do
    EnvString = Environ(Indx)    ' Get environment
                ' variable.
    If Left(EnvString, 5) = "PATH=" Then    ' Check PATH entry.
        PathLen = Len(Environ("PATH"))    ' Get length.
        Msg = "PATH entry = " & Indx & " and length = " & PathLen
        Exit Do
    Else
        Indx = Indx + 1    ' Not PATH entry,
    End If    ' so increment.
Loop Until EnvString = ""
If PathLen > 0 Then
    MsgBox Msg    ' Display message.
Else
    MsgBox "No PATH environment variable exists."
End If

▌EOF( filenumber ) as Integer

使用 EOF 可避免在尝试超出文件的末尾来获取输出时产生错误。EOF 函数返回 False,直到到达文件的末尾。 对于以随机或二进制访问方式打开的文件, EOF将返回False , 直到最后一个执行的 Get 语句无法读取整条记录。

示例

Dim InputData
Open "MYFILE" For Input As #1    ' Open file for input.
Do While Not EOF(1)    ' Check for end of file.
    Line Input #1, InputData    ' Read line of data.
    Debug.Print InputData    ' Print to the Immediate window.
Loop
Close #1    ' Close file.

[▌Error( [errornumber As Interger ] )](#error) as String

返回与给定错误代码相对应的错误消息。

示例

Private Sub PrintError()
    Dim ErrorNumber As Long, count As Long
    count = 1: ErrorNumber = 1
    On Error GoTo EOSb
    Do While count < 100
        Do While Error(ErrorNumber) = "Application-defined or object-defined error": ErrorNumber = ErrorNumber + 1: Loop
        Debug.Print count & "-Error(" & ErrorNumber & "): " & Error(ErrorNumber)
        ErrorNumber = ErrorNumber + 1
        count = count + 1
    Loop
EOSb: Debug.Print ErrorNumber
End Sub

▌FileAttr( filenumber As Integer , returntype As Integer ) as Long

使用 Open 语句打开的文件的文件模式。

filenumber必需;类型为 Integer。 任何有效文件号。
returntype必需;Integer。 指示要返回的信息类型的数值。 指定 1 将返回指示文件模式的值。 只在 16 位系统上,指定 2 来检索操作系统文件句柄。 Returntype 2 在 32 位系统上不受支持并会导致错误。

当 returntype 参数为1时, 下列返回值指示文件访问模式:

Input1
Output2
Random4
Append8
Binary32

示例

Dim FileNum, Mode, Handle
FileNum = 1    ' Assign file number.
Open "TESTFILE" For Append As FileNum    ' Open file.
Mode = FileAttr(FileNum, 1)    ' Returns 8 (Append file mode).
Handle = FileAttr(FileNum, 2)    ' Returns file handle.
Close FileNum    ' Close file.

▌FileDateTime( pathname As String) as Date

返回指示文件创建或最后修改的 Variant (Date)。

示例

Dim MyStamp
' Assume TESTFILE was last modified on February 12, 1993 at 4:35:47 PM.
' Assume English/U.S. locale settings.
MyStamp = FileDateTime("TESTFILE")    ' Returns "2/12/93 4:35:47 PM".

▌FileLen( pathname As String) as Long

返回一个指定文件长度(以字节为单位)的 Long 值。

示例

Dim MySize
MySize = FileLen("TESTFILE")    ' Returns file length (bytes).

[▌Filter( sourcearray, match, [ include, [ compare ]] )](#filter) as Array

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

sourcearray必需。 要搜索的字符串的一维度组。
match必需。 要搜索的字符串。
include可选。 Boolean 值,指示是否返回包括或排除 match 的子字符串。 如果 include 为 True,则 Filter 返回包含 match作为子字符串的数组的子集。 如果 include 为 False,则 Filter 返回不包含 match 作为子字符串的数组的子集。
compare可选。 指示要使用的字符串比较类型的数值。 请参阅“设置”部分了解相关值。
vbUseCompareOption-1使用 Option Compare 语句的设置来执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文本比较。
vbDatabaseCompare2仅用于 Microsoft Access。 根据数据库中的信息执行比较。

[▌FormatCurrency( Expression、[ NumDigitsAfterDecimal, [ IncludeLeadingDigit, [ UseParensForNegativeNumbers, [ GroupDigits ]]]] )](#formatcurrency) as Currency

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

Expression必需。 要格式化的表达式。
NumDigitsAfterDecimal可选。 指示要显示的小数点右侧的位数的数值。 默认值为-1, 表示使用计算机的区域设置。
IncludeLeadingDigit可选。 指示是否为小数值显示前导零的三态常数。 请参阅“设置”部分以了解各个值。
UseParensForNegativeNumbers可选。 指示是否在圆括号内放置负值的三态常数。 请参阅“设置”部分以了解各个值。
GroupDigits可选。 三态常量, 指示是否使用计算机的区域设置中指定的组分隔符对数字进行分组。 请参阅“设置”部分以了解各个值。

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数包含以下设置:

vbTrue-1True
vbFalse0False
vbUseDefault-2使用计算机的区域设置中的设置。

[▌FormatDateTime( Date、[ NamedFormat ] )](#formatdatetime) as Date

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

Date必需。 要设置格式的日期表达式。
NamedFormat可选。 指示所使用的日期/时间格式的数值。 如果省略,则会使用 vbGeneralDate
vbGeneralDate0显示日期和/或时间。 如果存在日期部分,则将其显示为短日期。 如果存在时间部分,则显示为长时间。 如果存在这两个部分,则这两个部分均会显示。
vbLongDate1使用计算机的区域设置中指定的长日期格式显示日期。
vbShortDate2使用计算机的区域设置中指定的短日期格式显示日期。
vbLongTime3使用计算机的区域设置中指定的时间格式显示时间。
vbShortTime4使用24小时制 (hh: mm) 显示时间。

[▌FormatNumber( Expression、[ NumDigitsAfterDecimal, [ IncludeLeadingDigit, [ UseParensForNegativeNumbers, [ GroupDigits ]]]] )](#formatnumber) as Number

返回数字格式的表达式。

Expression必需。 要格式化的表达式。
NumDigitsAfterDecimal可选。 指示要显示的小数点右侧的位数的数值。 默认值为-1, 表示使用计算机的区域设置。
IncludeLeadingDigit可选。 指示是否为小数值显示前导零的三态常数。 请参阅“设置”部分以了解各个值。
UseParensForNegativeNumbers可选。 指示是否在圆括号内放置负值的三态常数。 请参阅“设置”部分以了解各个值。
GroupDigits可选。 三态常量, 指示是否使用计算机的区域设置中指定的组分隔符对数字进行分组。 请参阅“设置”部分以了解各个值。

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数包含以下设置:

vbTrue-1True
vbFalse0False
vbUseDefault-2使用计算机的区域设置中的设置。

[▌FormatPercent( Expression、[ NumDigitsAfterDecimal, [ IncludeLeadingDigit, [ UseParensForNegativeNumbers, [ GroupDigits ]]]] )](#formatpercent) as String

Expression必需。 要格式化的表达式。
NumDigitsAfterDecimal可选。 指示要显示的小数点右侧的位数的数值。 默认值为-1, 表示使用计算机的区域设置。
IncludeLeadingDigit可选。 指示是否为小数值显示前导零的三态常数。 请参阅“设置”部分以了解各个值。
UseParensForNegativeNumbers可选。 指示是否在圆括号内放置负值的三态常数。 请参阅“设置”部分以了解各个值。
GroupDigits可选。 三态常量, 指示是否使用计算机的区域设置中指定的组分隔符对数字进行分组。 请参阅“设置”部分以了解各个值。

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数包含以下设置:

vbTrue-1True
vbFalse0False
vbUseDefault-2使用计算机的区域设置中的设置。

▌FreeFile( rangenumber ) as Number

返回一个整数, 表示可由Open 语句使用的下一个文件号。

更多


[▌FV( rate, nper, pmt, [ pv, [ type ]] )](#fv) as Double

返回一个double , 它基于定期固定付款和固定利率指定年金的未来值。

年金是一段时间内一系列的固定的现金付款。 年金可以是贷款(如房产抵押),也可以是投资(如月存款计划)。
必须使用以相同单位表示的付款时段计算 rate 和 nper 参数。 例如, 如果 rate 是使用月计算的, 则还必须使用月计算 nper 。
对于所有参数,已支出现金(例如,存款储蓄)用负数表示;已收现金(例如,股利支票)用正数表示。

rate必需。 指定每个周期的利率的 Double。 例如,如果您获得了年利率 (APR) 为 10% 的汽车贷款并进行月供,则每期利率为 0.1/12 或 0.0083。
nper必需。 指定年金付款期的总数的 Integer。 例如,如果您每月偿还为期 4 年的汽车贷款,则您的贷款期总数为 4 * 12(或 48)。
pmt必需。 指定每个月的付款的 Double。 付款通常包含了在该年金时期间不会改变的本金和利息。
pv可选。 指定一系列未来付款的当前值(或总计)的 Variant。 例如,当您借钱买车时,贷款金额为其支付每月汽车付款的借方的当前值。 如果省略了,便假设为 0。
type可选。 指定付款的到期时间的 Variant。 如果付款在付款期结束时到期,则使用 0;如果付款在付款期开始时到期,则使用 1。 如果省略,则假定为 0。

示例

Dim Fmt, Payment, APR, TotPmts, PayType, PVal, FVal
Const ENDPERIOD = 0, BEGINPERIOD = 1    ' When payments are made.
Fmt = "###,###,##0.00"    ' Define money format.
Payment = InputBox("How much do you plan to save each month?")
APR = InputBox("Enter the expected interest annual percentage rate.")
If APR > 1 Then APR = APR / 100    ' Ensure proper form.
TotPmts = InputBox("For how many months do you expect to save?")
PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)
If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD
PVal = InputBox("How much is in this savings account now?")
FVal = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)
MsgBox "Your savings will be worth " & Format(FVal, Fmt) & "."

▌GetAllSettings( appname, section ) as Array

更多


▌GetAttr( pathname As String) as Integer

返回表示文件、目录或文件夹的属性的 Integer 。

GetAttr 所返回的值是以下属性值的和:

vbNormal0正常。
vbReadOnly1只读。
vbHidden2可见.
vbSystem4系统文件。 在 Macintosh 上不可用。
vbDirectory2目录或文件夹。
vbArchive32文件自上次备份以来已发生更改。 在 Macintosh 上不可用。
vbAlias64指定文件名为别名。 仅在 Macintosh 上可用。

示例

'如果未设置 Archive 属性,则以下 And 表达式的返回值为零
Result = GetAttr(FName) And vbArchive

Dim MyAttr
' Assume file TESTFILE has hidden attribute set.
MyAttr = GetAttr("TESTFILE")    ' Returns 2.

' Returns nonzero if hidden attribute is set on TESTFILE.
Debug.Print MyAttr And vbHidden

' Assume file TESTFILE has hidden and read-only attributes set.
MyAttr = GetAttr("TESTFILE")    ' Returns 3.

' Returns nonzero if hidden attribute is set on TESTFILE.
Debug.Print MyAttr And (vbHidden + vbReadOnly)

' Assume MYDIR is a directory or folder.
MyAttr = GetAttr("MYDIR")    ' Returns 16.

▌Hour( time ) as Integer

返回指定表示一天的小时的 0 到 23 之间(含这两个值)的整数的变量(整数)。

示例

Dim MyTime, MyHour
MyTime = #4:35:17 PM#    ' Assign a time.
MyHour = Hour(MyTime)    ' MyHour contains 16.

▌IIf( expr, truepart, falsepart ) as Any

expr必需。 要计算的表达式。
truepart必需。 expr 为 True 时返回的值或表达式。
falsepart必需。 expr 为 False 时返回的值或表达式。

示例

Function CheckIt (TestMe As Integer)
    CheckIt = IIf(TestMe > 1000, "Large", "Small")
End Function


[▌Input( number, [ # ]filenumber )](#Input) as String

从以 Input 或 Binary 模式打开的文件中返回包含字符的String。

number必需。 指定要返回字符个数的任意有效的数值表达式。
filenumber必需。 任何有效的文件编号。

示例

Dim MyChar
Open "TESTFILE" For Input As #1    ' Open file.
Do While Not EOF(1)    ' Loop until end of file.
    MyChar = Input(1, #1)    ' Get one character.
    Debug.Print MyChar    ' Print to the Immediate window.
Loop
Close #1    ' Close file.

[▌InputBox( prompt, [ title ], [ default ], [ xpos ], [ ypos ], [ helpfile, context ] )](#InputBox) as String

在对话框中显示提示,等待用户输入文本或单击按钮,然后返回包含文本框内容的字符串。

prompt必需项。 字符串表达式在对话框中显示为消息。 prompt 的最大长度约为 1024 个字符,具体取决于所使用的字符的宽度。 如果_prompt_包含多行, 则可以使用回车符 (chr(13))、换行符 (chr(10)) 或回车换行符组合 ((chr (13) & ((chr (13)) 来分隔行。 ((chr(13) (** 每个行的 Chr (10))。
title可选。 对话框标题栏中显示的字符串表达式。 如果省略 title,则标题栏中将显示应用程序名称。
default可选。 文本框中显示的字符串表达式,在未提供其他输入时作为默认响应。 如果省略了 default,文本框将显示为空。
xpos可选。 指定对话框的左边缘与屏幕的左边缘的水平距离(以缇为单位)的数值表达式。 如果省略了 xpos,对话框将水平居中。
ypos可选。 指定对话框的上边缘与屏幕的顶部的垂直距离(以缇为单位)的数值表达式。 如果省略了 ypos,对话框将位于屏幕垂直方向往下大约三分之一的位置。
helpfile可选。 用于标识帮助文件的字符串表达式,前者用于为对话框提供上下文相关的帮助。 如果提供 helpfile,则也必须提供 context。
context可选。 帮助上下文数值的数值表达式,该数值由帮助作者为相应的帮助主题分配。 如果提供 context,则也必须提供 helpfile。

示例

Dim Message, Title, Default, MyValue
Message = "Enter a value between 1 and 3"    ' Set prompt.
Title = "InputBox Demo"    ' Set title.
Default = "1"    ' Set default.
' Display message, title, and default value.
MyValue = InputBox(Message, Title, Default)

' Use Helpfile and context. The Help button is added automatically.
MyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)

' Display dialog box at position 100, 100.
MyValue = InputBox(Message, Title, Default, 100, 100)

[▌InStr( [ start ], string1, string2, [ compare ] )](#InStr) as Long

返回一个 Variant (Long) 值,指定一个字符串在另一个字符串中首次出现的位置。

start可选。 设置每次搜索的起始位置的数字表达式。 如果忽略,则搜索从第一个字符位置开始。 如果 start 包含 Null,则出现错误。 如果指定了 compare,则 start 参数是必需的。
string1必需。 要搜索的字符串表达式。
string2必需。 搜索到的字符串表达式。
compare可选。 指定字符串比较的类型。 如果 compare 为 Null,则将发生错误。 如果省略 compare,则 Option Compare 设置将决定比较的类型。 指定有效的 LCID (LocaleID) 以在比较中使用区域设置特定规则。
vbUseCompareOption-1使用 Option Compare 语句的设置执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文本比较。
vbDatabaseCompare2仅用于 Microsoft Access。 根据数据库中的信息执行比较。
string1 是零长度0
string1 为 NullNULL
string2 是零长度start
string2 为 NullNULL
未找到 string20
在 string1 中找到 string2找到匹配的位置
start > string20

示例

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"    ' String to search in.
SearchChar = "P"    ' Search for "P".

' A textual comparison starting at position 4. Returns 6.
MyPos = Instr(4, SearchString, SearchChar, 1)

' A binary comparison starting at position 1. Returns 9.
MyPos = Instr(1, SearchString, SearchChar, 0)

' Comparison is binary by default (last argument is omitted).
MyPos = Instr(SearchString, SearchChar)    ' Returns 9.

MyPos = Instr(1, SearchString, "W")    ' Returns 0.

[▌InStrRev( stringcheck, stringmatch, [ start, [ compare ]] )](#InStrRev) as Long

返回一个字符串在另一个字符串中首次出现的位置(从字符串的末尾开始)。

stringcheck必需。 要搜索的字符串表达式。
stringmatch必需。 所搜索到的字符串表达式。
start可选。 设置每次搜索的起始位置的数字表达式。 如果省略,则使用 -1,这意味着搜索将从最后一个字符位置开始。 如果 start 包含 Null,则出现错误。
compare可选。 指示计算子字符串时使用的比较类型的数值。 如果省略,则将执行二进制比较。 有关各个值的信息,请参阅“设置”部分。
vbUseCompareOption-1使用 Option Compare 语句的设置执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文本比较。
vbDatabaseCompare2仅用于 Microsoft Access。 根据数据库中的信息执行比较。
string1 是零长度0
string1 为 NullNULL
string2 是零长度start
string2 为 NullNULL
未找到 string20
在 string1 中找到 string2找到匹配的位置
start > Len(stringmatch)0

[▌IPmt( rate, per, nper, pv, [ fv, [ type ]] )](#IPmt) as Double

返回一个 Double,它基于定期固定付款和固定利率指定年金的给定期间利率付款。

rate必需。 指定每个周期的利率的 Double。 例如,如果您获得了年利率 (APR) 为 10% 的汽车贷款并进行月供,则每期利率为 0.1/12 或 0.0083。
per必需。 指定介于 1 和 nper 之间的付款期次的 Double。
nper必需。 指定年金总付款期数的“Double”*。 例如,如果您要每月偿付四年期限的车贷,您的贷款总付款期为 4 12 (或 48)。
pv必需。 指定一系列未来付款或回执的现值或当前值的“Double”** 。 例如,如果您借钱买了一辆车,贷款金额则为将要向借贷人每月支付车贷的现值。
fv可选。 指定在完成最后付款后所需的未来值或现金余额的 Variant。 例如,贷款的未来值为 $0,因为这是完成最后付款后的值。 但是, 如果您想要在18年的时间内为孩子的教育版节省 $50000, 则 $50000 是未来的价值。 如果省略了,便假设为 0。
type可选。 指定付款的到期时间的 Variant。 如果付款在付款期结束时到期,则使用 0;如果付款在付款期开始时到期,则使用 1。 如果省略,则假定为 0。

示例

Dim FVal, Fmt, PVal, APR, TotPmts, PayType, Period, IntPmt, TotInt, Msg
Const ENDPERIOD = 0, BEGINPERIOD = 1    ' When payments are made.
FVal = 0    ' Usually 0 for a loan.
Fmt = "###,###,##0.00"    ' Define money format.
PVal = InputBox("How much do you want to borrow?")
APR = InputBox("What is the annual percentage rate of your loan?")
If APR > 1 Then APR = APR / 100    ' Ensure proper form.
TotPmts = InputBox("How many monthly payments?")
PayType = MsgBox("Do you make payments at end of the month?", vbYesNo)
If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD
For Period = 1 To TotPmts    ' Total all interest.
    IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)
    TotInt = TotInt + IntPmt
Next Period
Msg = "You'll pay a total of " & Format(TotInt, Fmt)
Msg = Msg & " in interest for this loan."
MsgBox Msg    ' Display results.

[▌IRR( values()、[ guess ] )](#IRR) as Double

返回一个双精度值,该值为一系列定期现金流(付款和收款)指定内部回报率。

值()必需。 用于指定现金流值的双精度数组。 该数组必须包含至少一个负值(付款)和一个正值(收款)。
出来可选。 指定您估计的值的Variant将由IRR返回。 如果省略了,则_推测_为 0.1(10%)。

更多


▌IsArray( varname as Any ) as Boolean

返回指示变量 是否是数组。

示例

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck    ' Declare array variables.
YourArray = Array(1, 2, 3)    ' Use Array function.
MyCheck = IsArray(MyArray)    ' Returns True.
MyCheck = IsArray(YourArray)    ' Returns True.

▌IsDate( expression ) as Boolean

如果表达式是日期或可识别为有效日期或时间,则返回True;否则,返回True。

示例

Dim MyVar, MyCheck
MyVar = "04/28/2014"    ' Assign valid date value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "April 28, 2014"    ' Assign valid date value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "13/32/2014"    ' Assign invalid date value.
MyCheck = IsDate(MyVar)    ' Returns False.

MyVar = "04.28.14"    ' Assign valid time value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "04.28.2014"    ' Assign invalid time value.
MyCheck = IsDate(MyVar)    ' Returns False.

▌IsEmpty( expression ) as Boolean

返回一个指示是否已初始化变量的布尔值。

示例

Dim MyVar, MyCheck
MyCheck = IsEmpty(MyVar)    ' Returns True.

MyVar = Null    ' Assign Null.
MyCheck = IsEmpty(MyVar)    ' Returns False.

MyVar = Empty    ' Assign Empty.
MyCheck = IsEmpty(MyVar)    ' Returns True.

▌IsError( expression ) as Boolean

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

示例

Dim ReturnVal, MyCheck
ReturnVal = UserFunction()
MyCheck = IsError(ReturnVal)    ' Returns True.

▌IsMissing( argname ) as Boolean

返回一个布尔值, 该值指示是否已将可选Variant 参数传递给过程。

示例

Dim ReturnValue
' The following statements call the user-defined function procedure.
ReturnValue = ReturnTwice()    ' Returns Null.
ReturnValue = ReturnTwice(2)    ' Returns 4.

' Function procedure definition.
Function ReturnTwice(Optional A)
    If IsMissing(A) Then
        ' If argument is missing, return a Null.
        ReturnTwice = Null
    Else
        ' If argument is present, return twice the value.
        ReturnTwice = A * 2
    End If
End Function

▌IsNull( expression ) as Boolean

返回指示表达式是否包含无效数据 (Null) 的 Boolean 值。

示例

Dim MyVar, MyCheck
MyCheck = IsNull(MyVar)    ' Returns False.

MyVar = ""
MyCheck = IsNull(MyVar)    ' Returns False.

MyVar = Null
MyCheck = IsNull(MyVar)    ' Returns True.

▌IsNumeric( expression ) as Boolean

返回指示表达式是否可评估为数值的Boolean值。

示例

Dim MyVar, MyCheck
MyVar = "53"    ' Assign value.
MyCheck = IsNumeric(MyVar)    ' Returns True.

MyVar = "459.95"    ' Assign value.
MyCheck = IsNumeric(MyVar)    ' Returns True.

MyVar = "45 Help"    ' Assign value.
MyCheck = IsNumeric(MyVar)    ' Returns False.

▌IsObject( expression ) as Boolean

返回一个指示标识符是否表示某个对象的变量的 Boolean 值。

示例

Dim MyInt As Integer              ' Declare variables.
Dim YourObject, MyCheck           ' Note: Default variable type is Variant.
Dim MyObject As Object
Set YourObject = MyObject         ' Assign an object reference.
MyCheck = IsObject(YourObject)    ' Returns True.
MyCheck = IsObject(MyInt)         ' Returns False.
MyCheck = IsObject(Nothing)       ' Returns True.
MyCheck = IsObject(Empty)         ' Returns False.
MyCheck = IsObject(Null)          ' Returns False.

[▌Join( sourcearray, [ delimiter ] )](#Join) as String

返回通过联接数组中包含的大量子字符串创建的字符串。

sourcearray必需。 一维度组,包含要联接的子字符串。
delimiter可选。 用于分隔返回字符串中子字符串的字符串。 如果省略,将使用空格 ("")。 如果 delimiter 是一个零长度字符串 (""),将连接列表中的所有项,而不使用分隔符。

[▌LBound( arrayname, [ dimension ] )](#LBound) as Long

返回一个 Long 型值,其中包含指示的数组维度的最小可用下标。

arrayname必需。 数组变量的名称;遵循标准变量命名约定。

维度 v可选;Variant (Long)。 指示返回哪个维度的下限的整数。 1 表示第一个维度,2 表示第二个维度,依此类推。 如果省略 dimension,则假定为 1。

示例

Dim Lower
Dim MyArray(1 To 10, 5 To 15, 10 To 20)     ' Declare array variables.
Dim AnyArray(10)
Lower = Lbound(MyArray, 1)     ' Returns 1.
Lower = Lbound(MyArray, 3)    ' Returns 10.
Lower = Lbound(AnyArray)    ' Returns 0 or 1, depending on
    ' setting of Option Base.

▌LCase( string Sd String) as String

返回已转换为小写形式的 String。如果字符串包含 Null,则返回 Null。

示例

Dim UpperCase, LowerCase
Uppercase = "Hello World 1234"    ' String to convert.
Lowercase = Lcase(UpperCase)    ' Returns "hello world 1234".

▌Left( ) as

返回一个包含字符串左侧指定字符数的 Variant (String)。

string必需。 从中返回最左侧字符的字符串表达式。 如果_字符串_包含 Null,则返回 Null。
Length必需;Variant (Long)。 数值表达式指示要返回多少字符。 如果为 0,则返回零长度字符串 ("")。 如果大于或等于“字符串” __ 中的字符数量,则返回整个字符串。

注解

示例

Dim AnyString, MyStr
AnyString = "Hello World"    ' Define string.
MyStr = Left(AnyString, 1)   ' Returns "H".
MyStr = Left(AnyString, 7)   ' Returns "Hello W".
MyStr = Left(AnyString, 20)  ' Returns "Hello World".

▌Len( string | varname ) as Long

返回包含字符串中的字符数或存储变量所需的字节数的长整数。

string任何有效的字符串表达式。 如果_字符串_包含 Null,则返回 Null。
varname任何有效的变量名称。 如果 varname 包含 Null,则返回 Null。 如果 varname 是变量,则 Len 会像处理 String 一样处理它,并始终返回其包含的字符数。

示例

Type CustomerRecord    ' Define user-defined type.
    ID As Integer    ' Place this definition in a
    Name As String * 10    ' standard module.
    Address As String * 30
End Type

Dim Customer As CustomerRecord    ' Declare variables.
Dim MyInt As Integer, MyCur As Currency
Dim MyString, MyLen
MyString = "Hello World"    ' Initialize variable.
MyLen = Len(MyInt)    ' Returns 2.
MyLen = Len(Customer)    ' Returns 42.
MyLen = Len(MyString)    ' Returns 11.
MyLen = Len(MyCur)    ' Returns 8.

▌Loc( filenumber As Integer) as Long

返回指定打开的文件内的当前可读/写位置的 Long。

Random在文件中读取或写入的最后一个记录的编号。
Sequential文件中除以 128 的当前字节位置。 但是,不使用也不需要 Loc 为顺序文件返回的信息。
Binary读取或写入的最后一个字节的位置。

示例

Dim MyLocation, MyLine
Open "TESTFILE" For Binary As #1    ' Open file just created.
Do While MyLocation < LOF(1)    ' Loop until end of file.
    MyLine = MyLine & Input(1, #1)    ' Read character into variable.
    MyLocation = Loc(1)    ' Get current position within file.
' Print to the Immediate window.
    Debug.Print MyLine; Tab; MyLocation
Loop
Close #1    ' Close file.

▌LOF( filenumber ) as Long

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

示例

Dim FileLength
Open "TESTFILE" For Input As #1    ' Open file.
FileLength = LOF(1)    ' Get length of file.
Close #1    ' Close file.

▌LTrim、RTrim 和 Trim( ) as String

返回 字符串 包含指定字符串副本(不含前导空格 (LTrim)、后续空格 (RTrim) 或前导和后续空格 (Trim))。

示例

Dim MyString, TrimString
MyString = "  <-Trim->  "    ' Initialize string.
TrimString = LTrim(MyString)    ' TrimString = "<-Trim->  ".
TrimString = RTrim(MyString)    ' TrimString = "  <-Trim->".
TrimString = LTrim(RTrim(MyString))    ' TrimString = "<-Trim->".
' Using the Trim function alone achieves the same result.
TrimString = Trim(MyString)    ' TrimString = "<-Trim->".

[▌Mid( string, start, [ length ]) )](#Mid) as String

返回一个 Variant (String),其中包含字符串中的指定数量的字符。若要确定字符串中字符的数量,请使用 Len 函数。

string必需。 从中返回字符的字符串表达式。 如果_字符串_包含 Null,则返回 Null。
start必需,Long。 _字符串_中被视为开始部分的字符位置。 如果 start 大于_字符串_中的字符数,则 Mid 返回零长度字符串 ("")。
Length可选;Variant (Long)。 要返回的字符的数目。 如果省略此部分或此部分中的数目少于文本中的 length 字符数(包括 start 处的字符),则将返回从 start 位置到字符串末尾的所有字符。

示例

Dim MyString, FirstWord, LastWord, MidWords
MyString = "Mid Function Demo"    ' Create text string.
FirstWord = Mid(MyString, 1, 3)    ' Returns "Mid".
LastWord = Mid(MyString, 14, 4)    ' Returns "Demo".
MidWords = Mid(MyString, 5)    ' Returns "Function Demo".

▌Minute( time As Variant|Number|String) as Integer

返回指定介于 0 和 59 之间(含 0 和 59)的一个整数的 Variant (Integer),代表分钟数。

示例

Dim MyTime, MyMinute
MyTime = #4:35:17 PM#    ' Assign a time.
MyMinute = Minute(MyTime)    ' MyMinute contains 35.

▌MIRR( values( ), finance_rate, reinvest_rate ) as Double

返回为一系列定期现金流量(付款和收款)指定修改的内部报酬率的 Double 值。

更多


▌Month( date As Variant|Number|String) as Integer

返回指定 1 至 12(包括 1 和 12)之间表示月份的整数的 Variant (Integer)。

示例

Dim MyDate, MyMonth
MyDate = #February 12, 1969#    ' Assign a date.
MyMonth = Month(MyDate)    ' MyMonth contains 2.

[▌MonthName( month, [ abbreviate ] )](#MonthName) as String

返回指定的月份的字符串。

month必需。 月份的数值指定。 例如,一月是 1,二月是 2,依此类推。
缩短可选。 Boolean 值,指示是否要对月份名称采用缩写形式。 如果省略,则默认值为 False,这意味着不对月份名称采用缩写形式。

[▌MsgBox( prompt, [ buttons, ] [ title, ] [ helpfile, context ] )](#MsgBox) as Void

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仅显示“确定”按钮。
vbOKCancel1显示“确定”和“取消”按钮。
vbAbortRetryIgnore2显示“中止”、“重试”和“忽略”按钮。
vbYesNoCancel3显示“是”、“否”和“取消”按钮。
vbYesNo4显示“是”和“否”按钮。
vbRetryCancel5显示“重试”和“取消”按钮。
vbCritical16显示“关键消息”图标。
vbQuestion32显示“警告查询”图标。
vbExclamation48显示“警告消息”图标。
vbInformation64显示“信息消息”图标。
vbDefaultButton10第一个按钮是默认按钮。
vbDefaultButton2256第二个按钮是默认按钮。
vbDefaultButton3512第三个按钮是默认按钮。
vbDefaultButton4768第四个按钮是默认按钮。
vbApplicationModal0应用程序模式;用户在继续在当前应用程序中工作前必须响应消息框。
vbSystemModal4096系统模式;在用户响应消息框前,所有应用程序都挂起。
vbMsgBoxHelpButton16384在消息框中添加“帮助”按钮。
vbMsgBoxSetForeground65536将消息框窗口指定为前景窗口。
vbMsgBoxRight524288文本右对齐。
vbMsgBoxRtlReading1048576指定文本在希伯来语和阿拉伯语系统中应从右到左显示。
vbOK1确定
vbCancel2Cancel
vbAbort3中止
vbRetry4重试
vbIgnore5忽略
vbYes6
vbNo7

示例

Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Do you want to continue ?"    ' Define message.
Style = vbYesNo + vbCritical + vbDefaultButton2    ' Define buttons.
Title = "MsgBox Demonstration"    ' Define title.
Help = "DEMO.HLP"    ' Define Help file.
Ctxt = 1000    ' Define topic context.
        ' Display message.
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then    ' User chose Yes.
    MyString = "Yes"    ' Perform some action.
Else    ' User chose No.
    MyString = "No"    ' Perform some action.
End If

▌Now( ) as Date

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

示例

Dim Today
Today = Now    ' Assign current system date and time.

[▌NPer( rate, pmt, pv, [ fv, [ type ]] )](#NPer) as Double

返回一个Double,该Double根据定期的固定付款额和固定利率指定年金的期数。

更多


▌NPV( ) as Double

返回一个 Double,它基于一系列定期现金流(付款和收款)和贴现率指定投资的净现值。
更多


▌Partition( number, start, stop, interval ) as String

返回 Variant (String),指示数字在计算的一系列范围内出现的位置。

number必需。 要针对区域计算的数字。
start必需。 作为整个数字范围的开头的数字。 该数字不能小于 0。
stop必需。 总数字范围的结束的数字。 该数字不能等于或小于 start。
interval必需。 一个范围和下一个范围之间的差异的数字。 该数字不能小于1。

更多


[▌Pmt( rate, nper, pv, [ fv, [ type ]] )](#Pmt) as Double

返回 Double,以指定基于定期、定额支付和固定利率的年金支付。

更多


[▌PPmt( rate, per, nper, pv, [ fv, [ type ]] )](#PPmt) as Double

返回一个Double,该Double根据定期的固定付款额和固定利率来指定给定年金期间的本金付款。

更多


[▌PV( rate、 nper、 pmt、[ fv、[ type ]] )](#PV) as Double

返回一个 Double,它基于未来要支付的定期固定付款和固定利率指定年金的当前值。

更多


▌QBColor( color ) as Long

返回一个Long,表示与指定颜色编号相对应的RGB颜色代码。


[▌Rate( nper, pmt, pv, [ fv, [ type, [ guess ]]] )](#Rate) as Double

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

更多


[▌Replace( expression、 find、 replace、[ start、[ count, [ compare ]]] )](#Replace) as

expression必需。 包含要替换的子字符串的字符串表达式。
find必需。 要搜索的子字符串。
replace必需。 替换子字符串。
start可选。 要搜索和返回的_表达式_的子字符串的起始位置。 如果省略,则假定此值为 1。
count可选。 要执行子字符串替换的次数。 如果省略, 则默认值为-1, 表示进行所有可能的替换。
compare可选。 指示计算子字符串时使用的比较类型的数值。 请参阅“设置”部分以了解各个值。
vbUseCompareOption-1使用 Option Compare 语句的设置来执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文本比较。
vbDatabaseCompare2仅用于 Microsoft Access。 根据数据库中的信息执行比较。
expression 是零长度的零长度字符串 ("")
expression 是 Null错误。
find 是零长度的expression 的副本。
replace 是零长度的_表达式_的副本已删除_查找_的所有匹配项。
启动 > Len(表达式)零长度字符串。 字符串替换从_start_指示的位置开始。
count 是 0expression 的副本。

▌RGB( red, green, blue ) as Long

返回表示 RGB 颜色值的 Long 整数。

示例

Dim Red, I, RGBValue, MyObject
Red = RGB(255, 0, 0)    ' Return the value for Red.
I = 75    ' Initialize offset.
RGBValue = RGB(I, 64 + I, 128 + I)     ' Same as RGB(75, 139, 203).
MyObject.Color = RGB(255, 0, 0)    ' Set the Color property of MyObject to Red.

▌Right( string, length ) as String

返回了从字符串的右边开始包含特定数目的字符

string必需。 字符串表达式,从中返回最右边的字符。 如果_字符串_包含 Null,则返回 Null。
Length必需;Variant (Long)。 数值表达式指示要返回多少字符。 如果为 0,则返回零长度字符串 ("")。 如果大于或等于“字符串” __ 中的字符数量,则返回整个字符串。

示例

Dim AnyString, MyStr
AnyString = "Hello World"      ' Define string.
MyStr = Right(AnyString, 1)    ' Returns "d".
MyStr = Right(AnyString, 6)    ' Returns " World".
MyStr = Right(AnyString, 20)   ' Returns "Hello World".

[▌Round( expression, [ numdecimalplaces ] )](#Round) as Number

返回四舍五入到指定小数位数的数。

expression必需。 要进行四舍五入的数值表达式。
numdecimalplaces可选。 指示将包含在四舍五入中的小数右侧的位数。 如果省略,则 Round 函数将返回整数。

示例

Round(0.12335,4)
' 0,1234
Round(0.12345,4)
' 0,1234
Round(0.12355,4)
' 0,1236
Round(0.12365,4)
' 0,1236

WorksheetFunction.Round(0.12345,4)
' 0,1235
WorksheetFunction.RoundUp(0.12345,4)
' 0,1235
WorksheetFunction.RoundDown(0.12345,4)
' 0,1234

Round(0.00005,4)
' 0
WorksheetFunction.Round(0.00005,4)
' 0,0001
WorksheetFunction.RoundUp(0.00005,4)
' 0,0001
WorksheetFunction.RoundDown(0.00005,4)
' 0

▌Second( time ) as

返回 0 到 59 之间的整数(其中包含 0、59 这两个数)用于代表一分钟内的秒数。

示例

Dim MyTime, MySecond
MyTime = #4:35:17 PM#    ' Assign a time.
MySecond = Second(MyTime)    ' MySecond contains 17.

▌Seek( filenumber ) as Long

返回一个Long类型的值, 指定使用 Open 语句打开的文件内的当前读/写位置。

Seek返回一个介于1和 2147483647 (相当于 2 ^ 31-1) 的值 (包括这两个值)。

更多


[▌Shell( pathname, [ windowstyle ] )](#Shell) as Double

运行可执行程序并在成功时返回表示程序的任务 ID 的 Variant (Double);否则返回零。

pathname必需;Variant (String)。 要执行的程序的名称以及任何必需的参数或命令行开关;可能包括目录或文件夹和驱动器。 在 Macintosh 中,可以使用 MacID 函数指定应用程序的签名,而不是名称。 以下示例使用 Microsoft Word 的签名:Shell MacID("MSWD")
windowstyle可选。 与要运行程序的窗口的样式对应的 Variant (Integer)。 如果省略 windowstyle,则在最小化焦点的情况下启动程序。 在 Macintosh(系统 7.0 或更高版本)上,windowstyle 仅确定程序在运行时是否获得焦点。
vbHide0窗口将隐藏,并且焦点将传递给隐藏窗口。 vbHide 常量在 Macintosh 平台中不适用。
vbNormalFocus1窗口具有焦点且还原为其原始大小和位置。
vbMinimizedFocus2窗口将显示为具有焦点的图标。
vbMaximizedFocus3使用焦点最大化窗口。
vbNormalNoFocus4窗口将还原为其最新的大小和位置。 当前活动窗口仍保持活动状态。
vbMinimizedNoFocus6窗口将显示为图标。 当前活动窗口仍保持活动状态。

示例

' Specifying 1 as the second argument opens the application in
' normal size and gives it the focus.
Dim RetVal
RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)    ' Run Calculator.

▌SLN( cost, salvage, life ) as Double

返回一个 Double,它指定单个周期的资产的线性折旧额。

更多


▌Space( number ) as String

返回由指定的空格数量构成的 String。参数number是要在字符串中留出的空格数。

示例

Dim MyString
' Returns a string with 10 spaces.
MyString = Space(10)

' Insert 10 spaces between two strings.
MyString = "Hello" & Space(10) & "World"

▌Spc( n ) as

print # 语句或 print 方法一起使用以定位输出。
参数n是在显示或打印列表中的下一个表达式之前要插入的空格数。

更多


[▌Split( expression, [ delimiter, [ limit, [ compare ]]] )](#Split) as Array

expression必需。 包含子字符串和分隔符的字符串表达式。 如果 expression 是零长度字符串 (""),则 Split 返回空数组,即不包括任何元素和数据的数组。
delimiter可选。 用于标识子字符串限制的 String 字符。 如果省略,则假定空格符 (" ") 为分隔符。 如果 delimiter 是零长度字符串,则返回包含完整 expression 字符串的只含单一元素的数组。
limit可选。 要返回的子字符串的数目;-1 表示返回所有子字符串。
compare可选。 指示计算子字符串时使用的比较类型的数值。 请参阅“设置”部分以了解各个值。
vbUseCompareOption-1使用 Option Compare 语句的设置来执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文本比较。
vbDatabaseCompare2仅用于 Microsoft Access。 根据数据库中的信息执行比较。

[▌StrComp( string1, string2, [ compare ] )](#StrComp) as Integer

返回指示字符串比较的结果的 Variant (Integer)。

string1必需。 任何有效的字符串表达式。
string2必需。 任何有效的字符串表达式。
compare可选。 指定字符串比较的类型。 如果_compare_ 参数为Null, 则会发生错误。 如果省略 compare,则 Option Compare 设置将决定比较的类型。
vbUseCompareOption-1使用 Option Compare 语句的设置来执行比较。
vbBinaryCompare0执行二进制比较。
vbTextCompare1执行文本比较。
vbDatabaseCompare2仅用于 Microsoft Access。 根据数据库中的信息执行比较。
string1 小于 string2-1
string1 等于 string20
string1 大于 string21
string1 或 string2 为 NullNULL

示例

Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd"    ' Define variables.
MyComp = StrComp(MyStr1, MyStr2, 1)    ' Returns 0.
MyComp = StrComp(MyStr1, MyStr2, 0)    ' Returns -1.
MyComp = StrComp(MyStr2, MyStr1)    ' Returns 1.

[▌StrConv( string, conversion, [ LCID ] )](#StrConv) as String

返回按规定转换的字符串

string必需。 要转换的字符串表达式。
conversion必需。 Integer。 指定要执行的转换的类型的值的总和。
LCID可选。 LocaleID(如果与系统 LocaleID 不同)。 (系统 LocaleID 是默认设置)。

conversion参数

vbUpperCase1将字符串转换为大写字符。
vbLowerCase2将字符串转换为小写字符。
vbProperCase3将字符串中每个单词的第一个字母转换为大写。
vbWide4将字符串中的窄 (单字节) 字符转换为宽 (双字节) 字符。
vbNarrow8将字符串中的宽 (双字节) 字符转换为窄 (单字节) 字符。
vbKatakana16将字符串中的平假名字符转换为片假名字符。
vbHiragana32将字符串中的片假名字符转换为平假名字符。
vbUnicode64使用系统的默认代码页将字符串转换为 Unicode。 (在 Macintosh 上不可用)。
vbFromUnicode128将字符串从 Unicode 转换为系统的默认代码页。 (在 Macintosh 上不可用)

示例

Dim i As Long
Dim x() As Byte
x = StrConv("ABCDEFG", vbFromUnicode)    ' Convert string.
For i = 0 To UBound(x)
    Debug.Print x(i)
Next

▌String( number, character ) as String

返回包含指定长度重复字符串的 Variant (String)。如果为大于255的_字符_指定一个数字, 则字符串将使用以下公式将该数字转换为有效的字符代码:字符 Mod 256。

number必需;Long。 所返回字符串的长度。 如果number包含null, 则返回null 。
通配符必需;Variant。 指定字符或字符串表达式的字符代码,其第一个字符用于构建返回的字符串。 如果字符包含null, 则返回null 。

示例

Dim MyString
MyString = String(5, "*")    ' Returns "*****".
MyString = String(5, 42)    ' Returns "*****".
MyString = String(10, "ABC")    ' Returns "AAAAAAAAAA".

▌StrReverse( ) as String

返回一个字符串,在该字符串中,指定字符串的字符顺序将被颠倒。 如果 expression 是零长度字符串 (""),则会返回零长度字符串。 如果 expression 是 Null,则会发生错误。


[▌Switch( expr-1, value-1, [ expr-2, value-2..., [ expr-n, value-n ]] )](#Switch) as Any

计算表达式的列表并返回与列表中第一个结果为 True 的表达式关联的 Variant 值或表达式。

expr必需。 要计算的变体表达式。
value必需。 要在相应表达式为 True 时返回的值或表达式。

示例

Function MatchUp(CityName As String)
    Matchup = Switch(CityName = "London", "English", CityName _
                    = "Rome", "Italian", CityName = "Paris", "French")
End Function

▌SYD( ) as Double

返回一个 Double,该值指定某项资产在指定期间的年限总额折旧。

更多


▌Tab( n ) as void

print # 语句或print 方法一起使用以定位输出。当您使用 Tab 函数和 Print 方法时,打印图面将划分为统一的固定宽度的列。 每列的宽度为所选字体的点大小中所有字符的宽度的平均值。

示例

Debug.Print Tab(10); "10 columns from start."

▌Time( ) as Date

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

示例

Dim MyTime
MyTime = Time    ' Return current system time.

▌Timer( ) as Single

返回表示自午夜以来已过的秒数的 Single 。

示例

Dim PauseTime, Start, Finish, TotalTime
If (MsgBox("Press Yes to pause for 5 seconds", 4)) = vbYes Then
    PauseTime = 5    ' Set duration.
    Start = Timer    ' Set start time.
    Do While Timer < Start + PauseTime
        DoEvents    ' Yield to other processes.
    Loop
    Finish = Timer    ' Set end time.
    TotalTime = Finish - Start    ' Calculate total time.
    MsgBox "Paused for " & TotalTime & " seconds"
Else
    End
End If

▌TimeSerial( hour, minute, second ) as Date

返回包含特定的小时、分钟和秒所对应的时间的 Variant (Date)。

hour必需;Variant (Integer)。 介于 0 (12:00 A.M.) 和 23 (11:00 P.M.) 之间的数字(含这两个数字)或数值表达式。
minute必需;Variant (Integer)。 任何数值表达式。
second必需;Variant (Integer)。 任何数值表达式。

示例

'上午5:45:00
TimeSerial(12 - 6, -15, 0)


Dim MyTime
MyTime = TimeSerial(16, 35, 17)    ' MyTime contains serial
    ' representation of 4:35:17 PM.

▌TimeValue( time ) as Date

返回包含时间的 Variant (Date)。 必需的time参数通常是一个字符串表达式, 表示从 0:00:00 (12:00:00 A.M.) 到 23:59:59 (11:59:59 P.M.) 的时间 (包括这两个时间)。 但是,time 也可以是表示该范围内时间的任意表达式。 如果 time 包含 Null,则返回 Null。

示例

Dim MyTime
MyTime = TimeValue("4:35:17 PM")    ' Return a time.

▌TypeName( varname ) as String

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

TypeName 字符串

object type类型为 objecttype 的对象
Byte字节值
Integer整数
Long长整数
Single单精度浮点数
Double双精度浮点数
Currency货币值
Decimal小数值
Date日期值
String字符串
Boolean布尔值
Error错误值
Empty
NULL
Object对象
Unknown类型未知的对象
Nothing未引用对象的对象变量

示例

' Declare variables.
Dim NullVar, MyType, StrVar As String, IntVar As Integer, CurVar As Currency
Dim ArrayVar (1 To 5) As Integer
NullVar = Null    ' Assign Null value.
MyType = TypeName(StrVar)    ' Returns "String".
MyType = TypeName(IntVar)    ' Returns "Integer".
MyType = TypeName(CurVar)    ' Returns "Currency".
MyType = TypeName(NullVar)    ' Returns "Null".
MyType = TypeName(ArrayVar)    ' Returns "Integer()".

[▌UBound( arrayname, [ dimension ] )](#UBound) as Long

返回包含指定的数组维度的最大可用下标的Long数据类型。

示例

Dim Upper
Dim MyArray(1 To 10, 5 To 15, 10 To 20)    ' Declare array variables.
Dim AnyArray(10)
Upper = UBound(MyArray, 1)    ' Returns 10.
Upper = UBound(MyArray, 3)    ' Returns 20.
Upper = UBound(AnyArray)      ' Returns 10.

▌UCase( string ) as String

返回包含转换为大写字母的指定字符串的 Variant (String)。如果_字符串包含 Null,则返回 Null。

示例

Dim LowerCase, UpperCase
LowerCase = "Hello World 1234"    ' String to convert.
UpperCase = UCase(LowerCase)    ' Returns "HELLO WORLD 1234".

▌VarType( varname ) as Integer

返回一个整数, 指示变量的子类型或对象的默认属性的类型。

返回值
要么是下列常量之一, 要么返回其中一个数的总和。

vbEmpty0空(未初始化)
vbNull1Null(不是有效数据)
vbInteger2Integer
vbLong3长整数
vbSingle4单精度浮点数
vbDouble5双精度浮点数
vbCurrency6货币值
vbDate7日期值
vbString8String
vbObject9对象
vbError10错误值
vbBoolean11布尔值
vbVariant12Variant(仅与变量的数组一起使用)
vbDataObject13数据访问对象
vbDecimal14小数值
vbByte17字节值
vbLongLong20LongLong整数 (仅在64位平台上有效)
vbUserDefinedType36包含用户定义类型的变量
vbArray8192数组 (此函数返回时总是添加到另一个常量)

示例

Dim MyCheck
Dim IntVar, StrVar, DateVar, AppVar, ArrayVar
' Initialize variables.
IntVar = 459: StrVar = "Hello World": DateVar = #2/12/1969#
Set AppVar = Excel.Application
ArrayVar = Array("1st Element", "2nd Element")
' Run VarType function on different types.
MyCheck = VarType(IntVar)   ' Returns 2.
MyCheck = VarType(DateVar)  ' Returns 7.
MyCheck = VarType(StrVar)   ' Returns 8.
MyCheck = VarType(AppVar)   ' Returns 8 (vbString)
                            ' even though AppVar is an object.
MyCheck = VarType(ArrayVar) ' Returns 8204 which is
                            ' `8192 + 12`, the computation of
                            ' `vbArray + vbVariant`.

[▌Weekday( date、[ firstdayofweek ] )](#Weekday) as Integer

返回包含一个整数的 Variant (Integer),该整数表示星期数。

date必需。 可以表示日期的 Variant、数值表达式、字符串表达式或任意组合。 如果 date 包含 Null,则返回 Null。

firstdayofweek 可选。 一个指定一周的第一天的常量。 如果不指定,则假定为 vbSunday。

firstdayofweek 参数,weekday返回值

vbSunday1周日(默认)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

示例

Dim MyDate, MyWeekDay
MyDate = #February 12, 1969#    ' Assign a date.
MyWeekDay = Weekday(MyDate)    ' MyWeekDay contains 4 because
    ' MyDate represents a Wednesday.

▌WeekdayName( weekday, abbreviate, firstdayofweek ) as

weekday必需。 表示一周中的某一天的数字标识。 一周中的每一天的 Numeric 值取决于 firstdayofweek 设置的设置。
abbreviate可选。 指示一周中的每一天的名称是否为缩写的 Boolean 值。 如果省略,则默认值为 False,其意味着一周中的每一天的名称不是缩写的。
firstdayofweek可选。 指示一周的第一天的 Numeric 值。 请参阅“设置”部分以了解各个值。

firstdayofweek 参数

vbSunday1周日(默认)
vbMonday2星期一
vbTuesday3星期二
vbWednesday4星期三
vbThursday5星期四
vbFriday6星期五
vbSaturday7星期六

▌Year( date ) as Integer

返回包含表示年的整数的变量(整数)。

示例

Dim MyDate, MyYear
MyDate = #February 12, 1969#    ' Assign a date.
MyYear = Year(MyDate)    ' MyYear contains 1969.

VB语句

[AppActivate title、[ wait ]](#AppActivate)

title必需。 指定要激活的应用程序窗口的标题栏中的标题的字符串表达式。 可使用 Shell 函数返回的任务 ID 代替 title 激活应用程序。
wait可选。 指定在激活另一个应用程序之前,调用应用程序是否具有焦点的 Boolean 值。 如果为 False(默认值),则将立即激活指定应用程序,即使调用应用程序没有焦点也是如此。 如果为 True, 则调用应用程序将一直等待, 直到它获得焦点, 然后激活指定的应用程序。

示例

Dim MyAppID, ReturnValue
AppActivate "Microsoft Word" ' Activate Microsoft
 ' Word.

' AppActivate can also use the return value of the Shell function.
MyAppID = Shell("C:\WORD\WINWORD.EXE", 1) ' Run Microsoft Word.
AppActivate MyAppID ' Activate Microsoft
 ' Word.

' You can also use the return value of the Shell function.
ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1) ' Run Microsoft Excel.
AppActivate ReturnValue ' Activate Microsoft
 ' Excel.

Beep

蜂鸣音

示例

Dim I
For I = 1 To 3 ' Loop 3 times.
 Beep ' Sound a tone.
Next I

[[ Call ] name [ argumentlist ]](#Call)

Call可选;关键字。 如果指定,则必须将_ argumentlist_ 用括号括起。例如:Call MyProc(0)
name必需。 要调用的过程的名称。
argumentlist可选。 要传递到过程的变量、数组或表达式的以逗号分隔的列表。 argumentlist 的组件可能包含关键字 ByVal 或 ByRef,这两个关键字介绍调用过程如何对待参数。但是,ByVal 和 ByRef 仅当调用 DLL 过程时才能与 Call 一起使用。 在 Macintosh 上,ByVal 和 ByRef 可在发出对 Macintosh 代码资源的调用时与 Call 一起使用。

示例

' Call a Sub procedure.
Call PrintToDebugWindow("Hello World")
' The above statement causes control to be passed to the following
' Sub procedure.
Sub PrintToDebugWindow(AnyString)
    Debug.Print AnyString    ' Print to the Immediate window.
End Sub

' Call an intrinsic function. The return value of the function is
' discarded.
Call Shell(AppName, 1)    ' AppName contains the path of the
        ' executable file.

' Call a Microsoft Windows DLL procedure. The Declare statement must be
' Private in a Class Module, but not in a standard Module.
Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
Sub CallMyDll()
    Call MessageBeep(0)    ' Call Windows DLL procedure.
    MessageBeep 0    ' Call again without Call keyword.
End Sub

ChDir path

必需的path参数是一个字符串表达式, 用于标识哪个目录或文件夹将成为新的默认目录或文件夹。 path 可以包含驱动器。 如果未指定驱动器,ChDir 会更改当前驱动器上的默认目录或文件夹。

示例

ChDir "D:\TMP" ' Make "D:\TMP" the current folder.
ChDrive "D"    ' Make "D" the current drive.

ChDir "MacDrive:Tmp" ' On the Macintosh.

ChDir ".." ' Moves up one directory in Microsoft Windows.
ChDir "::" ' Moves up one directory on the Macintosh.

' Assume "C:" is the current drive. The following statement changes
' the default directory on drive "D:". "C:" remains the current drive.
ChDir "D:\WINDOWS\SYSTEM"

ChDrive drive

更改当前驱动器。

示例

ChDrive "D" ' Make "D" the current drive.

Close

结束对使用 Open 语句打开的文件的输入/输出 (i/o)。

示例

Dim I, FileName
For I = 1 To 3 ' Loop 3 times.
 FileName = "TEST" & I ' Create file name.
 Open FileName For Output As #I ' Open file.
 Print #I, "This is a test." ' Write string to file.
Next I
Close ' Close all 3 open files.

[[ Public | Private ] Const constname [ As type ] = expression](#Const)

示例

' Constants are Private by default.
Const MyVar = 459

' Declare Public constant.
Public Const MyString = "HELP"

' Declare Private Integer constant.
Private Const MyInt As Integer = 5

' Declare multiple constants on same line.
Const MyStr = "Hello", MyDouble As Double = 3.4567

Declare

在模块级别使用, 以声明对动态链接库(DLL) 中的外部过程的引用。

更多

示例

#If VBA7 Then
Declare PtrSafe Sub...
#Else
Declare Sub...
#EndIf

Deftype

在模块级别使用, 以设置变量的默认数据类型、传递给过程的参数以及函数属性 Get 过程的返回类型, 它们的名称以指定的字符。

更多


[DeleteSetting appname、 section、[ key ]](#DeleteSetting)

从应用程序在 Windows 注册表(在 Macintosh 上)中的注册项或应用程序的初始化文件中的信息中删除节或项设置。

更多


Dim

声明变量和分配存储空间。
Dim [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ] [ , [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ]type ]] . . .

示例

'默认情况下,将AnyValue和MyValue声明为Variant并带有值设置为空。
Dim AnyValue, MyValue

' 明确声明一个Integer类型的变量。
Dim Number As Integer

'一行上有多个声明。因为省略了它的类型,AnotherVar是Variant类型
Dim AnotherVar, Choice As Boolean, BirthDate As Date

'DayArray是Variants数组,其中索引了51个元素,从'0到50,假设对于以下情况,“选项库”设置为0(默认值)当前模块。
Dim DayArray(50)

' 矩阵是整数的二维数组。
Dim Matrix(3, 4)As Integer

' MyMatrix是具有显式形式的双精度三维数组的界限。
Dim MyMatrix(1 To 5, 4 To 9, 3 To 5)As Double

' BirthDay是一个日期数组,索引从1到10。
Dim BirthDay(1 To 10)As Date

'MyArray是变量的动态数组。
Dim MyArray()

Do...Loop

循环语句

示例

Public Sub LoopExample()
    Dim Check As Boolean, Counter As Long, Total As Long
    Check = True: Counter = 0: Total = 0 ' Initialize variables.
    Do ' Outer loop.
        Do While Counter < 20 ' Inner Loop
            Counter = Counter + 1 ' Increment Counter.
            If Counter Mod 10 = 0 Then ' Check in with the user on every multiple of 10.
                Check = (MsgBox("Keep going?", vbYesNo) = vbYes) ' Stop when user click's on No
                If Not Check Then Exit Do ' Exit inner loop.
            End If
        Loop
        Total = Total + Counter ' Exit Do Lands here.
        Counter = 0
    Loop Until Check = False ' Exit outer loop immediately.
    MsgBox "Counted to: " & Total
End Sub

End

结束语句

End立即终止执行。 永远不需要它本身, 但可以放置在过程中的任何位置以结束代码执行, 关闭使用Open 语句打开的文件, 并清除变量。
End Function结束Function 语句所必需的。
End If需要结束块If .。。然后 .。。Else 语句。
End Property需要结束Property Let、 Property Get 或property Set 过程。
End Select结束Select Case 语句所必需的。
End Sub结束Sub 语句所必需的。
End Type结束用户定义的类型定义 (type 语句) 所必需的。
End With需要结束With 语句。

示例

Sub Form_Load
  Dim Password, Pword
  PassWord = "Swordfish"
  Pword = InputBox("Type in your password")
  If Pword <> PassWord Then
    MsgBox "Sorry, incorrect password"
    End
  End If
End Sub

Enum

枚举语句

[ Public | Private ] Enumname

membername [= constantexpression ]

membername [= constantexpression ]

End Enum

Public可选。 指定 Enum 类型在整个项目内可见。 Enum 类型默认情况下是 Public。
Private可选。 指定 Enum 类型仅在出现该类型的模块内可见。
name必需。 Enum 类型的名称。 name 必须是有效的 Visual Basic 标识符并在声明 Enum 类型的变量或参数时被指定为类型。
membername必需。 用于指定名称的有效 Visual Basic 标识符,可根据该名称得出 Enum 类型组成元素的名称。
constantexpression可选。 元素值(计算为 Long)。 如果未指定_constantexpression_ , 则分配的值为零 (如果是第一个_成员名称_), 或者1大于前面的_成员名称_的值。

示例

Enum SecurityLevel
 IllegalEntry = -1
 SecurityLevel1 = 0
 SecurityLevel2 = 1
End Enum

Public Enum InterfaceColors
 icMistyRose = &HE1E4FF&
 icSlateGray = &H908070&
 icDodgerBlue = &HFF901E&
 icDeepSkyBlue = &HFFBF00&
 icSpringGreen = &H7FFF00&
 icForestGreen = &H228B22&
 icGoldenrod = &H20A5DA&
 icFirebrick = &H2222B2&
End Enum

Erase arraylist

重新初始化固定大小数组的元素并释放动态数组存储空间。

固定数值数组将每个元素设置为 0。
固定字符串数组(可变长度)将每个元素设置为零长度字符串 ("")。
固定字符串数组(固定长度)将每个元素设置为 0。
固定 Variant 数组将每个元素设置为 Empty。
用户定义类型的数组设置每个元素,就好像它是单独的变量一样。
对象的数组。将每个元素设置为特定值 Nothing。

示例

' Declare array variables.
Dim NumArray(10) As Integer ' Integer array.
Dim StrVarArray(10) As String ' Variable-string array.
Dim StrFixArray(10) As String * 10 ' Fixed-string array.
Dim VarArray(10) As Variant ' Variant array.
Dim DynamicArray() As Integer ' Dynamic array.
ReDim DynamicArray(10) ' Allocate storage space.
Erase NumArray ' Each element set to 0.
Erase StrVarArray ' Each element set to zero-length
 ' string ("").
Erase StrFixArray ' Each element set to 0.
Erase VarArray ' Each element set to Empty.
Erase DynamicArray ' Free memory used by array.

Error errornumber

模拟错误的发生。

示例

On Error Resume Next ' Defer error handling.
Error 11 ' Simulate the "Division by zero" error.

[[ Public ] Event procedurename [ (arglist) ]](#Event)

Public可选。 指定事件在整个项目中是可见的。 默认情况下,“事件”** 类型为 Public。 请注意,事件只能在声明它们的模块中引发。
procedurename必需。 事件名称;遵循标准变量命名约定。

arglist 参数具有以下语法和组成部分:

[ ByVal | ByRef ]varname[()] [ As type ]

ByVal可选。 指示参数通过值传递。
ByRef可选。 指示按引用传递参数。 ByRef 在 Visual Basic 中是默认值。
varname必需。 表示传递给过程的参数的变量名称;遵循标准变量命名约定。
type可选。 传递给过程的参数的数据类型;可能是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(当前不受支持)、Date、String(仅可变长度)、Object、Variant、用户定义的类型或某对象类型。

示例

' Declare an event at module level of a class module

Event LogonCompleted (UserName as String)

Sub
 RaiseEvent LogonCompleted("AntoineJan")
End Sub

更多


Exit

退出 Do…Loop 块、 For…Next 、 Function 、 Sub 或 Property 代码。

Exit Do提供一种退出Do .。。Loop 语句。 只能在 Do...Loop 语句内使用它。 Exit Do 将控制权转移给 Loop 语句之后的语句。 在嵌套的 Do...Loop 语句内使用时,Exit Do 将控制权转移给发生 Exit Do 的循环的上一嵌套层中的循环。
Exit For提供一种退出 For 循环的方式。 它只能用于For .。。NextFor Each .。。Next 循环。 Exit For 将控制权转移给 Next 语句之后的语句。 在嵌套的 For 循环内使用时,Exit For 将控制权转移给发生 Exit For 的循环的上一嵌套层中的循环。
Exit Function立即退出出现它的Function 过程。 继续执行称为 Function 的语句之后的语句。
Exit Property立即退出显示它的属性 过程。 继续执行称为 Property 的过程之后的语句。
Exit Sub立即退出出现它的Sub 过程。 继续执行称为 Sub 的过程之后的语句。

示例

Sub ExitStatementDemo()
Dim I, MyNum
 Do ' Set up infinite loop.
 For I = 1 To 1000 ' Loop 1000 times.
 MyNum = Int(Rnd * 1000) ' Generate random numbers.
 Select Case MyNum ' Evaluate random number.
 Case 7: Exit For ' If 7, exit For...Next.
 Case 29: Exit Do ' If 29, exit Do...Loop.
 Case 54: Exit Sub ' If 54, exit Sub procedure.
 End Select
 Next I
 Loop
End Sub

FileCopy source, destination

复制文件。

source必需。 指定要复制的文件的名称的字符串表达式。 source 可包含目录或文件夹和驱动器。
destination必需。 指定目标文件名的字符串表达式。 destination 可包括目录或文件夹和驱动器。

示例

Dim SourceFile, DestinationFile
SourceFile = "SRCFILE" ' Define source file name.
DestinationFile = "DESTFILE" ' Define target file name.
FileCopy SourceFile, DestinationFile ' Copy source to target.

For Each...Next

对数组或集合中的每个元素重复一组语句。

For Each element In group

[ statements ]

[ Exit For ]

[ statements ]

Next [ element ]

示例

Dim Found, MyObject, MyCollection
Found = False    ' Initialize variable.
For Each MyObject In MyCollection    ' Iterate through each element.
    If MyObject.Text = "Hello" Then    ' If Text equals "Hello".
        Found = True    ' Set Found to True.
        Exit For    ' Exit loop.
    End If
Next

For...Next

将一组语句重复指定的次数。

For counter = start To end [ Step step ]

[ statements ]

[ Exit For ]

[ statements ]

Next [ counter ]

counter必需。 用作循环计数器的数值变量。 该变量不能是布尔值或数组元素。
start必需。 counter 的初始值。
end必需。 counter 的最终值。
step可选。 counter 每次通过循环时更改的量。 如果不指定,step 默认为 1。
statements可选。 For 和 Next 之间执行指定次数的一个或多个语句。

示例

Dim Words, Chars, MyString
For Words = 10 To 1 Step -1 ' Set up 10 repetitions.
 For Chars = 0 To 9 ' Set up 10 repetitions.
 MyString = MyString & Chars ' Append number to string.
 Next Chars ' Increment counter
 MyString = MyString & " " ' Append a space.
Next Words

Function

声明构成Function 过程主体的名称、参数和代码。

[Public | Private | Friend] [ Static ] Function name [ ( arglist ) ] [ As type ]
[ statements ]
[ name = expression ]
[ Exit Function ]
[ statements ]
[ name = expression ]
End Function

示例

' The following user-defined function returns the square root of the
' argument passed to it.
Function CalculateSquareRoot(NumberArg As Double) As Double
 If NumberArg < 0 Then ' Evaluate argument.
  Exit Function ' Exit to calling procedure.
 Else
  CalculateSquareRoot = Sqr(NumberArg) ' Return square root.
 End If
End Function
Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs())
Dim ReturnValue
' If the function is invoked as follows:
ReturnValue = CalcSum(4, 3, 2, 1)
' Local variables are assigned the following values: FirstArg = 4,
' OtherArgs(1) = 3, OtherArgs(2) = 2, and so on, assuming default
' lower bound for arrays = 1.

[Get [ # ] filenumber, [ recnumber ], varname](#Get)

将打开的磁盘文件中的数据读取到变量中。

filenumber必需。 任何有效的文件编号。
recnumber可选。 Variant (Long)。 从其开始读取的记录编号(Random 模式文件)或字节数(Binary 模式文件)。
varname必需。 将数据读入的有效变量名称。

示例

Type Record ' Define user-defined type.
 ID As Integer
 Name As String * 20
End Type

Dim MyRecord As Record, Position ' Declare variables.
' Open sample file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Read the sample file using the Get statement.
Position = 3 ' Define record number.
Get #1, Position, MyRecord ' Read third record.
Close #1 ' Close file.

If...Then...Else

根据表达式的值,有条件地执行一组语句。

示例

Sub ControlProcessor(MyControl As Control)
 If TypeOf MyControl Is CommandButton Then
 Debug.Print "You passed in a " & TypeName(MyControl)
 ElseIf TypeOf MyControl Is CheckBox Then
 Debug.Print "You passed in a " & TypeName(MyControl)
 ElseIf TypeOf MyControl Is TextBox Then
 Debug.Print "You passed in a " & TypeName(MyControl)
 End If
End Sub

[Implements [ InterfaceName | Class ]](#Implements)

指定将在其所在的类模块中实现的接口或类。

更多


Input #filenumber, varlist

从打开的顺序文件中读取数据并将此数据分配给变量。

filenumber必需。 任何有效的文件编号。
varlist必需。 从文件中读取的被分配值的以逗号分隔的变量列表, 不能是数组或对象变量。 但是,可以使用描述数组或用户定义类型的元素的变量。

示例

Dim MyString, MyNumber
Open "TESTFILE" For Input As #1    ' Open file for input.
Do While Not EOF(1)    ' Loop until end of file.
    Input #1, MyString, MyNumber    ' Read data into two variables.
    Debug.Print MyString, MyNumber    ' Print data to the Immediate window.
Loop
Close #1    ' Close file.

Kill pathname

删除磁盘上的文件。若要删除目录, 请使用RmDir 语句。

示例

Kill MacID("TEXT")

' Assume TESTFILE is a file containing some data.
Kill "TestFile" ' Delete file.

' Delete all *.TXT files in current directory.
Kill "*.TXT"

Let
将表达式的值赋给变量或属性。

示例

Dim MyStr, MyInt
MyStr = "Hello World"
MyInt = 5

Line Input

从打开的顺序文件中读取一行并将其分配给String 变量。

filenumber必需。 任何有效的文件编号。
varname必需。 有效 Variant 或 String 变量名称。

示例

Dim TextLine
Open "TESTFILE" For Input As #1 ' Open file.
Do While Not EOF(1) ' Loop until end of file.
 Line Input #1, TextLine ' Read line into variable.
 Debug.Print TextLine ' Print to the Immediate window.
Loop
Close #1 ' Close file.

Loadobject

加载一个对象但不显示该对象。

示例

' This is the Initialize event procedure for UserForm1
Private Sub UserForm_Initialize()
 Load UserForm2
 UserForm2.Show
End Sub
' This is the Click event of UserForm2
Private Sub UserForm_Click()
 UserForm2.Hide
End Sub

' This is the click event for UserForm1
Private Sub UserForm_Click()
 UserForm2.Show
End Sub

Lock、Unlock

Lock [ # ] filenumber, [ recordrange ] . . .

Unlock [ # ] filenumber, [ recordrange ]

recnumber要开始锁定或解锁的记录编号(Random 模式文件)或字节编号(Binary 模式文件)。
start要锁定或解锁的第一个记录或字节的编号。
end要锁定或解锁的最后一个记录或字节的编号。

示例

Type Record    ' Define user-defined type.
    ID As Integer
    Name As String * 20
End Type

Dim MyRecord As Record, RecordNumber    ' Declare variables.
' Open sample file for random access.
Open "TESTFILE" For Random Shared As #1 Len = Len(MyRecord)
RecordNumber = 4    ' Define record number.
Lock #1, RecordNumber    ' Lock record.
Get #1, RecordNumber, MyRecord    ' Read record.
MyRecord.ID = 234    ' Modify record.
MyRecord.Name = "John Smith"
Put #1, RecordNumber, MyRecord    ' Write modified record.
Unlock #1, RecordNumber    ' Unlock current record.
Close #1    ' Close file.

LSet

在字符串变量中将字符串左对齐,或将一个用户定义类型的变量复制到其他用户定义类型的另一个变量。

LSet stringvar = string

LSet varname1 = varname2

stringvar必需。 字符串变量的名称。
string必需。 在 stringvar 中左对齐的字符串表达式。
varname1必需。 要复制到的用户定义类型的变量名。
varname2必需。 要从中复制的用户定义类型的变量名。

示例

Dim MyString
MyString = "0123456789" ' Initialize string.
Lset MyString = "<-Left" ' MyString contains "<-Left ".

[Mid(stringvar、 start、[ length ])= string](#Mid)
将stringvar中指定数量的字符替换为其他字符串中的字符。

stringvar必需。 要修改的字符串变量的名称。
start必需;Variant (Long)。 stringvar 中开始文本替换的字符位置。
Length可选;Variant (Long)。 要替换的字符数。 如果省略,则将使用所有 string。
string必需。 用于替换 stringvar 的字符串表达式。

示例

Dim MyString
MyString = "The dog jumps" ' Initialize string.
Mid(MyString, 5, 3) = "fox" ' MyString = "The fox jumps".
Mid(MyString, 5) = "cow" ' MyString = "The cow jumps".
Mid(MyString, 5) = "cow jumped over" ' MyString = "The cow jumpe".
Mid(MyString, 5, 3) = "duck" ' MyString = "The duc jumpe".

MkDir path

新建目录或文件夹。

示例

MkDir "MYDIR" ' Make new directory or folder.

Nameoldpathname As newpathname

重命名磁盘文件、目录或文件夹。

示例

Dim OldName, NewName
OldName = "OLDFILE": NewName = "NEWFILE" ' Define file names.
Name OldName As NewName ' Rename file.

OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"
Name OldName As NewName ' Move and rename file.

On Error

启用错误处理例程并指定该例程在程序中的位置;还可用于禁用错误处理例程。

On Error GoTo line

On Error Resume Next

On Error GoTo 0

更多


Open

启用对文件的输入/输出 (I/O)。

Open pathname For mode [ Access access ] [ lock ] As [ # ] filenumber [ Len = reclength ]

pathname必需。 指定文件名的字符串表达式,可包括目录或文件夹和驱动器。
mode必需。 指定文件模式的关键字:Append、Binary、Input、Output 或 Random。 如果未指定,则以 Random 访问模式打开文件。
access可选。 指定可对打开的文件执行的操作的关键字:Read、Write 或 Read Write。
lock可选。 指定由其他进程限制在打开的文件上的操作的关键字:共享、锁定读取、锁定写入和锁定读写。
filenumber必需。 一个有效文件号,范围为 1 到 511(含 1 和 511)。 使用FreeFile 函数可获取下一个可用的文件编号。
reclength可选。 小于或等于 32,767(字节)的数。 对于以随机访问模式打开的文件,此值为记录长度。 对于序列文件,此值为缓冲的字符数。

更多


Option Base { 0 | 1 }

在模块级别使用, 以声明数组下标的默认下限。

示例

Option Base 1 ' Set default array subscripts to 1.

Dim Lower
Dim MyArray(20), TwoDArray(3, 4) ' Declare array variables.
Dim ZeroArray(0 To 5) ' Override default base subscript.
' Use LBound function to test lower bounds of arrays.
Lower = LBound(MyArray) ' Returns 1.
Lower = LBound(TwoDArray, 2) ' Returns 1.
Lower = LBound(ZeroArray) ' Returns 0.

Option Compare { Binary | Text | Database }

在模块级别使用, 以声明在比较字符串数据时要使用的默认比较方法。

示例

' Set the string comparison method to Binary.
Option Compare Binary ' That is, "AAA" is less than "aaa".
' Set the string comparison method to Text.
Option Compare Text ' That is, "AAA" is equal to "aaa".

Option Explicit

在模块级别使用, 以强制显式声明该模块中的所有变量。

示例

Option Explicit ' Force explicit variable declaration.
Dim MyVar ' Declare variable.
MyInt = 10 ' Undeclared variable generates error.
MyVar = 10 ' Declared variable does not generate error.

Option Private

在允许跨多个项目引用的主机应用程序中使用时,“Option Private Module” 防止模块的内容在其项目外被应用。 在不允许此类引用的主机应用程序(如 Visual Basic 的独立版本)中,“Option Private”无效。

示例


[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,将在下一行上打印下一个字符。

示例

Open "TESTFILE" For Output As #1 ' Open file for output.
Print #1, "This is a test" ' Print text to file.
Print #1, ' Print blank line to file.
Print #1, "Zone 1"; Tab ; "Zone 2" ' Print in two print zones.
Print #1, "Hello" ; " " ; "World" ' Separate strings with space.
Print #1, Spc(5) ; "5 leading spaces " ' Print five leading spaces.
Print #1, Tab(10) ; "Hello" ' Print word at column 10.

' Assign Boolean, Date, Null and Error values.
Dim MyBool, MyDate, MyNull, MyError
MyBool = False : MyDate = #February 12, 1969# : MyNull = Null
MyError = CVErr(32767)
' True, False, Null, and Error are translated using locale settings of
' your system. Date literals are written using standard short date
' format.
Print #1, MyBool ; " is a Boolean value"
Print #1, MyDate ; " is a date"
Print #1, MyNull ; " is a null value"
Print #1, MyError ; " is an error value"
Close #1 ' Close file.

Private

在模块级别使用, 以声明私有变量并分配存储空间。

Private [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ]
[ , [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ]] . . .

示例

Private NumberOfEmployees As Integer
Private X As New Worksheet
Private Number As Integer ' Private Integer variable.
Private NameArray(1 To 5) As String ' Private array variable.
' Multiple declarations, two Variants and one Integer, all Private.
Private MyVar, YourVar, ThisVar As Integer

Property Get

声明构成属性过程的主体的名称、参数和代码, 这将获取属性的值。

示例

Dim CurrentColor As Integer
Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Returns the current color of the pen as a string.
Property Get PenColor() As String
 Select Case CurrentColor
 Case RED
 PenColor = "Red"
 Case GREEN
 PenColor = "Green"
 Case BLUE
 PenColor = "Blue"
 End Select
End Property

' The following code gets the color of the pen
' calling the Property Get procedure.
ColorName = PenColor

Property Let

声明构成属性过程的主体的名称、参数和代码, 这将为属性分配值。

示例

Dim CurrentColor As Integer
Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Set the pen color property for a Drawing package.
' The module-level variable CurrentColor is set to
' a numeric value that identifies the color used for drawing.
Property Let PenColor(ColorName As String)
 Select Case ColorName ' Check color name string.
 Case "Red"
 CurrentColor = RED ' Assign value for Red.
 Case "Green"
 CurrentColor = GREEN ' Assign value for Green.
 Case "Blue"
 CurrentColor = BLUE ' Assign value for Blue.
 Case Else
 CurrentColor = BLACK ' Assign default value.
 End Select
End Property

' The following code sets the PenColor property for a drawing package
' by calling the Property let procedure.

PenColor = "Red"

Property Set

声明构成属性过程的主体的名称、参数和代码, 以设置对对象的引用。

示例

' The Pen property may be set to different Pen implementations.
Property Set Pen(P As Object)
 Set CurrentPen = P ' Assign Pen to object.
End Property

Public

在模块级别使用, 以声明公共变量和分配存储空间。

示例

Public NumberOfEmployees As Integer
Public X As New Worksheet

Put

将数据从变量写入磁盘文件。

示例

Put #4,,FileBuffer

RaiseEvent

触发在类、窗体或文档中的模块级别声明的事件。

示例

' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)

Sub
 ' Raise the event.
 RaiseEvent LogonCompleted ("AntoineJan")
End Sub

[Randomize [ number ]](#Randomize)

初始化随机数字生成器。如果不使用 Randomize ,则当第一次调用 Rnd 函数(不具有参数)时,它将使用与种子相同的数字,并且接下来会将最后生成的数字用作种子值。(若要重复随机数字的顺序,请先立即调用带负参数的 Rnd ,然后再将 Randomize 与数值参数一起使用。 对与 number 相同的值使用 Randomize 不会重复上一个顺序。)

示例

Dim MyValue
Randomize ' Initialize random-number generator.

MyValue = Int((6 * Rnd) + 1) ' Generate random value between 1 and 6.

ReDim

在过程级使用, 用于为动态数组变量重新分配存储空间。

示例

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

Dim MyArray() As Integer ' Declare dynamic array.
Redim MyArray(5) ' Allocate 5 elements.
For I = 1 To 5 ' Loop 5 times.
 MyArray(I) = I ' Initialize array.
Next I

Redim MyArray(10) ' Resize to 10 elements.
For I = 1 To 10 ' Loop 10 times.
 MyArray(I) = I ' Initialize array.
Next I

Redim Preserve MyArray(15) ' Resize to 15 elements.

Rem comment

用于包括程序中的解释性备注。

示例

Dim MyStr1, MyStr2
MyStr1 = "Hello": Rem Comment after a statement separated by a colon.
MyStr2 = "Goodbye" ' This is also a comment; no colon is needed.

Reset

关闭使用Open 语句打开的所有磁盘文件。Reset 语句关闭通过 Open 语句打开的所有活动文件,并将所有文件缓存的内容写入磁盘。

示例

Dim FileNumber
For FileNumber = 1 To 5 ' Loop 5 times.
 ' Open file for output. FileNumber is concatenated into the string
 ' TEST for the file name, but is a number following a #.
 Open "TEST" & FileNumber For Output As #FileNumber
 Write #FileNumber, "Hello World" ' Write data to file.
Next FileNumber
Reset ' Close files and write contents
 ' to disk.

Resume
语法

Resume [ 0 ]

Resume Next

Resume line

示例

Sub ResumeStatementDemo()
 On Error GoTo ErrorHandler ' Enable error-handling routine.
 Open "TESTFILE" For Output As #1 ' Open file for output.
 Kill "TESTFILE" ' Attempt to delete open file.
 Exit Sub ' Exit Sub to avoid error handler.
ErrorHandler: ' Error-handling routine.
 Select Case Err.Number ' Evaluate error number.
  Case 55 ' "File already open" error.
   Close #1 ' Close open file.
  Case Else
   ' Handle other situations here....
 End Select
 Resume ' Resume execution at same line that caused the error.
End Sub

RmDir path

示例

' Assume that MYDIR is an empty directory or folder.
RmDir "MYDIR" ' Remove MYDIR.

RSet stringvar = string

在字符串变量中靠右对齐字符串。

stringvar必需。 字符串变量的名称。
string必需。 要在 stringvar 内靠右对齐的字符串表达式。

示例

Dim MyString
MyString = "0123456789"   ' Initialize string.
Rset MyString = "Right->" ' MyString contains " Right->".

SaveSettingappname、 section、 key、 setting

在 Windows 注册表的应用程序条目中保存或创建应用程序项,或在 Macintosh 上,在应用程序的初始化文件中保存或创建信息。

示例

' Place some settings in the registry.
SaveSetting appname := "MyApp", section := "Startup", _
 key := "Top", setting := 75
SaveSetting "MyApp","Startup", "Left", 50
' Remove section and all its settings from registry.
DeleteSetting "MyApp", "Startup"

[Seek[ # ] filenumber, position](#Seek)

在使用Open 语句打开的文件中设置下一次读取/写入操作的位置。

更多


Select Case

执行几组语句之一,具体取决于表达式的值。

示例

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

Case "everything", "nuts" To "soup", TestItem

Dim Number
Number = 8    ' Initialize variable.
Select Case Number    ' Evaluate Number.
Case 1 To 5    ' Number between 1 and 5, inclusive.
    Debug.Print "Between 1 and 5"
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8    ' Number between 6 and 8.
    Debug.Print "Between 6 and 8"
Case 9 To 10    ' Number is 9 or 10.
Debug.Print "Greater than 8"
Case Else    ' Other values.
    Debug.Print "Not between 1 and 10"
End Select

[SendKeys string、[ wait ]](#SendKeys)

向活动窗口发送一个或多个键击,就像按键盘上的按键一样。

更多

示例

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1)    ' Run Calculator.
AppActivate ReturnValue     ' Activate the Calculator.
For I = 1 To 100    ' Set up counting loop.
    SendKeys I & "{+}", True    ' Send keystrokes to Calculator
Next I    ' to add each value of I.
SendKeys "=", True    ' Get grand total.
SendKeys "%{F4}", True    ' Send ALT+F4 to close Calculator.

Set

将对象引用分配给变量或属性。

示例

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

Dim YourObject, MyObject, MyStr
Set MyObject = YourObject    ' Assign object reference.
' MyObject and YourObject refer to the same object.
YourObject.Text = "Hello World"    ' Initialize property.
MyStr = MyObject.Text    ' Returns "Hello World".

' Discontinue association. MyObject no longer refers to YourObject.
Set MyObject = Nothing    ' Release the object.

SetAttrpathname , attributes

设置文件的属性信息。

pathname必需。 指定文件名的字符串表达式,可包括目录或文件夹和驱动器。
attributes必需。 常量或数值表达式, 其总和指定文件属性。
vbNormal0标准(默认)
vbReadOnly1只读
vbHidden2隐藏
vbSystem4系统文件。 在 Macintosh 上不可用。
vbArchive32文件自上次备份以来已发生更改。
vbAlias64指定文件名为别名。 仅在 Macintosh 上可用。

示例

SetAttr "TESTFILE", vbHidden ' Set hidden attribute.
SetAttr "TESTFILE", vbHidden + vbReadOnly ' Set hidden and read-only
 ' attributes.

Static

在过程级使用, 用于声明变量和分配存储空间。 在 Static 语句内声明的变量会在代码运行时一直保留其值。

示例

Static EmployeeNumber(200) As Integer

Static X As New Worksheet

Stop

可将 Stop 语句置于过程中的任意位置来挂起执行。 使用 Stop 语句与在代码中设置断点相似。

Stop 语句将挂起执行,但与 End 不同,除非它位于已编译的可执行 (.exe) 文件中,否则它将关闭任何文件或清除变量。

示例

Dim i As Long
For i = 1 To 10 ' Start For...Next loop.
 Debug.Print i ' Print i to the Immediate window.
 Stop ' Stop during each iteration.
Next i

Sub

声明构成Sub 过程的主体的名称、参数和代码。


Time = time

设置系统时间。

示例

Dim MyTime
MyTime = #4:35:17 PM# ' Assign a time.
Time= MyTime ' Set system time to MyTime.

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

Unload object

删除内存中的对象。

示例

' This is the Initialize event procedure for UserForm1
Private Sub UserForm_Initialize()
 Load UserForm2
 UserForm2.Show
End Sub
' This is the Click event for UserForm2
Private Sub UserForm_Click()
 Unload UserForm2
End Sub

' This is the Click event for UserForm1
Private Sub UserForm_Click()
 Unload UserForm1
End Sub

[While condition [ statements ] Wend](#While...Wend)

示例

Dim Counter
Counter = 0 ' Initialize variable.
While Counter < 20 ' Test value of Counter.
 Counter = Counter + 1 ' Increment Counter.
Wend ' End While loop when Counter > 19.
Debug.Print Counter ' Prints 20 in the Immediate window.

Width #filenumber, width

向使用Open 语句打开的文件分配输出行宽度。

示例

Dim I
Open "TESTFILE" For Output As #1 ' Open file for output.
VBA.Width 1, 5 ' Set output line width to 5.
For I = 0 To 9 ' Loop 10 times.
 Print #1, Chr(48 + I); ' Prints five characters per line.
Next I
Close #1 ' Close file.

With

对单个对象或用户定义类型执行一系列语句。

示例

With MyLabel
 .Height = 2000
 .Width = 2000
 .Caption = "This is MyLabel"
End With

[Write #filenumber、[ outputlist ]](#Write)

将数据写入到顺序文件中。

示例

Open "TESTFILE" For Output As #1    ' Open file for output.
Write #1, "Hello World", 234    ' Write comma-delimited data.
Write #1,    ' Write blank line.

Dim MyBool, MyDate, MyNull, MyError
' Assign Boolean, Date, Null, and Error values.
MyBool = False : MyDate = #February 12, 1969# : MyNull = Null
MyError = CVErr(32767)
' Boolean data is written as #TRUE# or #FALSE#. Date literals are
' written in universal date format, for example, #1994-07-13#
 'represents July 13, 1994. Null data is written as #NULL#.
' Error data is written as #ERROR errorcode#.
Write #1, MyBool ; " is a Boolean value"
Write #1, MyDate ; " is a date"
Write #1, MyNull ; " is a null value"
Write #1, MyError ; " is an error value"
Close #1    ' Close file.

03-05 16:06