Ok, hier der wesentliche Extrakt. Es gibt eine Klasse mit einer Collection Namens OberbauschichtenOption Explicit
Private mColOberbauschichten As Collection die sich wie folgt initialisiertPrivate Sub Class_Initialize()
Set mColOberbauschichten = New Collection
End Sub Es gibt unter anderen die Standard Eigenschaften und Funktionen AddPublic Function Add( _
Optional Bauklasse As Variant, _
Optional BauweiseTafel As Variant, _
Optional Bauweisezeile As Variant, _
Optional Dicke As Variant, _
Optional Material As Variant, _
Optional sKey As String) As Oberbauschicht
'//neues Objekt erstellen
Dim objNewMember As Oberbauschicht
Set objNewMember = New Oberbauschicht
'//Initialisierung
If IsMissing(Bauklasse) Then Bauklasse = 6
If IsMissing(BauweiseTafel) Then BauweiseTafel = 0
If IsMissing(Bauweisezeile) Then Bauweisezeile = 0
If IsMissing(Dicke) Then Dicke = 0
If IsMissing(Material) Then Material = 0
'//die Eigenschaften festlegen, die der Methode übergeben werden
With objNewMember
.Bauklasse = Bauklasse
.BauweiseTafel = BauweiseTafel
.Bauweisezeile = Bauweisezeile
.Dicke = Dicke
.Material = 0
.Index = mColOberbauschichten.Count + 1
End With
If Len(sKey) = 0 Then
mColOberbauschichten.Add objNewMember
Else
mColOberbauschichten.Add objNewMember, sKey
End If
'das erstellte Objekt zurückgeben
Set Add = objNewMember
Set objNewMember = Nothing
End Function countPublic Property Get Count() As Long
Count = mColOberbauschichten.Count
End Property ItemPublic Property Get Item(vntIndexKey As Variant) As Oberbauschicht
Set Item = mColOberbauschichten(vntIndexKey)
End Property NewEnumPublic Property Get NewEnum() As IUnknown
Set NewEnum = mColOberbauschichten.[_NewEnum]
End Property und RemovePublic Sub Remove(vntIndexKey As Variant)
mColOberbauschichten.Remove vntIndexKey
End Sub Dazu gibt es eine Übergeordnete Klasse Namens Oberbau, der die Oberbauschichten als Collection zugeordnet wird. Deklariert wie folgt:Option Explicit
Private mColOberbauschichten As Oberbauschichten mit entsprechenden Property Get/Set Public Property Get Oberbauschichten() As Oberbauschichten
If mColOberbauschichten Is Nothing Then
Set mColOberbauschichten = New Oberbauschichten
End If
Set Oberbauschichten = mColOberbauschichten
End Property Public Property Set Oberbauschichten(vData As Oberbauschichten)
Set mColOberbauschichten = vData
End Property Dann gibt es eine weitere Eigenschaft, bei deren Veränderung(Let) der neue Wert auf die gleiche Eigenschaft jedes Mitglieds der Oberbauschichten übertragen werden soll. Entsprechende Member wurden mittels Add zum Zeitpunkt des Fehlers definitv schon angelegt. Das habe ich mit .Count überprüft und somit ist die Klasse auch definitiv initialisiert. Der Fehler tritt in der Zeile "For Each OberbauX in mColOberbauschichten" auf. Public Property Let BauweiseTafel(ByVal vData As Integer)
'//Property aktualisieren
mvarBauweiseTafel = vData
'//BauklasseTafel auf Oberbauschichten übertragen
Dim OberbauschichtX As Oberbauschicht
If Not mColOberbauschichten Is Nothing Then
For Each OberbauschichtX In mColOberbauschichten
OberbauschichtX.BauweiseTafel = vData
Next
End If
End Property Mit gleicher Technik habe ich das bei einigen anderen Klassen auch gemacht und dort funzt es überall. Ich suche schon seit 6 Stunden...... und finde nichts..."umpf!"
Danke für die Mühe....
A. |