Как я могу использовать идентификаторы перечисления в Excel UDF - PullRequest
3 голосов
/ 25 августа 2011

Я создал функцию 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? Поэтому я могу ввести формулу, например:

enter image description here

Если я использую числа 1,2, функции работают нормально, но я хочу использовать имена перечислений.
Можно ли это сделать, используя только Excel VBA?

Ответы [ 2 ]

12 голосов
/ 25 августа 2011

Если вы добавляете перечисления в рабочую книгу как определенные имена, вы можете передать их в функции, а переданное значение будет фактическим значением, для которого вы установили перечисление.Сделайте это вручную или через VBA, если хотите.

Пример:

ActiveWorkbook.Names.Add Name:="v_gas", RefersToR1C1:="=1"
ActiveWorkbook.Names.Add Name:="v_fixed", RefersToR1C1:="=2"
5 голосов
/ 25 августа 2011

Единственный способ, которым я вижу, - это определить имена в вашей книге, присвоив им константы ваших перечислений.

  • Из меню: Insert ... Name .... Define
  • Имя: v_gas
  • Относится к: =1

В качестве альтернативы,Вы можете создавать эти имена с помощью VBA, но это не представляет интереса, так как это будет 1 выстрел (имена сохраняются вместе с рабочей книгой).

Используя такие имена, пользователи смогут использовать F3 при вводе формулы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...