Vba 如何使用函数调用的值声明常量变量
在VBA模块中,我有以下常量声明:Vba 如何使用函数调用的值声明常量变量,vba,ms-access,constants,Vba,Ms Access,Constants,在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_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
,我不希望这样做
编辑根据SO的问题,我正在使用MS Access。创建一个类,该类读取单元格并向值提供一个仅获取的接口 这里有一个名为
ItsMyValueClass
选项显式
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
在一个与模块和类类似的一行程序中,用于纯常量访问:
Public Property Get myConst() As Integer: myConst = 3: End Property
您可以这样使用它:
Sub test()
Debug.Print "myConst: " & myConst 'would print: "myConst: 3"
End Sub
如果必须使用自定义值初始化一次,则可以使用静态属性和一个或多个私有变量:
Private ci As Boolean 'constants initialized
Private myConst1_ As Integer
Private myConst2_ As Integer
Static Property Get myConst1() As Integer
If Not ci Then init
myConst1 = myConst1_
End Property
Static Property Get myConst2() As Integer
If Not ci Then init
myConst2 = myConst2_
End Property
Private Sub init()
'these can come from anywhere:
myConst1_ = 3
myConst2_ = 5
ci = True
End Sub
- 它们在第一次访问第一个“常量”属性时初始化
- 如果您必须更早地初始化它们,您可以更早地调用
函数(如果确保属性不被更早地访问,可以选择删除init
变量和所有相关行)ci
initConsts
?这似乎是合乎逻辑的方法,“限制”?这不是一个限制;这是有意的设计。常量被设计成-常量,意思是不改变值),变量被设计成使其值改变(改变)。几乎每种语言都有区别,就像英语词典一样。它们是根据它们的预期用途命名的。没有限制-这是一个设计好的结构。