Hallo VBA-Forum!
Ich habe das im Titel angedeutete Problem, dass ich Instanzen einer Klasse mit Parameterübergabe erzeuge und die Variablen der neu erzeugten Instanz auf den gleichen Speicher zu zeigen scheinen, wie die Variablen der zuvor erzeugten Instanzen.
Sprich: Erzeuge ich ein neues Objekt, werden allen schon erzeugten Objekten die als Parameter übergebenen Werte zugewiesen.
Ich erzeuge die Objekte in einer Sub und füge sie einer Collection in einem Objekt einer anderen Klasse hinzu. Ich habe versucht die temporäre Variable zum erzeugen des Objekts "= Nothing" zu setzen, doch das scheint keinerlei Unterschied zu machen. Wenn ich die Collection überwache, ist nach jeder neuen Instanziierung jede
Womöglich weiß ich nur nicht, wie man in meinem Fall objektspezifische Variablen irgendwie extra deklarieren muss; ich komme hier jedenfalls nicht weiter.
Hier der Code:
Klasse MyOneObject, bei denen die Objekte sich den Speicher zu teilen scheinen:
Option Explicit
Public varOne As MyTwoObject
Public varTwo As String
Public varThree As Integer
Public varFour As Boolean
Public varFive As Integer
Public Function GetMyOneObject(ByRef paramOne As MyTwoObject, ByVal paramTwo As String, ByVal paramThree As Integer, ByVal paramFour As Boolean) As MyOneObject
Set GetMyOneObject = Me
Dim varOne As MyTwoObject
Set varOne = paramOne
Me.varTwo = paramTwo 'Mit und ohne "Me." gleiches Ergebnis
Me.varThree = paramThree
Me.varFour = paramFour
varFive = paramOne.varOne
End Function
Klasse MyTwoObject, deren Objekte eine Collection von MyOneObjects haben:
Option Explicit
Public myOneObjCollection As New Collection
Public varOne As Integer
Public varTwo As String
Public Function GetMyTwoObject(vOne As Integer, vTwo As String) As MyTwoObject
Set GetMyTwoObject = Me
Set myOneObjCollection = New Collection
varOne = vOne
varTwo = vTwo
End Function
Public Function addMyOneObj(ByVal myOneObj As MyOneObject) 'Hier führt ByRef zu keiner Veränderung
myOneObjCollection.Add myOneObj
End Function
Modul3, in dem eine Variable Platz für eine Instanz von MyTwoObject hat:
Public currentMyTwoObj As MyTwoObject
Klasse Init. Hier wird eine Instanz vom Typ MyTwoObject erzeugt und der Variablen in Modul3 zugewiesen:
Option Explicit
Dim myTwoObjTmp As MyTwoObject
Public Sub initialize()
Set myTwoObjTmp = MyTwoObject(5, "String")
Set Modul3.currentMyTwoObj = myTwoObjTmp
End Sub
Klasse Runs, in welcher MyOneObjects erzeugt und der Collection von Modul3.currentMyTwoObj hinzugefügt werden:
Option Explicit
Public Sub moreOneObjects()
Dim myOneObjTmp As MyOneObject
Set myOneObjTmp = MyOneObject(Modul3.currentMyTwoObj, "String", 5, True)
Modul3.currentMyTwoObj.addMyOneObj myOneObjTmp
End Sub
In den Kommentaren stehen Möglichkeiten die ich ausprobiert habe. Ich hoffe mal ich stelle mich einfach nur zu blöd an.
Vielen Dank schonmal im Voraus für jede Hilfe
Viele Grüße
Ben
|