VBA 编程基础

论坛 期权论坛 脚本     
niminba   2021-5-23 02:58   1141   0
11.3.1 了解 Visual Basic 语法
本节解释最常见的语法元素。
11.3.1.1 Activate 方法的语法
语法:object.Activate
在 Activate 方法的语法中,object 是一个所提供信息的占位符,在此例中的代码会返回一个对象。例如,下面的过程会在活动的文档中激活第二个窗口。
Sub MakeActive()
Windows(2).Activate
End Sub

11.3.1.2 MsgBox 函数的语法
语法:MsgBox(prompt[, buttons] [, title] [, helpfile, context])
在 MsgBox 函数的语法中,括号内的参数是此函数的命名参数。方括号所包含的参数是选择性的(在Visual Basic 中不用键入方括号)。在 MsgBox 函数中,唯一必须提供的参数(prompt)是做为提示的文本。
在代码中可以利用位置或名称来指定函数与方法的参数。若利用位置来指定参数,则必须根据语法中的顺序,利用逗号来分隔每一个参数,例如:
MsgBox "Your answer is correct!",0,"Answer Box"
若以名称来指定参数,则须使用参数名称或跟着冒号与等号(:=),最后再加上参数值。可以任何的顺序来指定命名参数,例如:
MsgBox Title:="Answer Box", Prompt:="Your answer is correct!"
函数以及某些方法的语法会利用圆括号将参数封闭起来。这些函数和方法会返回值,所以必须用圆括号将参数封闭起来,才可以赋值给变量。如果忽略返回值或是没有传递所有的参数,则可以不用圆括号。方法若不返回值,则不用将参数用圆括号封闭起来。上述准则不管是使用命名参数或位置参数都适用。
在下面的示例中,MsgBox 函数的返回值是一个号码,它被存储在变量 myVar 中,以用来指示选择的按钮。因为需要用到返回值,所以调用时必须使用圆括号。而另一个消息框则是用来显示变量的值。

Sub Question()
myVar = MsgBox(Prompt:="I enjoy my job.", _
Title:="Answer Box", Buttons:="4")
MsgBox myVar
End Sub

11.3.1.3 选项语句的语法
语法:Option Compare {Binary | Text | Database}
在 Option Compare 语句的语法中,大括号和垂直线指示三项中的强制性选择(在Visual Basic 的语句中不用键入大括号)。例如,下列的语句指出在模块中,字符串的比较是根据文本的排序顺序而不区分大小写。
Option Compare Text


11.3.1.4 Dim 语句的语法
语法: Dim varname[ ( [subscripts] ) ] [As type] [, varname[([subscripts])] [As type]] . . .
在 Dim 语句的语法中,Dim 是必备的关键字。而唯一必备的元素是 varname(变量名)。例如,下列的语句创建三个变量:myVar、 nextVar 和 thirdVar。它们会自动被声明成 Variant 变量。
Dim myVar, nextVar, thirdVar
下面的示例声明了一个String 型的变量。它包含了数据类型,如此可以节省内存并且可帮助从代码中找出错误。
Dim myAnswer As String
若在一个语句中声明好几个变量,则必须包含每一个变量的数据类型。变量在声明时若少了数据类型,则会自动地声明为Variant 。
Dim x As Integer, y As Integer, z As Integer
在下列的语句中,x 与 y 都被指定成 Variant 数据类型,只有 z 被指定成 String 数据类型。
Dim x, y As Integer,Z As String
如果声明一个数组变量,则必须包含圆括号,但下标则是可选的。下列的语句中定义了一个动态数组 myArray。
Dim myArray()

11.3.2 有效地利用数据语法
表11-1 列出VBA 所支持的数据类型,以及存储空间的大小与范围。


注意:
任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节的Integer 数据元所组成的一维数组中的数据,占 8个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。包含一数组的 Variant 比单独的一个数组需要多 12 个字节。
注意:
使用 StrConv 函数把字符串数据从一种类型转换为另一种类型。
除非有其他的指定,否则未声明变量会被指定成 Variant 数据类型。这个数据类型可使写程序变得较容易,但它并不总是使用中最有效率的数据类型。
若有下列情形时必须考虑使用其他的数据类型:

程序非常大并且使用很多变量。
程序的执行速度必须尽可能得快。
将数据直接写到随机存储文件中。
除了 Variant 之外,支持的数据类型包括 Byte、Boolean、 Integer、Long、Single、Double、Currency、Decimal、Date、Object 以及 String。可使用 Dim 语句去声明一个指定类型的变量,例如:
Dim X As Integer
上述语句声明变量 X 是一个整型,其范围介于-32,768~32,767 之间。如果试着去设置超出此范围的数值给 X ,则会有错误发生。如果试着去指定一个分数给ssage()
MsgBox "Time to take a break!"
End Sub
1.调用具有多个参数的 Sub 过程
下面的示例展示了调用具有多个参数的 Sub 过程的两种不同方法。当第二次调用 HouseCalc 时,因为使用 Call 语句所以需要利用括号将参数括起来。

Sub Main()
HouseCalc 99800, 43100
Call HouseCalc(380950, 49500)
End Sub
Sub HouseCalc(price As Single, wage As Single)
If 2.5 * wage <= 0.8 * price Then
MsgBox "You cannot afford this house."
Else
MsgBox "This house is affordable."
End If
End Sub
在调用 Function 过程时使用括号。
为了使用函数的返回值,必须指定函数给变量,并且用括号将参数封闭起来;如下示例所示:
Answer3 = MsgBox("Are you happy with your salary?", 4, "Question 3")
如果不在意函数的返回值,可以用调用 Sub 过程的方式来调用函数。如下面示例所示,可以省略括号,列出参数并且不要将函数指定给变量:
MsgBox "Task Completed!", 0, "Task Box"
注意在上述例子中若包含括号,则语句会导致一个语法错误。
2.传递命名参数
Sub 或 Function 过程中的语句可以利用命名参数来传递值给被调用的过程。参数有两种传递方式:按值来传递和按地址来传递。按值传递只是传递参数的一个副本,在函数内建立一个同参数类型及内容一样的变量,在过程体内部参数对参数所作的改变不会影响到实际参数;按地址传递则不然,它传递的是实际参数的地址,过程中所有对参数的改变都将影响到实际参数”。命名参数的组成是由参数名称紧接着冒号(:=)以及等号,然后指定一个值给参数。
下面的示例使用命名参数来调用不具返回值的 MsgBox 函数。
MsgBox Title:="Task Box", Prompt:="Task Completed!"
下面的示例使用命名参数调用 MsgBox 函数。将返回值指定给变量 answer3。
answer3 = MsgBox(Title:="Question 3", _
Prompt:="Are you happy with your salary?", Buttons:=4)

11.3.5.5 调用属性过程
表11-2 列出了调用属性过程的语法。

当调用一个 Property Let 或 Property Set 过程时,总是会有一个参数出现在等号(=)的右边。
当用多个参数声明一个 Property Let 或 Property Set 过程时, Visual Basic 传递调用的右边参数,给 Property Let 或 PropertySet 声明中的最后一个参数。例如,图11-18 显示了 Property 过程调用中的参数与 Property Let 声明中的参数的关系:

实际上,将属性过程与多个参数合用只有在创建属性的数组时才会使用。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP