能否在VBA中编写一个包含句点的UDF函数名称?

6

Excel 2010内置了一些函数名中包含句点的函数。例如 STDEV.SPERCENTILE.EXC

使用VBA,是否可以给自己的函数分配一个名称,比如PERCENTILE.CUSTOM

例如,我想用公式=NAME.SUFFIX()引用以下函数。

Option Explicit

Function NAMEdotSUFFIX() As Variant

    NAMEdotSUFFIX = 42

End Function

6
可以(有点像)- 你可以创建一个名为“name”的模块,其中包含你的函数“suffix”。然后在表格中,你可以使用=Name.Suffix() - Tim Williams
1
在VBA中,您不能使用点(.)作为UDF名称,例如STDEV.S。话虽如此,您可以创建一个VSTO解决方案,在ClickOnce安装程序中使用这种类型的名称。 - Siddharth Rout
1
Tim,请把你的答案写成一个“正式”的答案,这样我就可以接受它了。谢谢。 - JustinJDavies
2个回答

6
正如 @SiddharthRout 已经建议的那样,外部库在声明函数名称时比 VBA 限制较少,因此允许在外部名称中使用句点。
尽管 MSDN 文档说明了这一点,但实际上在 VBA 标识符(包括 UDFs)中可以使用一些特殊字符。特殊字符甚至可以是标识符中的第一个/唯一字符。特殊字符的可用性将根据 VBA 项目和 VBE 的代码页而有所不同。
这是一个完全有效的 VBA 函数:
Public Function Foo·Bar()
  Foo·Bar = 5
End Function

这个可以在Excel公式中使用:

=Foo·Bar()
5

同样地,这个非常棒的函数使用一个不间断空格作为函数名。
Public Function  ()
    = 6
End Function

然而,使用NBSP的函数是有效的,但遗憾的是,在Excel公式中无法使用。

可以使用以下方法:

Public Function ·()
  · = 5
End Function

额外技巧

有人忘了告诉Enum团队关于标识符规则。虽然枚举不能在Excel公式中使用,但是你可以在方括号中使用除回车或方括号之外的任何字符作为枚举名称或成员。

以下是完全有效的VBA代码:

Enum [Foo : Bar = 5 : End Enum]
  [.B!a r"] = 6
End Enum

而 VBE 漂亮的打印程序将其转换为这个无法解析的混乱:

Enum Foo : Bar = 5 : End Enum
  [.B!a r"] = 6
End Enum

1

这在VBA中是不可能的。 此MSDN文章 展示了如何在VBA中定义函数,特别是这篇文章概述了元素名称的规则。


1
我接受这个答案在技术上是正确的,符合问题要求。但请注意Tim和Sid的评论,他们提供了实用的解决方案来解决这个限制。 - JustinJDavies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接