Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
608to612
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
608to612
608to612
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Elemente einer Klasse über Variablen aufrufen

Elemente einer Klasse über Variablen aufrufen
15.05.2005 12:55:23
Joe
Moin Excel-Profis,
ich habe ein VBA-Problem, und zwar möchte ich Elemente einer Klasse über eine Variable aufrufen. Unten ein kleines Listing. Das Listing stellt nur ein kleinen Ausschnitt dar ist so nicht „sinnvoll“.
Wie kann ich die Strings aus dem Array Tiere() als Bezeichner für die Klasse1 einsetzen? Gibt es einen Befehl, der einen String in einen Befehl/Bezeichner umwandelt? Ich suche etwas Analoges zu FORMULA. Wahrscheinlich ist es ganz einfach, nur habe ich Tomaten auf den Augen…
Vielen Dank im Voraus für Eure Hilfe!
Joe
Klasse 1
Option Explicit
Public Hund as Integer
Public Katze as Integer
Public Maus as Integer
Public…
Sub Ausgabe()
DIM Tiere(20), i
DIM cTier as Klasse1
’ Einlesen
Set cTier As New Klasse1
cTier.Hund = „Dackel“
cTier.Katze = „Tieger“
cTier.Maus = …
Tiere(1)= „Hund“
Tiere(2)= „Katze“
Tiere(3)= „Maus“
Tiere(4) = ...
’Ausgabe, die funktioniert
Cells(1,1) = cTier.Hund
Cells(1,2) = cTier.Katze
Cells(1,3) = cTier.Maus
…
’ Ausgabe, die nicht funktioniert
For i = 1 To 20
cells(1,i) = cTier.&Tiere(i)
Next i

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

Betreff
Datum
Anwender
Anzeige
AW: Elemente einer Klasse über Variablen aufrufen
15.05.2005 14:07:20
Nepumuk
Hi,
das geht doch viel einfacher über eine Collection.
Code in einem Standartmodul:


Option Explicit
Private objTiere As clsTiere
Public Sub test()
    Dim varItem As Variant
    Dim intIndex As Integer
    Set objTiere = New clsTiere
    With objTiere.Tiere
        .Add "Dackel", "Hund"
        .Add "Siamkatze", "Katze"
        .Add "Maus", "Nagetier"
        .Add "Amsel", "Vogel"
    End With
    MsgBox objTiere.Tiere("Hund")
    MsgBox objTiere.Tiere("Vogel")
    For Each varItem In objTiere.Tiere
        MsgBox varItem
    Next
    For intIndex = 1 To objTiere.Tiere.Count
        MsgBox objTiere.Tiere(intIndex)
    Next
    Set objTiere = Nothing
End Sub


Code in ein Klassenmodul mit dem Namen "clsTiere":


Option Explicit
Private mcolTiere As Collection
Public Property Get Tiere() As Collection
    Set Tiere = mcolTiere
End Property
Private Sub Class_Initialize()
    Set mcolTiere = New Collection
End Sub
Private Sub Class_Terminate()
    Set mcolTiere = Nothing
End Sub


Wie du siehst, lässt sich die Collection 1. über den Key auslesen, 2. mit einer For - Each Schleife und 3. unter Zuhilfenahme der Count - Eigenschaft auch in einer For - Next Schleife. Wobei die For - Each Schleife zu bevorzugen ist, das darin die Collection auf einmal übergeben wird, während die For - Next Schleife jedes Item einzeln aus der Collection holt.
Gruß
Nepumuk
Anzeige
Ergänzung
15.05.2005 14:17:35
Nepumuk
Mit folgender Konstruktion geht es auch per For - Next vernünftig:


    With objTiere.Tiere
        For intIndex = 1 To .Count
            MsgBox .Item(intIndex)
        Next
    End With


Gruß
Nepumuk
Anzeige
AW: Ergänzung
15.05.2005 14:40:29
Joe
Hallo Nepumuk,
vielen Dank, so geht es natürlich auch, sieht auch viel eleganter aus ;-)
Aber trotzdem: Kennst Du einen Befehl, mit dem ich ein String als Befehl ausgeben kann?
Danke und Gruß,
Joe
AW: Ergänzung
15.05.2005 14:59:43
Nepumuk
Hi,
da dein Array Tiere nicht Teil der Klasse ist, würde ich sagen so:
For i = 1 To 20
cells(1,i) = Tiere(i)
Next i
Gruß
Nepumuk

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige