为什么单个字母的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 NFunction T也是有效的,但它们与内置函数冲突。

认为 CR必须是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)