Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Klassenmodule, einfaches Beispiel?

Forumthread: Klassenmodule, einfaches Beispiel?

Klassenmodule, einfaches Beispiel?
Werner
Bisher habe ich nur halb begriffen, was ein sogenanntes “Klassenmodul“ ist.
Ich habe mir geraume Zeit die Zähne an dem Beispiel in Weber/Schwimmer, Handbuch-Excel-Programmierung, p. 879 ff. ausgebissen, doch das Beispiel in diesem ansonsten so vortrefflichen Buch ist ziemlich kompliziert (der Code für das Klassenmodul umfasst mehr als drei Seiten und von Finanzen muss man auch etwas verstehen).
Ein Klassenmodul ist eine Schablone zu einem Objekt, also die Vorlage dazu. (ebd., p. 880). Auf p. 896 heißt es, die Erzeugung eines neuen Objekts sei die „Instanzierung „ einer ”Objektklasse“.
Demnach ist eine „Klasse“ also offenbar immer eine „Objektklasse“, dochwas ist dann ein „Objekt“. Der Begriff „Objekt“ schwirrt irgendwo zwischen den Begriffen „Klasse“ und „Instanz“ herum.
Manchmal lese ich in der Fachliteratur, ein „Objekt“ werde instanziert, dann wiederum ist von der Instanzierung einer „Klasse“ die Rede. Aber Objekte sind doch keine Klassen, oder doch!
Gibt es irgendwo ein ganz einfaches Beispiel für ein simples Klassenmodul mit z.B. nur zwei Eigenschaften samt einer Beispielprozedur für dessen Instanzierung, über das man einen Einstieg in diese Art der Programmierung finden kann?
Ich bin sicher, dass einige Teilnehmer des Forums, wie z.B. auch ich, schon selbst VBA-Programme geschrieben haben, ohne dabei jemals ein Klassenmodul verwendet zu haben.
Das Problem der Instanzierung gibt es auch bei Userforms. Da ist von “Instanzen“ einer Userform die Rede, und man fragt sich, wie im obigen Fall, ob da ein „Objekt“, eine „Klasse“ oder eine „Objektklasse“ instanziert wird.
Vielleicht hat einer von euch einen klärenden Vorschlag oder einen Hinweis auf eine weiterführende Internetseite, der es uns, die wir irgendwo im Mittelfeld der Programmierung liegen, ermöglicht, auf der “Klassenleiter“ eine Stufe höher zu steigen.
Besten Dank! Werner

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Klassenmodule, einfaches Beispiel?
24.04.2008 09:25:00
Hajo_Zi
Hallo Werner,
ein Objekt kann auch eine TextBox sein, Das Objekt kann dann alle Eigenschaften der TextBox ansprechen.
Bei Deinem Level dürftest Du mit diesem Beispiel klar kommen http://hajo-excel.de/chCounter3/getfile.php?id=112

Anzeige
AW: Klassenmodule, einfaches Beispiel?
Werner
Hallo Hajo_Zi,
Dank für den Code, aber in Klassenprogrammierung bin ich wirklich Anfänger (über der Ebene "gut" gibt es noch die Ebenen "sehr gut" und "Experte", die ich beide keineswegs für mich in Anspruch nehme). Man kann schon längere Programme geschrieben haben, ohne je mit einem Klassenmodul zu tun gehabt haben.
Dieses Beispiel ist sicherlich studierenswert, doch für eine erste Einführung in Klassenmodule
schon etwas kompliziert (auch weil es keinen Kommentar enthält). Werner

Anzeige
AW: Klassenmodule, einfaches Beispiel?
24.04.2008 09:36:00
Renee
Hi Werner,
Guckst Du: Klassen [0] - Vorwort ff.
GreetZ Renée

AW: Klassenmodule, einfaches Beispiel?
Werner
Hallo Renee,
damit komme ich schon weiter! Herzlichen Dank! Habe von Peter Haserodt schon mal etwas gelesen. Er
erklärt recht verständlich. Werner
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Einfaches Beispiel für Klassenmodule in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und wechsle in den Visual Basic for Applications (VBA) Editor. Das kannst Du tun, indem Du ALT + F11 drückst.

  2. Füge ein Klassenmodul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)".
    • Wähle Einfügen > Klassenmodul.
  3. Benenne das Klassenmodul:

    • Wähle im Eigenschaftenfenster das Klassenmodul aus und ändere den Namen zu MeinKlasse.
  4. Definiere Eigenschaften im Klassenmodul:

    ' Klasse: MeinKlasse
    Private pEigenschaft1 As String
    Private pEigenschaft2 As Integer
    
    Public Property Get Eigenschaft1() As String
       Eigenschaft1 = pEigenschaft1
    End Property
    
    Public Property Let Eigenschaft1(ByVal Wert As String)
       pEigenschaft1 = Wert
    End Property
    
    Public Property Get Eigenschaft2() As Integer
       Eigenschaft2 = pEigenschaft2
    End Property
    
    Public Property Let Eigenschaft2(ByVal Wert As Integer)
       pEigenschaft2 = Wert
    End Property
    
    Public Sub Begruessung()
       MsgBox "Hallo, " & pEigenschaft1 & "! Du bist " & pEigenschaft2 & " Jahre alt."
    End Sub
  5. Instanziere das Klassenmodul in einem Standardmodul:

    ' Modul: Modul1
    Sub TestMeinKlasse()
       Dim meineInstanz As MeinKlasse
       Set meineInstanz = New MeinKlasse
    
       meineInstanz.Eigenschaft1 = "Max"
       meineInstanz.Eigenschaft2 = 25
       meineInstanz.Begruessung
    End Sub
  6. Führe das Makro TestMeinKlasse aus, um das Beispiel zu testen.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert"

    • Lösung: Stelle sicher, dass Du das Klassenmodul korrekt benannt hast und dass Du den richtigen Namen in Deinem Standardmodul verwendest.
  • Fehler: "Objektvariable oder With-Blockvariable nicht festgelegt"

    • Lösung: Überprüfe, ob die Instanz des Klassenmoduls korrekt erstellt wurde mit Set meineInstanz = New MeinKlasse.

Alternative Methoden

Eine alternative Methode zur Verwendung von Klassenmodulen besteht darin, direkt in einem Standardmodul zu arbeiten, jedoch geht damit ein gewisser Verlust an Struktur und Wiederverwendbarkeit verloren. Klassenmodule bieten den Vorteil der Datenkapselung und vereinfachen die Verwaltung von Objekten.


Praktische Beispiele

Hier ist ein weiteres einfaches Beispiel für ein vba klassenmodul, das eine Rechteck-Klasse erstellt:

' Klasse: Rechteck
Private pBreite As Double
Private pHoehe As Double

Public Property Let Breite(ByVal Wert As Double)
    pBreite = Wert
End Property

Public Property Let Hoehe(ByVal Wert As Double)
    pHoehe = Wert
End Property

Public Function Flaeche() As Double
    Flaeche = pBreite * pHoehe
End Function

Um das Rechteck zu verwenden, kannst Du einen Sub in einem Standardmodul erstellen, der die Klasse instanziiert und die Fläche berechnet.


Tipps für Profis

  • Nutze Kommentare in Deinem Code, um die Funktionsweise von Klassenmodulen zu erklären, insbesondere wenn Du oder andere Entwickler die Module später überarbeiten.
  • Erstelle ein Fehlerbehandlungssystem in Deinen Klassenmodulen, um potenzielle Laufzeitfehler abzufangen und informativ zu melden.
  • Experimentiere mit Vererbung und Interfaces in VBA, um komplexere Strukturen zu erstellen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen einer Klasse und einem Objekt?
Eine Klasse ist eine Vorlage (Schablone) für ein Objekt. Ein Objekt ist eine Instanz dieser Klasse.

2. Wie instanziere ich ein Klassenmodul in VBA?
Du kannst ein Klassenmodul instanziieren, indem Du es mit dem Befehl Set meineInstanz = New MeinKlasse in einem Standardmodul erstellst.

3. Kann ich Klassenmodule auch in Excel 2010 verwenden?
Ja, Klassenmodule sind in allen modernen Excel-Versionen verfügbar, einschließlich Excel 2010.

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