在带有UDF的单元格公式中使用内置的Enum

时间:2013-12-06 13:07:45

标签: excel excel-vba enums user-defined-functions vba

我有一个用户定义的函数,它接受一个具有相关内置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 也许对内置Enum定义的代码进行自动读取可能有助于定义Jean-FrançoisCorbett的Class或命名范围,然后可以避免从头开始键入。我见过这种自动解析,可能的指针是:

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) 已发布评论,指出“内置和用户定义的枚举没有区别”,这是一个骗局。我认为事实并非如此,如果引用的评论是正确的,那么对于目前具体和不同的问题,它可能是答案的一部分(也许值得发布)。

1 个答案:

答案 0 :(得分:6)

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允许我们(这非常难看)从字符串中的名称来评估类成员的值。

使用示例:

enter image description here

根据您自己的要求进行调整,风险自负。