Array als Property definieren

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von bmn.

    Array als Property definieren

    Hallo,

    ich bin gerade am erstellen einer eigenen Klasse und habe bisher wenig Erfahrung mit VBA. Daher habe ich zwei Fragen:

    1. Wie erstelle ich eine Property für ein Array? Ich habe mich bisher an diese Anleitung gehalten: http://www.online-excel.de/excel/singsel_vba.php?f=50 . Es gibt bereits ein Thema für VB.NET ( [VB.NET] Property für Array ) aber so wirklich hilft es mir nicht weiter. Folgend ist mein Code aufgelistet. Bei der Property hab ich, wie gesagt, keine Ahnung.

    Visual Basic-Quellcode

    1. '**** Code für clsMWert ****
    2. Option Explicit
    3. Dim mFehler(4) As Single
    4. 'Setzen der Standardwerte
    5. Private Sub Class_Initialize()
    6. For i = 1 To 4
    7. mFehler(i) = 9.999
    8. Next i
    9. End Sub
    10. Public Property Let Fehler(ByVal DerFehler As ???)
    11. mFehler = DerFehler
    12. End Property
    13. Public Property Get Fehler() As ???
    14. Fehler = mFehler
    15. End Property


    2. Kann ich ein Feld aus meiner selbst erstellten Klasse generieren? Ich hab gehört, dass dies mit VB 6.5 nicht möglich sei.



    Es wäre schön, wenn mir jemand helfen könnte. Vielen Dank schon einmal dafür

    Gruß
    Du kannst bei der Eigenschaft den Index übergeben.

    Visual Basic-Quellcode

    1. Public Property Let Fehler(index as integer, derFehler as single)
    2. if index > 0 and index <= 4 then
    3. mFehler(index) = derFehler
    4. end if
    5. End Property
    6. Public Property Get Fehler(index as integer) As Single
    7. if index > 0 and index <= 4 then
    8. Fehler = mFehler(index)
    9. else
    10. Fehler = -1 'some error code
    11. end if
    12. End Property
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Beim Deklarieren (Dim ...) wird der Indexbereich festgelegt (In Agents Beispiel wäre das 0 bis 5).

    Beim Zuweisen (Set ...) wird einem bestimmten Element des Arrays (Im Beispiel das mit dem Index 1) eine neue Instanz zugewiesen.
    Sehe ich das also richtig, dass ich jedes Element des Arrays instanzieren muss? (letztendlich gehts aber über eine Zählschleife auch recht schnell, nur muss ich dann öfter etwas ändern, wenn sich die Feldgröße ändert). Wo wir schon einmal dabei sind, gibt es hier im Forum (oder woanders) eine schöne und verständliche Erklärung zu dynamischen Arrays?



    Bisher aber erst einmal vielen Dank für die schnellen und hilfreichen Antworten.
    Ja das siehst Du richtig. Du könntest in Deine Klasse aber z.B. auch eine Add-Methode einbauen die das Hinzufügen eines neuen Elements und die Dimensionierung des Arrays übernimmt. Zum Verwalten von Arrays aus Objecten (was Du ja wohl vor hast) würde ich Dir ein Collection-Object empfehlen. Das bringt für diese Aufgaben schon einiges an Zubehör mit.
    Im Grunde genommen ist es meine Aufgabe, Messwerte aus einer Tabelle auszulesen und in Diagramme zu packen. Da ich das ganze aber auch gern ordnen und nach bestimmten Stichpunkten Kategorisieren möchte, ist eine eigene Klasse wohl am komfortabelsten (wenn ich vorher gewusst hätte, dass VB da so relativ zickig ist, hätte ich mir das lieber in Delphi angeschaut... aber was solls :D )



    Letztendlich habe ich also eine Tabelle mit den Messwerten Volumenstrom(1 bis 4) , Abgelesenes Volumen(1 bis 4) , Wahres Volumen (1 bis 4) , Abweichung (1 bis 4), Temperatur , Datum , etc...

    Also speicher ich das ganze in ein Array mit der Klasse meiner Wahl (oKlasse(x).Temperatur = Cells(a,b).value usw) und kann danach wunderbar rumfuhrwerken. Eine Collection ist hier vielleicht nicht nötig (allerdings hab ich auch noch nie zuvor damit gearbeitet, ich bin recht neu hier)

    Bin ich denn mit meinem Ansatz gerade auf dem richtigen Weg oder ist es zu umständlich ausgeführt?



    Gruß