可以采用“旁门左道”的方式使用Instr函数实现代码的简练。下面是一个典型的例子,检测字符串中是否包含一个元音字母: 1、普通的方法: If UCase$(char) = "A" Or UCase$(char) = "E" Or UCase$(char) = "I" Or UCase$(char) = "O" Or UCase$(char) = "U" Then ’ it is a vowel End If 2、更加简练的方法: If InStr("AaEeIiOoUu", char) Then ’ it is a vowel End If 同样,通过单词中没有的字符作为分界符,使用InStr来检查变量的内容。下面的例子检查Word中是否包含一个季节的名字: 1、普通的方法: If LCase$(word) = "winter" Or LCase$(word) = "spring" Or LCase$(word) = _ "summer" Or LCase$(word) = "fall" Then ’ it is a season’s name End If 2、更加简练的方法: If Instr(";winter;spring;summer;fall;", ";" & word & ";") Then ’ it is a season’s name End If 有时候,甚至可以使用InStr来替代Select Case代码段,但一定要注意参数中的字符数目。下面的例子中,转换数字0到9的相应英文名称为阿拉伯数字: 1、普通的方法: Select Case LCase$(word) Case "zero" result = 0 Case "one" result = 1 Case "two" result = 2 Case "three" result = 3 Case "four" result = 4 Case "five" result = 5 Case "six" result = 6 Case "seven" result = 7 Case "eight" result = 8 Case "nine" result = 9 End Select 2、更加简练的方法: result = InStr(";zero;;one;;;two;;;three;four;;five;;six;;;seven;eight;nine;", _ ";" & LCase$(word) & ";") \ 6 精用Boolean表达式,让代码再减肥 当设置基于表达式结果的Boolean型数值时,要避免使用多余的If/Then/Else语句结果。比如: If SomeVar > SomeOtherVar Then BoolVal = True Else BoolVal = False End If 上面这段代码就很烦琐,它们完全可以使用下面的一行代码来替代: BoolVal = (SomeVar > SomeOtherVar) 括号不是必须的,但可以增加可读性。根据表达式中的操作数不同,后者比前者执行起来大约快50%到85%。后者中的括号对速度没有影响。 有时,使用这个技术实现代码的简练并非很明显。关键是要牢记:所有的比较操作结果或者是0(false),或者是-1(True)。所以,下面例子中的2段代码是完全相同的,但是第2段要运行得快些: 1、传统方法: If SomeVar > SomeOtherVar Then x = x + 1 End If 2、更简练的方法 x = x - (SomeVar > SomeOtherVar) 函数名巧做局部变量 很多程序员都没有认识到“在函数本身中使用函数名”的妙处,这就象对待一个局部变量一样。应用这个技巧可以起到临时变量的作用,有时还能加速程序运行。看看下面的代码: Function Max(arr() As Long) As Long Dim res As Long, i As Long res = arr(LBound(arr)) For i = LBound(arr) + 1 To UBound(arr) If arr(i) > res Then res = arr(i) Next Max = res End Function 去掉res变量,使用函数名称本身这个局部变量,可以使程序更加简练: Function Max(arr() As Long) As Long Dim i As Long Max = arr(LBound(arr)) For i = LBound(arr) + 1 To UBound(arr) If arr(i) > Max Then Max = arr(i) Next End Function