1.从函数中返回字符串
某些函数具有两种版本:一种返回 Variant 数据类型,而另一种返回 String 数据类型。Variant 版本较为方便因为变形体会自动地处理不同类型间的传输。它们同时也允许 Null 通过表达式来发送。String 版本较具有效率,因为它们使用较少的内存。
当有下列之情形时可考虑使用 String 版本:
a,程序很大并且使用很多的变量。
b,将数据直接写到随机存取文件中
当在函数名称后面加上一个美元符号($)时,下列的函数会对于 Sting 变量返回一个数值。这些函数若不加上美元符号用法与语法与 Variant 相等。
2.可选的参数
在过程的定义中,可选的参数前会有一个 Optional 关键字。在过程的定义中也可以指定一个缺省值赋予可选的参数。例如:
Sub OptionalArgs(strState As String, Optional strCountry As String = "USA")
. . .
End Sub
3.参数数组
参数数组可用来传递数组的参数给过程。所以当定义过程时就不用知道数组中的元素个数。
使用 ParamArray 关键字来指示一个参数数组。而此数组必须被声明为 Variant 类型的数组,并且此数组必须是过程定义中最后面那个参数。
Sub AnyNumberArgs(strName As String, ParamArray intScores() As Variant)
Dim intI As Integer
Debug.Print strName; " Scores"
' 用 UBound 函数决定数组的上限。
For intI = 0 To UBound(intScores())
Debug.Print " "; intScores(intI)
Next intI
End Sub
Sub test()
AnyNumberArgs "Jamie", 10, 26, 32, 15, 22, 24, 16
AnyNumberArgs "Kelly", "High", "Low", "Average", "High"
End Sub
4.使用数组
缺省规定,数组的索引是从零开始,所以curExpense(364)的上标界是364,具有365个元素
a、可以在模块的顶部使用 Option Base 语句,将第一个元素的缺省索引值从 0 改成 1。
Option Base 1
Dim curExpense(365) As Currency
b、也可以利用 To 子句来对数组的底层绑定做显示地声明
Dim curExpense(1 To 365) As Currency
Dim strWeekday(7 To 13) As String
5.使用 Do...Loop 语句
a.直到条件为 True 时重复语句:
Sub ChkFirstWhile()
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "The loop made " & counter & " repetitions."
End Sub
Sub ChkLastWhile()
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
MsgBox "The loop made " & counter & " repetitions."
End Sub
b.直到条件变成 True 才重复语句:
Sub ChkFirstUntil()
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "The loop made " & counter & " repetitions."
End Sub
Sub ChkLastUntil()
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
MsgBox "The loop made " & counter & " repetitions."
End Sub
c.从循环内退出 Do...Loop 语句:
Sub ExitExample()
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
MsgBox "The loop made " & counter & " repetitions."
End Sub
6.使用 For Each...Next 语句
a.对某范围的单元格做循环:
Sub RoundToZero()
For Each myObject in myCollection
If Abs(myObject.Value) < 0.01 Then myObject.Value = 0
Next
End Sub
b.在完成前退出 For Each...Next 循环:
Sub TestForNumbers()
For Each myObject In MyCollection
If IsNumeric(myObject.Value) = False Then
MsgBox "Object contains a non-numeric value."
Exit For
End If
Next c
End Sub
7.使用 For...Next 语句
使用 Step 关键字,可以由所指定的值增加或减少计数变量
Sub TwosTotal()
For j = 2 To 10 Step 2
total = total + j
Next j
MsgBox "The total is " & total
End Sub
为了减少计数变量的值,可以使用负的 Step 值。为了减少计数变量的值,必须指定一个小于开始值的结束值。在下面的示例中,计数变量 myNum
会在每次循环重复时减去 2。当循环完成时,total
的值为 16、14、12、10、8、6、4 和 2 的总合。
Sub NewTotal()
For myNum = 16 To 2 Step -2
total = total + myNum
Next myNum
MsgBox "The total is " & total
End Sub
8.使用 Select Case 语句
Function Bonus(performance, salary)
Select Case performance
Case 1
Bonus = salary * 0.1
Case 2, 3
Bonus = salary * 0.09
Case 4 To 6
Bonus = salary * 0.07
Case Is > 8
Bonus = 100
Case Else
Bonus = 0
End Select
End Function
9.将数据写到文件中
顺序访问(Input、Output 和 Append 方式)被用来写入文本文件,比如错误登录和报告。
随机访问(Random 方式)被用来读取与写入数据到文件并且没有关闭文件。随机访问文件在记录中保留数据,如此可很快的找出信息所在。
二进制访问(Binary 方式)被用来读取或写入数据到文件中任何的字节位置,例如存储或显示一个位图图象。
注意 Open 语句不可以用来打开一个应用程序专属的文件类型。例如,不可使用 Open 去打开一个 Word 文档, a ,Microsoft Excel 的电子数据表,或是 Microsoft Access 数据库。若如此做的话会丢失文件的完整性,并造成文件的毁损。
当从文件读取数据和写入数据到文件时,下表列出了所使用的典型语句。
访问类型 | 写入数据 | 读取数据 |
---|---|---|
顺序 | Print #, Write # | Input # |
随机 | Put | Get |
二进制 | Put | Get |