Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Klassen und "Vererbung" von Subs mit VBA

Forumthread: Klassen und "Vererbung" von Subs mit VBA

Klassen und "Vererbung" von Subs mit VBA
23.03.2004 21:59:41
Stefan
Hallo Leute,
wer kann mir mit folgendem Problem mit Klassen auf die Sprünge helfen:
Ich möchte eine Klasse zur spez. Bearbeitung von Range-Objekten definieren
mit einer Range-Variablen (Zugriff property set/get) und diversen eigenen Funktionen / Subs.
Nun möchte ich von dieser "Basis"-Klasse zwei abgeleitete Klassen bilden, die
beide auf eine Instanz obiger Klasse (und damit auf die Fktn./Subs) zurückgreifen.
Enthält die Range-Variable in der "Basis"-Klasse den Wert "Nothing", soll eine Init-Prozedur aufgerufen werden (Aufruf in der Basis-Klasse, event. auch per RaiseEvent), die aber in beiden abgeleiteten Klassen definiert ist und unterschiedlich ist.
Ist das verständlich ?
Letztendlich möchte ich wissen, ob OOP in VBA soweit funktioniert, das Prozeduren in abgeleiteten Klasse "überschrieben" werde können (analog z.B. Worksheet_Change-Prozedure)
Im Voraus vielen Dank, Stefan
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Klassen und "Vererbung" von Subs mit VBA
23.03.2004 23:12:39
Ulf
In der nächsten Excelversion wird vermutlich VBA auf VisualBasic.Net
aufsetzen und dann geht das alles.
Ulf
AW: Klassen und "Vererbung" von Subs mit VBA
23.03.2004 23:27:14
Uwe
Hallo, Stefan,
soweit ich bisher in VBA vorgedrungen bin, konnte ich noch keine Hinweis finden, dass ein Konstruktor/Dekonstruktor mit den Funktionen wie in OOP beschrieben sind.
Eigene Klassen, gar noch mit virtuelle Klassen, können wohl nur über eine eigene Objektbibliothek eingebunden werden und müssen wohl auch dort beschrieben sein.
Ein "Nachbilden" und die "manuelle" Einbindung von "Klassen" ist durch den Programmierer vorzunehmen.
Ein Überschreiben von Subs und Funcs ist nicht möglich, da eine doppelte NAmensvergabe bereits zum Fehler führt.
Gruß,
Uwe
Anzeige
;
Anzeige

Infobox / Tutorial

Klassen und Vererbung von Subs mit VBA


Schritt-für-Schritt-Anleitung

  1. 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
  2. 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
  3. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige