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

通过引用将VBA变量传递给类函数,vba,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) zoGasP

我有一个具有各种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
我试图通过在盈亏平衡函数中传递对所需变量的引用来迭代此函数中的变量,如下所示(迭代变量指我想要引用的类属性,ObjFunction指我想要引用和更改的输出值)

当我尝试在普通模块中传递对象属性时,传递的是相应类属性的值,而不是引用。有没有办法将对象属性传递到可以修改/计算它们的子例程中

谢谢

约旦

编辑:

我试图在普通模块中传递以下参数:

Object.Breakeven Object.GasIP, Object.GasEUR

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

这很粗糙,可能速度非常慢,但是您可以使用
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

Andre的可能副本,我认为我试图完成的与您链接的示例不同,因为我没有试图传递的显式变量。我希望函数足够灵活,可以接受任何用户指定的对象属性和更改。我知道。在任何情况下,都不会传递true引用,而是传递一个由属性临时使用的重影引用。你确定这不是你的问题吗?请告诉我,安德烈,你搞定了。对于那些对面向对象编程相对陌生的人,有没有关于如何传递一个真正的参考或一个好的解决方法的建议?对我的问题的一些回答提供了关于如何进行的建议。最简单的方法是公开属性的内部变量,并直接使用它们。VBA的OOP非常弱(可以说“它简直糟透了”),所以不要被通常的最佳实践(比如在每次转换时都将变量隐藏在属性后面)逼得太紧。感谢rdhs,这就成功了。对于我的需求来说,速度应该不是什么大问题。
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