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

san*_*ica 3 excel enums vba excel-vba user-defined-functions

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

Public Function bgrcolor_cells(rng As Range, xlcl As Long) As Integer
Run Code Online (Sandbox Code Playgroud)

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

=bgrcolor_cells($A2:$B2,vbRed)
Run Code Online (Sandbox Code Playgroud)

代替

=bgrcolor_cells($A2:$B2,255)
Run Code Online (Sandbox Code Playgroud)

那可能吗?怎么样?

PS:我发现如何在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(根据)已发布评论,指出"内置和用户定义的枚举没有区别",这是一个骗局.我认为不是,如果引用的评论是正确的,那么对于当前具体和不同的问题,它可能是答案的一部分(也许值得发布).

Jea*_*ett 6

您链接的问题已涵盖此主题,并且接受的答案应该可以正常工作.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
Run Code Online (Sandbox Code Playgroud)

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

Function GetValueOfColorEnumByName(colorEnumName As String)
    GetValueOfColorEnumByName = CallByName(New ColorEnums, colorEnumName, VbGet)
End Function
Run Code Online (Sandbox Code Playgroud)

在哪里CallByName允许我们(这非常难看)从字符串中的名称来评估类成员的值.

用法示例:

在此输入图像描述

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

  • 1)[已在此处确认](http://stackoverflow.com/users/2707864/sancho-s),答案相关联,但它的一半杀死了工作的目的(它仍然保留了Enum的其他优点).2)你提出的另一个解决方案很好地描述为"......可能永远不会用它来做任何其他事情而不是......":-),但这是空手而言的飞跃,就像我一样.仍在等待听到可能的替代方案. (2认同)