13.01.2018, 11:57
Hallo zusammen,
ich beschäftige mich noch nicht lange mit Klassenmodulen und möchte gerne innerhalb einer Klasse eine andere Klasse verwenden. Nach meinen Recherchen bei Google sollte das funktionieren, aber ich bekomme es nicht hin.
Als Beispiel habe ich zwei Klassen erstellt:
- clsPerson
- clsTraining
Die Personen-Klasse beinhaltet Angaben zu einer Person (Name, Alter usw.):
Die Trainings-Klasse beinhaltet Angaben über Ort, Datum und Trainer eines Trainings. Die Trainer-Angaben sollen hierbei aus der Personen-Klasse kommen:
In einem Allgemeinen Modul möchte ich nun lesend und schreibend darauf zugreifen:
Die Zeile
oTraining.Trainer.VName = "Hans"
bringt die Fehlermeldung "Objektvariable ... nicht festgelegt."; aber wie kann ich die festlegen? Oder ist der Trainer innerhalb der Trainings-Klasse falsch definiert? Oder wo ist mein Fehler sonst?
Danke schon mal im Voraus für eure Hilfe!
ich beschäftige mich noch nicht lange mit Klassenmodulen und möchte gerne innerhalb einer Klasse eine andere Klasse verwenden. Nach meinen Recherchen bei Google sollte das funktionieren, aber ich bekomme es nicht hin.
Als Beispiel habe ich zwei Klassen erstellt:
- clsPerson
- clsTraining
Die Personen-Klasse beinhaltet Angaben zu einer Person (Name, Alter usw.):
Code:
' Modul: clsPerson
' Typ: Klassenmodul
Option Explicit
Private mVName As String
'~~~ <VName> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Public Property Get VName() As String
VName = mVName
End Property
Public Property Let VName(ByVal ThisVName As String)
mVName = ThisVName
End Property
Die Trainings-Klasse beinhaltet Angaben über Ort, Datum und Trainer eines Trainings. Die Trainer-Angaben sollen hierbei aus der Personen-Klasse kommen:
Code:
' Modul: clsTraining
' Typ: Klassenmodul
Option Explicit
Private mDatum As Date
Private mOrt As String
Private mTrainer As clsPerson
'~~~ <Datum> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Public Property Get Datum() As Date
Datum = mDatum
End Property
Public Property Let Datum(ByVal ThisDatum As Date)
mDatum = ThisDatum
End Property
'~~~ <Ort> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Public Property Get Ort() As String
Ort = mOrt
End Property
Public Property Let Ort(ByVal ThisOrt As String)
mOrt = ThisOrt
End Property
'~~~ <Trainer> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Public Property Get Trainer() As clsPerson
Set Trainer = mTrainer
End Property
Public Property Set Trainer(ByVal ThisTrainer As clsPerson)
Set mTrainer = ThisTrainer
End Property
In einem Allgemeinen Modul möchte ich nun lesend und schreibend darauf zugreifen:
Code:
' Modul: vbaTest
' Typ: Allgemeines Modul
Option Explicit
Public oTrainer As clsPerson
Public oTraining As clsTraining
Sub Test()
Set oTrainer = New clsPerson
Set oTraining = New clsTraining
oTrainer.VName = "Max"
Debug.Print "Vorname:", oTrainer.VName
oTraining.Datum = "13.01.18"
oTraining.Ort = "Berlin"
' hier kommt die Fehlermeldung
oTraining.Trainer.VName = "Hans"
Debug.Print "T-Datum:", oTraining.Datum
Debug.Print "T-Ort:", oTraining.Ort
Debug.Print "Trainer:", oTraining.Trainer.VName
Set oTraining = Nothing
Set oTrainer = Nothing
End Sub
Die Zeile
oTraining.Trainer.VName = "Hans"
bringt die Fehlermeldung "Objektvariable ... nicht festgelegt."; aber wie kann ich die festlegen? Oder ist der Trainer innerhalb der Trainings-Klasse falsch definiert? Oder wo ist mein Fehler sonst?
Danke schon mal im Voraus für eure Hilfe!
Herzliche Grüße aus dem Rheinland
Jörg
[Windows 10, Microsoft 365]
Jörg
[Windows 10, Microsoft 365]