ich bin neu in Forum da ich Unterstützung benötige. Ich habe Erfahrung mit VBA, bin aber neu bei Klassenmodulen.
Ich habe (mit Hilfe eurer Beiträge) eine kaskadiertes Klassengebilde erstellt. Diese besteht aus 3 Klasssenmodulen
In der Klasse(1) "cls1Feld" sind die eigentlichen Daten hinterlegt (hier: "PosA" und "PosZ")
Die Klasse(2) "cls2Zeile" bildet eine Auflistung von einigen Klasse(1) Instanzen (hier: 3)
Die Klasse(3) "cls3Bild" bildet ein Auflistung von einigen Klasse(2) Instanzen (hier: 3).
Wichtig ist dass ich alle Instanzen aller Klassen in Schleifen ansprechen kann (mit Schleifenindex)
Ich kann alle Instanzen erzeugen, mit Daten befüllen und auch die Daten der untersten Klasse einzeln wieder auslesen.
Aber ich muss einige Daten der untersten Klasse "cls1Feld" nachträglich ändern.
Dazu müssen in der Klasse "cls2Zeile" und "cls3Bild" noch mindesten ein zusätzlicher Eintrag hinzukommen.
Dazu habe ich aber nicht finden können. Was und wo muss ich noch etwas eintragen, damit ich nachträglich Daten der untersten Ebene ändern kann.
Nachfolgend die 3 Klassen und der Modul-Code.
' ------ Klassenmodul "cls1Feld" --------
Option Explicit
Private myPosA As String
Private myPosZ As String
Public Property Get PosA() As String
PosA = myPosA
End Property
Public Property Let PosA(ByVal pPosA As String)
myPosA = pPosA
End Property
Public Property Get PosZ() As String
PosZ = myPosZ
End Property
Public Property Let PosZ(ByVal pPosZ As String)
myPosZ = pPosZ
End Property
' ------ Klassenmodul "cls2Zeile" --------
Option Explicit
Private colFelder As Collection
Private Sub Class_Initialize()
Set colFelder = New Collection
End Sub
Private Sub Class_Terminate()
Set colFelder = Nothing
End Sub
Function Add(pFeld As cls1Feld, pName As String)colFelder.Add pFeld, pName
End Function Function GetEigenschaft(strKey As String) As cls1Feld
Set GetEigenschaft = colFelder(strKey)
End Function ' ------ Klassenmodul "cls3Bild" --------
Option Explicit
Private colZeilen As Collection
Private Sub Class_Initialize()
Set colZeilen = New Collection
End Sub
Private Sub Class_Terminate()
Set colZeilen = Nothing
End Sub
Function Add(pZeile As cls2Zeile, pNameZeile As String)colZeilen.Add pZeile, pNameZeile
End Function Function GetEigenschaft(pName As String) As cls2Zeile
Set GetEigenschaft = colZeilen(pName)
End Function ' ------ Modul --------
Sub Erstellen_und_Testen()
Dim objFeld() As cls1Feld
Dim objZeile() As cls2Zeile
Dim objBild As cls3Bild
Dim iK1%, iK2%
Set objBild = New cls3Bild
ReDim objZeile(3)
For iK2 = 1 To 3
Set objZeile(iK2) = New cls2Zeile
ReDim objFeld(3)
For iK1 = 1 To 3
Set objFeld(iK1) = New cls1Feld
objFeld(iK1).PosA = "PosA_" & iK2 & iK1
objFeld(iK1).PosZ = "PosZ_" & iK2 & iK1
objZeile(iK2).Add objFeld(iK1), "Feld" & iK1
Next iK1
objBild.Add objZeile(iK2), "Zeile" & iK2
Next iK2
' es folgt die Ausgabekontrolle
For iK2 = 1 To 3
For iK1 = 1 To 3
Debug.Print objBild.GetEigenschaft("Zeile" & iK2).GetEigenschaft("Feld" & iK1).PosA
Debug.Print objBild.GetEigenschaft("Zeile" & iK2).GetEigenschaft("Feld" & iK1).PosZ
Next iK1
Next iK2
End Sub