2015-04-13 2 views
1

В модуле VBA У меня есть следующее объявление констант:Как объявить постоянную переменную со значением вызова функции

Private Const const_abc = 3000 
Private Const const_def = 900 
Private Const const_etc = 42 
' and so on and so forth 

Теперь я должен инициализировать эти значения с один раз функциональный вызов, в идеале что-то подобное

Private Const const_abc = someFunc(18) 
Private Const const_def = someFunc(7) 
Private Const const_etc = someFunc(5) 
' and so on and so forth 

Конечно, это не сработает в VBA. Итак, существует ли общая схема того, как справляться с таким требованием?

я, вероятно, мог бы вот так

Private const_abc As Double 
Private const_def As Double 
Private const_etc As Double 

sub initConsts() 
    const_abc = someFunc(18) 
    const_def = someFunc(7) 
    const_etc = someFunc(5) 
end sub 

Но тогда я должен убедиться, что initConsts называется, который я предпочел бы не делать.

Редактировать По вопросу о S O, я использую MS-Access.

+0

Какое приложение вы работаете? –

+0

@SO, это вопрос? VBA - это VBA независимо от приложения ... –

+0

@SO, я использую Access. –

ответ

0

Создайте класс, который читает ячейку и представляет Get - только интерфейс к значению.

Вот класс называется ItsMyValueClass

Option Explicit

Private pMyVal As Integer 

Public Property Get MyValue() As Integer 
    MyValue = pMyVal 
End Property 

Private Sub class_initialize() 
    'pMyVal = Sheet.Range("somewhere) 
    pMyVal = 17 
End Sub 

А вот код в модуле:

Option Explicit 

Sub IsItReadOnly() 
    Dim valu As ItsMyValueClass 
    Dim x As Integer 
    Set valu = New ItsMyValueClass 
    x = valu.MyValue 
    'valu.MyValue = 23 'compile error "Can't assign to read-only property" 
End Sub 
Смежные вопросы