AW: genau diese Antwort....
07.07.2025 13:56:41
xlKing
Hi zusammen
Ich finde Me keinesfalls überflüssig. Ja im Userform und Tabellenblatt kann man es auch weglassen, weil es sich hier um ein bereits instanziertes Objekt handelt. Aber in der Klassenprogrammierung ist es echt hilfreich. Hier verwende ich Me z.B. gern um einem Unter-Objekt eine Parent-Eigenschaft zu setzen, die auf das Elternelement verweist. Ein simples Beispiel:
In ein Klassenmodul namens "myObjects"
Dim iParent As Object
Dim coll As New Collection
Public Function Add(Name As String) As myObject
coll.Add New myObject, Name
Set Add = coll(coll.Count)
Add.setName Name
If Not iParent Is Nothing Then Add.setParent iParent
End Function
Public Function Count() As Long
Count = coll.Count
End Function
Public Property Get item(index) As myObject
Set item = coll(index)
End Property
Friend Sub setParent(o As Object)
Set iParent = o
End Sub
In ein weiteres Klassenmodul namens "myObject"
Dim iName As String
Dim iParent As Object
Dim iSubobjects As New myObjects
Property Get Name() As String
Name = iName
End Property
Property Get Parent()
Set Parent = iParent
End Property
Friend Sub setParent(o As Object)
Set iParent = o
End Sub
Friend Sub setName(n As String)
iName = n
End Sub
Property Get Subobjects() As myObjects
Set Subobjects = iSubobjects
Subobjects.setParent Me
End Property
In ein allgemeines Modul
Sub Test()
Dim objects As New myObjects
For i = 1 To 2
objects.Add "Test" & i
For k = 1 To 3
objects.item(i).Subobjects.Add "Test" & i & "." & k
Next k
Next i
With objects.item(2).Subobjects
For i = 1 To .Count
Debug.Print .item(i).Name & " hat Elternobjekt " & .item(i).Parent.Name
Next i
End With
End Sub
Ich gebe zu, dieses Beispiel ist wenig sinnreich, weil ich vom Hauptobjekt aus die Liste der Subobjekts aufrufe. Aber wenn man viele verschiedene Klassen hat, macht es durchaus Sinn eine Parent-Eigenschaft zu verwenden. Z.B. kann sich ein Gegenstand entweder in einem Raum oder an einer Person befinden. Wenn ich nun nur ein Objekt vom Typ Gegenstand habe, will ich natürlich wissen, wo es sich befindet.
PS. Die item-Eigenschaft kann man natürlich auch als Standardeigenschaft setzen, sodass man sie nicht immer mit angeben muss. Aber das würde jetzt hier zu weit führen und wäre abseits vom Thema.
Gruß Mr. K.