Klassen und Vererbung von Subs mit VBA
Schritt-für-Schritt-Anleitung
-
Klasse erstellen: Öffne den VBA-Editor (ALT + F11) und füge eine neue Klasse hinzu. Nenne sie beispielsweise BasisKlasse
.
' BasisKlasse
Private myRange As Range
Public Property Set MyRange(rng As Range)
Set myRange = rng
End Property
Public Property Get MyRange() As Range
Set MyRange = myRange
End Property
-
Abgeleitete Klassen erstellen: Erstelle zwei neue Klassen, z.B. AbgeleiteteKlasse1
und AbgeleiteteKlasse2
, die von BasisKlasse
erben.
' AbgeleiteteKlasse1
Private Sub Init()
' Initialisierungscode für AbgeleiteteKlasse1
End Sub
Public Sub BeispielSub()
If MyRange Is Nothing Then
Call Init
End If
End Sub
-
Vererbung nutzen: In deinen abgeleiteten Klassen kannst du die Funktionen der Basis-Klasse aufrufen, wobei du die Methoden anpassen kannst, um spezifische Anforderungen zu erfüllen.
Häufige Fehler und Lösungen
-
Fehler: "Doppelte Namensvergabe"
Wenn du versuchst, eine Methode in einer abgeleiteten Klasse mit dem gleichen Namen wie in der Basis-Klasse zu verwenden, führt dies zu einem Fehler. Um dies zu vermeiden, verwende unterschiedliche Namen für deine Subs.
-
Fehler: "Nothing"-Referenz
Wenn die Range-Variable Nothing
ist und die Init-Prozedur nicht aufgerufen wird, überprüfe, ob du die Property MyRange
korrekt gesetzt hast.
Alternative Methoden
Eine weitere Möglichkeit, Klassen in VBA zu verwenden, besteht darin, eine Objektbibliothek zu erstellen, die deine Klassen definiert. Dies könnte dir helfen, die VBA-Vererbung besser zu strukturieren und zu nutzen. Beachte, dass die Unterstützung für OOP in einer zukünftigen Excel-Version möglicherweise verbessert wird, da VBA auf VisualBasic.Net umgestellt wird.
Praktische Beispiele
Hier ist ein einfaches Beispiel, wie du mit excel klassen bilden
und vba class inheritance
arbeiten kannst:
Sub Beispiel()
Dim obj1 As AbgeleiteteKlasse1
Set obj1 = New AbgeleiteteKlasse1
Dim rng As Range
Set rng = ThisWorkbook.Sheets(1).Range("A1")
obj1.MyRange = rng
obj1.BeispielSub
End Sub
In diesem Beispiel wird ein Objekt der AbgeleiteteKlasse1
erstellt und eine Range zugewiesen. Wenn die Range Nothing
ist, wird die Init-Prozedur aufgerufen.
Tipps für Profis
- Nutze
RaiseEvent
in deiner Klasse, um benutzerdefinierte Ereignisse zu erstellen, die von abgeleiteten Klassen behandelt werden können.
- Dokumentiere deine Klassen gründlich, um sicherzustellen, dass du und andere Benutzer die Struktur und Funktionalität leicht verstehen können.
- Experimentiere mit verschiedenen Vererbungsebenen und -strukturen, um ein tiefes Verständnis der
vba vererbung
zu entwickeln.
FAQ: Häufige Fragen
1. Kann ich in VBA einen Konstruktor verwenden?
In VBA gibt es keine echten Konstruktoren oder Destruktoren, wie sie in anderen OOP-Sprachen vorhanden sind. Du kannst jedoch Initialisierungs-Subs verwenden, um Objekte zu initialisieren.
2. Ist es möglich, Subs in einer abgeleiteten Klasse zu überschreiben?
In VBA ist das Überschreiben von Subs nicht direkt möglich, da die Sprache keine virtuelle Methoden unterstützt. Stattdessen solltest du unterschiedliche Namen für die Methoden verwenden, um Konflikte zu vermeiden.