我有一个具有各种Get / Let属性的自定义类
Property Get pGasIP() As Double
pGasIP = zpGasIP
End Property
Property Let pGasIP(ByVal NewValue As Double)
zpGasIP = NewValue
End Property
除了引用这些变量的函数外:
Public Sub CalcProduction(Index As Long, life As Double)
zoGasProdStartGross = TypeCurve("cum", -Base + 1, pGasTimeRestricted, _
pGasIP, pGasDi, pGasDiHyp, pGasBFactor, 0.06, pGasQab, pCurtailment)
End Sub
我试图通过在Breakeven函数中传递对所需变量的引用来迭代这个函数中的变量,如下所示(迭代变量指的是我想要引用的类属性,ObjFunction指的是一个输出值,我想参考和改变)
Public Sub Breakeven(ByRef iterativeVariable As Variant, ByRef ObjFunction as variant)
Dim DesiredValue as Double, CurrentDistance as Double
'set up incremental calculation
IterativeVariable = IterativeVariable + .001
CurrentDistance = DesiredValue - ObjFunction
'calculate new value with incremented variable
CalcProduction 600, 600
CurrentDistane = DesiredValue - ObjFunction
当我尝试在普通模块中传递对象属性时,将传递相应类属性的值而不是引用。有没有办法将对象属性传递给可以修改/计算它们的子程序?
谢谢!
乔丹
修改
我试图在正常模块中传递以下参数:
Object.Breakeven Object.GasIP, Object.GasEUR
我想要传入的属性的实际引用(所以我可以修改它们),但是这个命名法会传递属性的值。
答案 0 :(得分:1)
它是hackish并且可能非常缓慢,但你可以使用CallByName
动态操作对象属性。这是一个例子:
Sub modismod(o1 As Object, prop1$, o2 As Object, prop2$)
Dim i1&, i2&
i1 = CallByName(o1, prop1, VbGet)
i2 = CallByName(o2, prop2, VbGet)
i1 = i1 + 1
i2 = i2 - 1
CallByName o1, prop1, VbLet, i1
CallByName o2, prop2, VbLet, i2
End Sub