访问第二类中的类模块变量

时间:2017-07-20 14:46:57

标签: excel vba excel-vba

我想知道是否有一种方法可以在不同类模块的实例之间共享变量?

我有两个班级:

  • Class 1
  • Class 2

在类1中,我有多个全局变量,我希望Class 2在实例化后可以访问。

可以使用每个变量的get和set属性,但我有大约40/50,所以它看起来有点单调乏味。

所以,相反,我正在尝试使用set属性将Class 1的当前实例传递给Class 2

我创建了一个最小的例子来说明我目前的努力:

第1课:

Public test As String

Private Sub Class_Initialize()
    Call setTest

    Dim b As Class2
    Set b = New Class2
End Sub

Public Property Set Classed(ByRef vClass As Class1)
    Set vClass = Me
End Property

Public Sub setTest(t As String)
    test = "Sam"
End Sub

第2课:

Private Sub Class_Initialize()

    Dim newClass As Class1

    newClass.Classed = newClass
    ' Want to be able to access the test String from class 1 

End Sub

显然我现在正在做的事情是不正确的,所以我想知道是否有人可以指出我出错的地方并告诉我如何实现这个课程分享?

  

添加:运行代码时,我收到了一行编译错误:newClass.Classed = newClass。错误:无效使用属性

1 个答案:

答案 0 :(得分:0)

不太确定,但我感觉你的例子中有点Circular Reference

  

什么是循环引用?
  当两个对象彼此保持引用时,就会发生循环引用。

您可以通过在类中公开Dictionary对象来尝试替代方案,其中 Key 将是您的“变量名称”, Value 将保存实际值

一个例子可能是:

<强>的Class1

Option Explicit

Private mList As Object

Public Property Get List() As Object
    Set List = mList
End Property

Private Sub Class_Initialize()
    Set mList = CreateObject("Scripting.Dictionary")
End Sub

Private Sub Class_Terminate()
    Set mList = Nothing
End Sub

<强>实施

Sub ClassTest()
    Dim a As Class1
    Set a = New Class1

    Dim b As Class1
    Set b = New Class1

    a.List("VarName") = "Sam"  'Set
    b.List("VarName") = a.List("VarName") 'Get / Set

    Debug.Print b.List("VarName")   'Get

    Set a = Nothing
    Set b = Nothing
End Sub

'Output
'Sam