通过引用类函数传递VBA变量

时间:2014-06-10 18:37:34

标签: vba

我有一个具有各种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

我想要传入的属性的实际引用(所以我可以修改它们),但是这个命名法会传递属性的值。

1 个答案:

答案 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