|
在FUNCTION过程,会设置一些缺省值。假如有这样一个自定义函数 按颜色(背景色或字体色求和或计数)- '第三参数决定求和与计数,值为True时求和,值为False时计数;第四参数决字按单元格背景还是字体色计算
- Function Color(参照颜色区 As Range, 统计区 As Range, Optional SumOrCount As Boolean = False, Optional BackOrFont As Boolean = False)
- Application.Volatile
- Dim cell As Range, Colors, SUM, i
- '如果第三参数是True则按背景色求和,否则按字体色求和
- Colors = IIf(BackOrFont, 参照颜色区(1).Interior.Color, 参照颜色区(1).Font.Color)
- For Each cell In 统计区 '遍历求和区
- If BackOrFont Then
- If cell.Interior.Color = Colors Then SUM = SUM + IIf(IsNumeric(cell), cell, 0): i = i + 1 '背景色相同则累加数值及计数器
- Else
- If cell.Font.Color = Colors Then SUM = SUM + IIf(IsNumeric(cell), cell, 0): i = i + 1 '字体色相同则累加数值及计数器
- End If
- Next cell
- Color = IIf(SumOrCount, SUM, i) '将合计数赋与函数,成为最终颜色求和结果
- End Function
复制代码
我的疑问是这样的,像图中第一种情况,省略了后面两个参数,都按默认的FASLE处理,像第三种情况,省略了第三个参数,但是还是有逗号的。这里无论是怎么样的省略形式(完全省略参数,即也省略了逗号。或有逗号但没有参数)的结果都是一样的。但在工作表函数中,比如说LEFT,=LEFT(A1)省略了第二个参数,也没有逗号。这里会按默认的截取一个字符处理。但是,=LEFT(A1,)这种情况,会按0处理。工作表函数中对这两种省略形式的省略是不一样的。但是,在VBA自定义函数是,是一样的,我感觉很疑惑。。不知道我的这个结论对不对,还希望大家指点一样。
zhoucs00 发表于 2012-12-27 21:03
您说的第二段话"不管什么函数中判断你指不指定参数的 关键符号是 ,(逗号),另一个关键就是 参数的类型 ...
你应该这么理解,因为你定义了第三个参数的数据类型为boolean(逻辑值),当你添加了,(逗号),就表示你需要指定这个参数的值,而你什么都不输入,其实是表示你输入的是0,而并不是让这个参数默认,之所以他的作用跟你默认的效果一样,是因为在VBA中,当参数类型为boolean时,如果你输入一个数值,等于0的就按照False来处理了而已。
|
|