【问题标题】:Use a builtin Enum in a cell formula with a UDF在带有 UDF 的单元格公式中使用内置枚举
【发布时间】:2013-12-23 20:26:33
【问题描述】:

我有一个用户定义的函数,它接受一个参数,该参数具有关联的内置函数enum

Public Function bgrcolor_cells(rng As Range, xlcl As Long) As Integer

我想在单元格中写一个这样的公式

=bgrcolor_cells($A2:$B2,vbRed)

而不是

=bgrcolor_cells($A2:$B2,255)

这可能吗?怎么样?

PS:我找到了How can I use enum identifiers in Excel UDF,但它指的是用户定义的枚举。我不知道我想使用内置 Enum 是否会有所不同。

编辑 1 也许对定义了内置枚举的代码进行一些自动阅读可能有助于定义 Jean-François Corbett 的类或命名范围,这样就可以避免从头开始输入。我见过这样的自动解析,可能的指针是:

http://www.cpearson.com/excel/EnumNameList.aspx

http://www.excelforum.com/excel-programming-vba-macros/356892-programmatic-generation-of-enum-to-string-functions.html

编辑 2(根据 this) 已经发布了一条评论,指出“内置枚举和用户定义的枚举没有区别”,这是一个骗局。我认为不是,如果引用的评论是正确的,那么它可能是当前特定和不同问题的答案的一部分(也许值得发布)。

【问题讨论】:

  • @pnuts - 是的,这行得通。但是我将无法利用内置函数,我必须为 Enum 中的每个可用项目(或至少我预见到可能使用的项目)定义一个命名范围。这很不方便。
  • How can I use enum identifiers in Excel UDF 的可能副本。 (我知道你已经看过了,但实际上内置和用户定义的枚举没有区别。)
  • @Jean-FrançoisCorbett - 我认为这不是重复的,但这值得一个具体的答案(这就是为什么我不确定,这就是为什么问)。如果答案类似于“内置枚举和用户定义的枚举完全相同,为此目的”,那么我想最好在此处发布该答案以及指向另一个线程的链接。我猜“这个问题在这里可能已经有了答案”和“可能重复”可能会误导其他读者发现这个线程。我实际上已经看到了许多其他类似的案例(这误导了我自己)。
  • @sancho.s:这只是问题被标记为重复时的默认文本。我没写。之后我只在括号中写了这句话。但我认为这是重复的,因为完全相同的答案对这两个问题同样有效。
  • stackoverflow.com/questions/10036711/… ...但不要那样做。

标签: excel enums user-defined-functions vba


【解决方案1】:

The question you link to 已经涵盖了这个主题,并且接受的答案应该可以正常工作。 VBA 内置枚举没有特别的快捷方式。

否则,您可以尝试以下方法。


仅供娱乐

在我为此被处以私刑之前,我想说我这样做只是为了作为原理证明的乐趣,我自己可能永远不会使用它!

创建一个名为ColorEnums的类:

Option Explicit

Public vbRed As Long
Public vbGreen As Long
'etc.

Private Sub Class_Initialize()
    vbRed = VBA.vbRed
    vbGreen = VBA.vbGreen
    'etc.
End Sub

像这样创建一个用户定义的函数:

Function GetValueOfColorEnumByName(colorEnumName As String)
    GetValueOfColorEnumByName = CallByName(New ColorEnums, colorEnumName, VbGet)
End Function

CallByName 允许我们(这很丑陋)从字符串中的名称评估类成员的值。

示例用法:

适应您自己的要求,风险自负。

【讨论】:

  • 1) As confirmed here,答案链接工作,但它一半杀死了保存工作的目的(它仍然保留了枚举的其他优点)。 2)您提出的另一个解决方案很好地描述为“......可能永远不会自己将它用于......”:-),但它是我空手而归的飞跃。仍在等待听到可能的替代方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多