Hallo Zusammen, ich beschäftige mich nun schon seit ein paar Tagen intensiv mit Klassen und deren Verwendung in VBA.
(Leider bin ich ein neuling in sachen VBA Programmierung)
Dabei stoße ich immer auf dieselben Probleme. Im Internet besteht ja eine unüberschaubare vielzahl an Forumsbeiträgen mit Fragen und meistens erfolgreichen Problemlösungs-Antworten. Leider scheine ich beim Suchen die falschen Suchbegriffe zu verwenden oder das Problem nicht richtig zu identifizieren.
Ich habe das ganze mal in Kurzfassung nachgebaut und hoffe, dass mir einer von euch Wissenden meine Fehler aufzeigen kann. Die Fragen stehen in den Kommentaren. vielen Dank
' ---------------------------------------Klassen--------------------------------
'Klasse Auto
Private mName As String
Private mReifen As Reifen
Private Sub Class_Initialize()
Set mReifen = New Reifen
End Sub
Public Property Get Name() As String
Name = mName
End Property
Public Property Let Name(ByVal newName As String)
mName = newName
End Property
Public Property Get ReifenEigenschaft() As Reifen
ReifenEigenschaft = mReifen
End Property
Public Property Set ReifenEigenschaft(ByVal ReifenEigenschaft As Reifen)
Set mReifen = ReifenEigenschaft
End Property
'Ende Klasse Auto
'Klasse Reifen
Private mGummi As String
Private Sub Class_Initialize()
mGummi = "nichts"
End Sub
Public Property Get Gummi() As String
Gummi = mGummi
End Property
Public Property Let Gummi(ByVal newGummi As String)
mGummi = newGummi
End Property
'Ende Klasse Reifen
' ---------------------------------------Funktionen--------------------------------
Private Sub Hauptprogramm()
Dim neuesAuto As Auto
Set neuesAuto = New Auto
neuesAuto.Name = "Rosti"
'Hier entsteht die 1. Fehlermeldung: Objektvariable oder With-Variable nicht festgelegt
'Dabei sollte doch die Reifeneigenschaft vorhanden sein. Habe die entsprechende Zeile dann auskommentiert und ein Workaround gebastelt
'neuesAuto.ReifenEigenschaft.Gummi = "Vollgummi"
'Ich umgehe den Fehler indem ich eine neues Element der Klasse Reifen erstelle
Dim DummyReifen As Reifen
Set DummyReifen = New Reifen
DummyReifen.Gummi = "Vollgummi"
Set neuesAuto.ReifenEigenschaft = DummyReifen
'Das widerum funktioniert soweit.. allerdings kann ich mir nicht vorstellen,dass man das immer so machen muss
Unterprogramm neuesAuto
End Sub
Private Sub Unterprogramm(ByVal newAuto As Auto)
Dim Reifengummi As String
'Hier die 2. Frage: Wie kann ich die Eigenschaft abfragen? Auch hier habe ich wieder das Problem, dass die "Gummi-Eigenschaft" nicht Existiert.
'in der Überwachung kann ich sehen, dass die Private Variablen sehr wohl Werte führen, nur die "Funktionsvariablen" (sofern mann sie so nennt) nicht.
Reifengummi = newAuto.ReifenEigenschaft.Gummi
MsgBox (Reifengummi)
End Sub
|