Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Gibt es unterschiedlichen Klassen
zurück: Was ist eigentlich eine Klasse weiter: Arrays in Klassen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Isabelle :-)
Menschin


Verfasst am:
24. Aug 2012, 21:06
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis


Gibt es unterschiedlichen Klassen - Gibt es unterschiedlichen Klassen

Nach oben
       Version: Office 2k (2000)

Hallöchen,

ganz klares JA.

So gut wie alle Anleitungen im Internet für Klassen in VBA beschränken sich auf Event-Klassen mit der sich ein oder mehrere Events von gleichen ActiveX-Controls abfangen lassen. Oder um Events von Klassen abzufangen welche kein eigenes Klassenmodul mitbringen. So wie z.B. Charts in Tabellen, Commandbar-Controls, die Application-Klasse usw. Das ist aber nur eine Möglichkeit und dazu gibt es genügend Anleitungen in Netz.

Neben diesen Event-Klassen gibt es auch:

Parameter-Klassen:

Das sind Klassen die nur Variablen und die entsprechenden Property-Prozeduren enthalten. Diese Art von Klassen wird hauptsächlich dazu benutzt damit verschiedene Klassen, Prozeduren oder Projekte auf gemeinsame Variablen zugreifen können. Es muss also nicht ein Wust an Variablen übergeben werden sondern nur die Klasse. Durch so eine Klasse lässt sich auch eine unübersichtliche Anzahl von öffentlichen Variablen ersetzen. Diese Art Klasse solltest du schon selbst anlegen können.

Auflistungs-Klassen:

Das sind Klassen die sich selbst als Klasse enthalten.

Ich sehe das große Fragezeichen über deinem Kopf. Ok ich versuch es mal zu erklären. Das ist eine Klasse die eine Collection enthält. Einer Add-Methode der Klasse werden verschiedene Parameter übergeben. In der Add-Methode wird eine neue Instanz der Klasse erstellt. Die Parameter werden an Eigenschaften der neuen Instanz übergeben. Dann wird diese Instanz an die Collection übergeben und wieder zerstört.

Das Ganze hat folgenden Hintergrund. Eine Collection kann keine benutzerdefinierten Datentypen (Type-Anweisung) aufnehmen, aber Objekte. Also erzeugen wir ein Objekt das durch seine Eigenschaften einem benutzerdefiniertem Datentyp entspricht und packen dieses Objekt in die Collection. Mit einer Attribute-Anweisung können wir in der Klasse sowohl eine Default-Eigenschaft als auch eine For – Each-Methode erzeugen um damit, wie bei bekannten Auflistungs-Objekten (Worksheets, Shapes, Controls usw.) zugreifen zu können. Ich zeige am Ende des Artikels ein Beispiel.

Basis-Klassen / Polymorphe-Klassen:

Basis-Klassen sind Klassen aus denen sich Klassen ableiten.

Ich sehe das Fragezeichen über deinem Kopf blinken. Ok, versuch ich es mal zu erklären. In einer Basisklasse werden Eigenschaften und Methoden deklariert. Aber nur deklariert. Sprich zwischen z.B. Public Property … und End Property befindet sich nichts. Nicht mal eine leere Zeile. Die Prozeduren werden erst in der, mit der Implements-Anweisung abgeleiteten Klasse, mit Inhalten gefüllt. Dazu hat Lukas Mosimann schon mal was geschrieben: http://www.office-loesung.de/ftopic253106_0_0_asc.php das muss ich nicht mehr ergänzen.


Und hier ein ganz einfaches Beispiel für eine Auflistungsklasse.

In einem Standardmodul:

Code:
Option Explicit

Public Sub Test()

    Dim objContactClass As clsContact
    Dim objContactItem As clsContact

    'Neue Instanz der Kontakt-Klasse erstellen
    Set objContactClass = New clsContact

    'Kontakte hinzufuegen
    Call objContactClass.Add("Maier", "Herbert")
    Call objContactClass.Add("Huber", "Renate")
    Call objContactClass.Add("Müller", "Bernhard")

    'Anzahl der Kontakte ausgeben
    MsgBox objContactClass.Count

    'Vorname eines Kontaktes ausgeben
    MsgBox objContactClass("Huber").PreName

    'Schleife ueber alle Kontakte
    For Each objContactItem In objContactClass
        MsgBox objContactItem.Name & " / " & objContactItem.PreName
    Next

    'Klassenobjekt freigeben
    Set objContactClass = Nothing

End Sub

In einem Klassenmodul mit dem Namen "clsContact":

Code:
 Option Explicit

Private mobjContact As Collection
Private mstrName As String
Private mstrPreName As String

Private Sub Class_Initialize()
    Set mobjContact = New Collection
End Sub

Private Sub Class_Terminate()
    Set mobjContact = Nothing
End Sub

Public Property Get Name() As String
    Name = mstrName
End Property

Public Property Let Name(ByVal pvstrName As String)
    mstrName = pvstrName
End Property

Public Property Get PreName() As String
    PreName = mstrPreName
