为什么单个字母的UDF名称不能使用C或R?
我可以编写下列有效的VBA函数:
Public Function C() As Long C = 5 End Function Public Function R() As Long R = 6 End Function
但是我不能在Excel公式中使用它们,而不用VBA项目或模块名称来限定它们。
FWIW, Function N
和Function T
也是有效的,但它们与内置函数冲突。
我认为 C
和R
必须是Excel公式中的保留名称,但我不明白为什么。 任何使用C
/ R
作为函数调用都可以作为函数调用进行parsing,因为它们紧接着是一个(
而任何使用C
/ R
R1C1表示法都不会紧接着一个(
。
在Interstingly中,如果我使用项目和/或模块的名称限定函数调用,则可以调用这些函数:
=VBAProject.C() 5 =Module1.C() 5 =VBAProject.Module1.C() 5
从Microsoft文档 :
提示:不能使用大写和小写字符“C”,“c”,“R”或“r”作为定义的名称,因为它们全部用作select当前选定单元格的行或列的简写forms当您在名称或转到文本框中input它们时。
我在定义命名范围时意识到了这个限制。 显然它也延伸到命名UDF(这是有道理的)。
在Windows 1252代码页中,有几个字符不能用作对用户定义函数的公式调用中的第一个/唯一字符,但可以在以项目名称或模块名称或前缀两者来调用这些UDF时:
'Without Project/Module prefix, these characters are 'reserved for Column/Row shorthand =VBAProject.C() =VBAProject.N() 'Without Project/Module prefix, these characters are 'reserved for built-in function names =VBAProject.R() =VBAProject.T() 'Without Project/Module prefix, these characters are 'special characters =VBAProject.€() =VBAProject.ˆ() =VBAProject.˜() =VBAProject.Ñ()
有趣的是,如果函数Ñ()
接受一个参数,并且省略了项目/模块名称,那么Excel自动将公式转换为N(arg)
,这是一个完全不同的函数,并且不会调用Ñ(arg)
。