Office中国论坛/Access中国论坛

标题: 请帮忙解释下面的问题 [打印本页]

作者: chenghai    时间: 2003-6-6 22:51
标题: 请帮忙解释下面的问题
Function zz(z As String) As String
  Select Case z
    Case "a1","a2","a3"
      zz = "A"
    Case "b1","b2","b3"
      zz = "B"
    Case Else
      zz = "zzzz"
  End Select
End Function

上述代码,如果z是空值的话,zz(z)不会输出"zzzz",而是输出"# 错误"。必须采用zz(nz(z))才能正常。
但如果把上述代码中"z as string"中的定义去掉,就可以直接使用zz(z)了。
为何?
作者: chenghai    时间: 2003-6-7 00:22
看起来不定义(函数不定义也可以用,函数引用的变量不定义也可以用)使用起来更方便,不知不定义的缺点是什么?是不是在运算效率方面?
作者: gnoy    时间: 2003-6-7 03:48
Function zz(Optinal z As String) As String
  Select Case z
    Case "a1","a2","a3"
      zz = "A"
    Case "b1","b2","b3"
      zz = "B"
    Case Else
      zz = "zzzz"
  End Select
End Function


作者: chenghai    时间: 2003-6-7 17:46
用了斑主的案例,不行。

还是按zz(nz(z))的形式使用。
作者: gnoy    时间: 2003-6-8 03:54
你属于典型的会写函数不会用。
zz(nz(z)) 你这是什么跟什么呀

以上定义的函数ZZ是你的函数名Z是变量。而你使用zz(nz(z))其中Z为变量去了

可这样使用zz("asdfafa") 或者ZZ()考虑到你需要Z为空值所以我加了个OPTIONAL所以可以直接使用zz()
作者: Trynew    时间: 2003-6-8 21:45
在Vb(VBA)里,你不定义数据的类型,则都作为Variant(变体类型)处理,不但运算效率方面,特别循环,消耗资源,而且容易出错,系统会自作聪明帮你转换。但也有其灵活方便的地方,你这就是一个例子。变体类型可以使用,但不要滥用。
你这问题,可以象gnoy斑竹这样用可选参数来处理,当你不使用(传递)参数时,函数用""字符串代替,(不是Null).
当然,不使用可选参数,字符串或数值类型数据为NULL值时的计算或处理常常会引起错误,你也可以在函数里面先用ISNULL()判断来处理当字符串的值为NULL时情况,或者直接用On Error Resume Next来忽略错误。


作者: gnoy    时间: 2003-6-8 22:15
以下是引用Trynew在2003-6-8 13:44:46的发言:

"用可选参数来处理,当你不使用(传递)参数时,函数用""字符串代替,(不是Null).
当然,不使用可选参数,字符串或数值类型数据为NULL值时的计算或处理常常会引起错误,你也可以在函数里面先用ISNULL()判断来处理当字符串的值为NULL时情况,或者直接用On Error Resume Next来忽略错误。"


这种它到底传递“”还是NULL情况我倒是没研究过。看来我也是会写不会用啊:)




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3