End Property

Public Property Let PreName(ByVal pvstrPreName As String)
    mstrPreName = pvstrPreName
End Property

Public Sub Add(ByVal pvstrName As String, ByVal pvstrPreName As String)
    Dim objContact As clsContact
    Set objContact = New clsContact
    objContact.Name = pvstrName
    objContact.PreName = pvstrPreName
    mobjContact.Add objContact, pvstrName
    Set objContact = Nothing
End Sub

Public Function Item(ByVal pvvntIndex As Variant) As clsContact
'Attribute Item.VB_UserMemId = 0
    Set Item = mobjContact.Item(pvvntIndex)
End Function

Public Function Count() As Long
    Count = mobjContact.Count
End Function

Public Sub Delete(ByVal pvvntIndex As Variant)
    Call mobjContact.Remove(pvvntIndex)
End Sub

Public Function NewEnum() As IUnknown
'Attribute NewEnum.VB_UserMemId = -4
    Set NewEnum = mobjContact.[_NewEnum]
End Function

Um aus der Item-Methode die Default-Methode zu machen und per For – Each durch die Auflistung zu laufen müsst ihr die 'Attribute-Anweisungen einkommentieren. Dass die Zeile rot wird spielt keine Rolle. Dann das Klassenmodul per Rechtsklick im Projektexplorer – Entfernen von clsContact löschen. Die Frage ob das Modul vor dem Entfernen exportiert werden soll, mit Ja beantworten und das Modul speichern. Anschließend mit einem weiteren Rechtsklick in den Projektexplorer – Datei importieren das gerade exportierte Modul wieder importieren. Die vorher roten Zeilen sind nun verschwunden und die beiden Prozeduren haben damit die gewünschten Attribute übernommen.

Mit der Anweisung: Attribute Item.VB_UserMemId = 0 kannst du in jeder Klasse eine Standard-Methode oder Standard-Eigenschaft definieren.

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: Werte mit unterschiedlichen Zeilenabständen Subtrahieren 3 kukident 195 08. Sep 2011, 11:23
HermannZ Werte mit unterschiedlichen Zeilenabständen Subtrahieren
Keine neuen Beiträge Excel Formeln: Häufigkeit in Klassen/Gruppen mit verschiedener Anzahl 4 Baileysss 922 11. Mai 2011, 20:10
Baileysss Häufigkeit in Klassen/Gruppen mit verschiedener Anzahl
Keine neuen Beiträge Excel Formeln: Klassen dem Geburtsjahr zuteilen 7 ollimen 281 31. Dez 2010, 00:23
Gast Klassen dem Geburtsjahr zuteilen
Keine neuen Beiträge Excel Formeln: WennDann-Formel mit 3 unterschiedlichen Ausgabewerten 1 MARIO_MK 194 10. Dez 2010, 07:09
shift-del WennDann-Formel mit 3 unterschiedlichen Ausgabewerten
Keine neuen Beiträge Excel Formeln: WennDann-Formel mit 3 unterschiedlichen Ausgabewerten 2 MARIO_MK 182 09. Dez 2010, 14:22
Gast WennDann-Formel mit 3 unterschiedlichen Ausgabewerten
Keine neuen Beiträge Excel Formeln: Dynamische Verknüpfung zu unterschiedlichen Tabellenblättern 2 Riko 1106 13. Sep 2010, 15:59
Riko Dynamische Verknüpfung zu unterschiedlichen Tabellenblättern
Keine neuen Beiträge Excel Formeln: -2 Spalten vergleichen an unterschiedlichen Stellen- 5 Lucas_1990 300 10. Sep 2010, 20:21
Klaus-Dieter -2 Spalten vergleichen an unterschiedlichen Stellen-
Keine neuen Beiträge Excel Formeln: Addition von Werten mit unterschiedlichen Bedingungen 4 Smirni 200 28. Jul 2010, 22:11
Smirni Addition von Werten mit unterschiedlichen Bedingungen
Keine neuen Beiträge Excel Formeln: Zulageberechnung bei unterschiedlichen Arbeitszeiten und Pau 4 Phet 1916 25. März 2010, 22:37
Phet Zulageberechnung bei unterschiedlichen Arbeitszeiten und Pau
Keine neuen Beiträge Excel Formeln: XINTZINSFUSS mit unterschiedlichen Zahlenreihen 1 MaxMini 498 15. Feb 2010, 15:30
neopa XINTZINSFUSS mit unterschiedlichen Zahlenreihen
Keine neuen Beiträge Excel Formeln: Felder zusammenfassen mit Unterschiedlichen Zellenformaten 2 uurtyp 294 02. Dez 2009, 09:10
Gast Felder zusammenfassen mit Unterschiedlichen Zellenformaten
Keine neuen Beiträge Excel Formeln: Fahrtkosten bei unterschiedlichen Tarifmodellen 0 Exelnooob1 280 25. Jun 2009, 20:24
Exelnooob1 Fahrtkosten bei unterschiedlichen Tarifmodellen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft-Excel Diagramme