Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Klassen, Eigenschaften zuweisen

Klassen, Eigenschaften zuweisen
24.08.2022 10:36:35
MCO
Guten Morgen!
Klassen hab ich bisher meiden können, erscheinen mir aber in diesem Fall sinnvoll:
Ich habe eine Liste von Mitarbeitern. Auf diese Liste greife ich mit einer Funktion zu und lese zu dem jeweiligen Mitarbeiter folgende Parameter:
Aufruf: MA_Daten2_priv("jul kai")

  • (0) Nachname: Kaiser
    (1) Vorname: Julius
    (2) Geschlecht: M
    (3) GID: p050239sd
    (4) Abteilung: jank trlala
    (5) Tel: 2525
    (6) mail: caesar.julius@fake.com
    (7) KST: mp3232
    (8) GID_Manager: p05054651dd
    (9) Vorg_Name: Rieder
    (10) Vorg_V_Name: bernd

  • Die Parameter kann ich auch einzeln aufrufen MA_Daten2_priv("jul kai",0) liefert "Kaiser"
    Allerdings hab ich keine Lust, jedesmal die Function wieder durchzuorgeln, wenn ich einen Parameter eines Kollegen aufrufen möchte.
    Mir erscheint es daher sinnvoll eine Klasse "Kollege" anzulegen und per Initialize direkt die Eigenschaften zuzuweisen.
    Aber WIE?!
    
    Option Explicit
    Public Vname As String
    Public NName As String
    Private Sub Class_Initialize()
    NName = "Kalubschke"
    Vname = "ernst"
    'hier muss eigentlich eine Variable die Funktion aufrufen und die Eigenschaften füllen. ODER?!
    End Sub
    
    Das liefert natürlich nicht das Ergebnis meiner Funktion!
    Sub Kontaktanzeige()
    Dim Mitarbeiter As New Kollege
    Debug.Print Mitarbeiter.Vname("jul kai")
    End Sub
    Bitte erklärt es mir verständlich... oder sagt mir, das das eine völlig ungeeignete Methode ist und alles viel einfacher geht...
    Freue mich auf Feedback!
    Gruß, MCO

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Klassen, Eigenschaften zuweisen
    24.08.2022 10:59:12
    Nepumuk
    Hallo,
    Eigenschaften in Klassen werden durch Property-Prozeduren erzeugt. Beispiel:
    
    Option Explicit
    Private mVname As String
    Private mNName As String
    Private Sub Class_Initialize()
    NName = "Kalubschke"
    Vname = "Ernst"
    End Sub
    Friend Property Get NName() As String
    NName = mNName
    End Property
    Friend Property Let NName(ByVal pvstrNName As String)
    mNName = pvstrNName
    End Property
    Friend Property Get Vname() As String
    Vname = mVname
    End Property
    Friend Property Let Vname(ByVal pvstrVname As String)
    mVname = pvstrVname
    End Property
    
    Damit kannst du dann so darauf zugreifen (In einem Standardmodul):
    
    Option Explicit
    Public Sub Test()
    Dim objMitglied As Klasse1
    Set objMitglied = New Klasse1
    Debug.Print objMitglied.NName, objMitglied.Vname
    objMitglied.Vname = "Klaus"
    Debug.Print objMitglied.NName, objMitglied.Vname
    Set objMitglied = Nothing
    End Sub
    
    Einfach mal mit F8 durchsteppen, damit du siehst was wie wann passiert.
    Gruß
    Nepumuk
    Anzeige
    AW: Klassen, Eigenschaften zuweisen
    24.08.2022 12:16:42
    MCO
    Hallo Nepomuk!
    Danke erstmal für einen funktionierenden Code.
    Ein paar Fragen hätt ich da aber noch...
    Du hast ja jetzt nur 2 Eigenschaften gefüllt, dafür braucht man LET [Parameter], zum auslesen GET.
    Warum muss ich denn dann erst noch Zwischenvariable füllen? "mVnam", "mNnam"?
    Dann muss ich also für jede der 10 Eigenschaften eine LET, eine GET und eine m-Variable anlegen?
    Und dann auch zum Füllen von jede der Eigenschaften auch meine Funktion aufrufen? Das wollte ich doch vermeiden!
    Erleuchte mich :-)
    Gruß, MCO
    AW: Klassen, Eigenschaften zuweisen
    24.08.2022 12:28:43
    Nepumuk
    Hallo,
    
    Warum muss ich denn dann erst noch Zwischenvariable füllen? "mVnam", "mNnam"?
    
    Na irgendwo muss der Wert ja gespeichert werden.
    
    Dann muss ich also für jede der 10 Eigenschaften eine LET, eine GET und eine m-Variable anlegen?
    
    Ja.
    
    Und dann auch zum Füllen von jede der Eigenschaften auch meine Funktion aufrufen?
    
    Das versteh ich nicht. Wozu eine Funktion? Einfach so:
    
    With objMitglied
    .NName= "Kalubschke"
    .Vname = "Klaus"
    .GDatum = CDate("01.01.2000")
    .usw
    End With
    
    Gruß
    Nepumuk
    Anzeige
    AW: Klassen, Eigenschaften zuweisen
    25.08.2022 08:46:23
    MCO
    Hallo Nepomuk!
    Ich hab jetzt mal ein bisschen gebastelt:
    Die Daten lese ich in ein Variant bzw. Array "x_nam", die Eigenschaften weise ich dann jeweils mit dem Index zu.
    (Ein LET ist hier überflüssig, da die Personeneigenschaften feststehen)
    Nur als Ergänzung. Vielen Dank für Deinen Input!
    Einen Tip könnte ich noch brauchen:
    Meine Variable "Vorname, Nachname" ist jetzt noch in der Klasse festgeschrieben. Wie rufe ich die denn in der Sub Kontaktanzeige auf?
    
    Option Explicit
    Private x_nam As Variant
    Private Sub Class_Initialize()
    x_nam = MA_Daten3_priv("vorname, nachname")
    End Sub
    Friend Property Get NName() As String
    NName = x_nam(0)
    End Property
    Friend Property Get VName() As String
    VName = x_nam(1)
    End Property
    Friend Property Get Geschlecht() As String
    Geschlecht = x_nam(2)
    End Property
    
    Aufruf:
    
    Sub Kontaktanzeige()
    Dim objMitglied As Kollege
    Set objMitglied = New Kollege
    With objMitglied
    Debug.Print .NName, .VName
    Debug.Print .Geschlecht
    End With
    Set objMitglied = Nothing
    End Sub
    
    Gruß, MCO
    Anzeige
    AW: Klassen, Eigenschaften zuweisen
    24.08.2022 13:24:03
    Rudi
    Hallo,
    wäre nicht auch ein eigener Datentyp möglich?
    
    Option Explicit
    Type Mitglied
    VName As String
    NName As String
    gebDat  As Date
    Email As String
    'etc
    End Type
    Dim dasMitglied() As Mitglied
    Dim objKEY As Object
    Sub aa()
    If objKEY Is Nothing Then Call Mitgliederlesen
    Const strmatch = "VN6 NN6"
    MsgBox dasMitglied(objKEY(strmatch)).gebDat
    End Sub
    Sub Mitgliederlesen()
    Dim i As Long
    Set objKEY = CreateObject("scripting.dictionary")
    With Sheets("Mitglieder")
    ReDim dasMitglied(.Cells(.Rows.Count, 1).End(xlUp).Row - 2)
    For i = 2 To 11
    dasMitglied(i - 2).VName = .Cells(i, 1)
    dasMitglied(i - 2).NName = .Cells(i, 2)
    dasMitglied(i - 2).gebDat = .Cells(i, 3)
    dasMitglied(i - 2).Email = .Cells(i, 4)
    objKEY(Left(.Cells(i, 1), 3) & " " & Left(.Cells(i, 2), 3)) = i - 2 'Schlüssel
    Next i
    End With
    End Sub
    
    Gruß
    Rudi
    Anzeige
    AW: Klassen, Eigenschaften zuweisen
    25.08.2022 09:13:20
    MCO
    Hallo Rudi!
    Diese Möglichkeit finde ich noch genauso interessant wie die eigene Klasse, scheinbar aber einfacher mit Daten zu füllen und zu deklarieren.
    Ich werde mich damit mal weiter beschäftigen, das Selektieren der Daten hab ich immer schon vorher gemacht, scheint mir aber in deiner Version eleganter zu sein. Gerade auch das generieren eines Suchschlüssel gibt die Möglichkeit weitere Parameter zu nutzen (z.B. Personalnummer)
    Vielen Dank Dir!
    Gruß, MCO

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige