【问题标题】:Is it possible to write a UDF in VBA that contains a period in the name?是否可以在 VBA 中编写名称中包含句点的 UDF?
【发布时间】:2013-04-09 03:08:50
【问题描述】:

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

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

例如,我想使用公式=NAME.SUFFIX()引用下面的函数

Option Explicit

Function NAMEdotSUFFIX() As Variant

    NAMEdotSUFFIX = 42

End Function

【问题讨论】:

  • 是的(有点) - 您可以创建一个名为“name”的模块,并且您的函数“suffix”将包含在该模块中。然后,您可以在工作表中使用=Name.Suffix()
  • 在 VBA 中,您不能在 STDEV.S 中使用带有点的 UDF 名称,但是您可以创建一个 VSTO 解决方案,您可以在 ClickOnce 安装程序中提供这种名称。
  • 蒂姆,您能否将您的答案作为“正确”答案,以便我接受。谢谢

标签: vba excel user-defined-functions


【解决方案1】:

这在 VBA 中是不可能的。 This MSDN article 展示了如何在 VBA 中定义函数,特别是 this article 列出了元素名称的规则。

【讨论】:

  • 根据问题,我接受这个答案在技术上是正确的。但是请注意 Tim 和 Sid 的 cmets,它们提供了解决此限制的实用解决方案
【解决方案2】:

正如@SiddharthRout 已经建议的那样,在声明函数名称时,外部库的限制比 VBA 少,因此外部名称中允许使用句点。

尽管有 MSDN 文档,但 可以在 VBA 标识符中使用 一些 特殊字符,包括 UDF。特殊字符甚至可以是标识符中的 first/only 字符。根据 VBA 项目和 VBE 的代码页,特殊字符的可用性会有所不同。

这是一个完全有效的 VBA 函数:

Public Function Foo·Bar()
  Foo·Bar = 5
End Function

并且可以在 Excel 公式中使用:

=Foo·Bar()
5

同样,函数的这个gem使用一个不间断的空格作为函数名:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多