如何在 Excel UDF 中使用枚举标识符

Posted

技术标签:

【中文标题】如何在 Excel UDF 中使用枚举标识符【英文标题】:How can I use enum identifiers in Excel UDF 【发布时间】:2011-08-25 09:29:03 【问题描述】:

我使用以下代码创建了一个名为 EnergyPrice 的函数:

这是我正在查找的价格表

Prijstabel                  
                               fixed           variable 
Startdate   Einddate    gas       electra   gas      electra
                        €/a       €/a       ct/KWh   ct/KWh

1-1-2010    1-7-2010    181,00    235,00     0,11      0,33 
1-7-2010    1-1-2011    362,00    470,00     0,33      1,30 
1-1-2011    1-7-2011    191,00    245,00     0,22      0,65 
1-7-2011    1-1-2012    162,35    208,25     0,19      0,55 
1-1-2012    1-7-2012    324,70    416,50     0,37      1,11 

这是相关代码

Public Enum Energietype
  v_gas = 1
  v_electricity = 2
End Enum

Public Enum FixedOrVariable
  v_fixed = 1
  v_variable = 2
End Enum

Public Function EnergyPrice(PriceDate As Date, E_type As Energietype, variabel As FixedOrVariable) As Variant

Dim PrijsTable As Range
Dim RowNr As Integer
Dim Found As Boolean
Dim KolomNr As Integer

  Set PrijsTable = Range("EnergyPriceTable")
  If PrijsTable.Columns.Count <> 6 Then Err.Raise Number:=vbObjectError + 1000, Description:="No valid valid pricetable defined"
  RowNr = 1
  Found = False

  While Not (Found) And (RowNr <= PriceTable.Rows.Count)
    Found = (PriceTable.Cells(RowNr, 1).Value <= PriceDate) And (PriceTable.Cells(RowNr, 2) > PriceDate)
    If Not (Found) Then RowNr = RowNr + 1
  Wend
  If Found Then
    If E_type = v_gas Then KolomNr = 1
    If E_type = v_elektra Then KolomNr = 2
    If variabel = v_variabel Then KolomNr = KolomNr * 2
    KolomNr = KolomNr + 2
    EnergyPrice = PriceTable.Cells(RowNr, KolomNr).Value
  Else
    EnergyPrice = Empty
  End If
End Function

问题是如何在 Excel 电子表格中使用上述枚举?所以我可以输入如下公式:

如果我使用数字 1,2,函数可以正常工作,但我想使用枚举名称。 这可以仅使用 Excel VBA 完成吗?

【问题讨论】:

【参考方案1】:

如果您将枚举作为定义的名称添加到工作簿,您可以将它们传递给函数,传递的值是您为其设置枚举的实际值。如果您愿意,可以手动或通过 VBA 执行此操作。

例子:

ActiveWorkbook.Names.Add Name:="v_gas", RefersToR1C1:="=1"
ActiveWorkbook.Names.Add Name:="v_fixed", RefersToR1C1:="=2"

【讨论】:

是的,在这种情况下,VBA 和 Excel 就像两个人住在同一个公寓但在不同的房间里变得更加清楚。他们必须互相敲门才能完成工作。【参考方案2】:

我看到的唯一方法是在工作簿中定义名称,为它们分配枚举的常量。

来自菜单:Insert ... Name .... Define 姓名:v_gas 参考:=1

或者,您可以通过 VBA 创建这些名称,但这没有任何意义,因为这将是 1 个镜头(名称与工作簿一起保存)。

通过使用这些名称,用户可以在输入公式时使用 F3。

【讨论】:

啊哈,我们得出了同样的结论。 +1 :) 谢谢(我猜)这正是我试图避免的事情,但我想我可以在 OnOpen 事件中在 VBA 中创建这些名称,并在 OnClose 事件中销毁它们。我希望能够在 VBA 代码中控制我的名字。

以上是关于如何在 Excel UDF 中使用枚举标识符的主要内容,如果未能解决你的问题,请参考以下文章

带有空格的Java枚举元素?

如何使用在同一类的基模板中的类中声明的枚举

为什么枚举常量没有链接?

C#啥是枚举呢?

c#枚举是不是可以出现重复值

《五》枚举