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

Klassenprogrammierung

Klassenprogrammierung
27.09.2005 07:59:32
zink
Hallo,
ich schreibe gerade zur Übung eine Klasse mit Routinen zum Handling von (zunächst eindimensionalen) Datenfeldern (Arrays).
Der Einfachheit halber hier ein Auszug:
' Klasse: clsArray, Methode Delete
Public

Sub Delete(ByRef  FeldA as Variant, iPosition as Long)
' hier folgen die Anweisungen für das Löschen eines Feldinhaltes
' durch Zwischenspeichern und Umkopieren
End Sub

' Standardmodul: Aufruf

Sub Test
Dim Feld() as Variant,  i as Long
For i=1 to 10:   Feld(i) = i :    Next i
' Feldwert mit Index 5 löschen
Dim objArray as clsArray
Set objArray = New clsArray
objArray.Delete  Feld,5
End Sub

So weit so gut.
Was mir nicht gefällt ist, dass man das Array immer als Parameter übergeben muss. Viel schöner wäre es, wenn es gelänge, das Array, das ja ein Objekt im Speicher darstellt, auch als Objekt zu referenzieren.
Also Irgendwie so:
Set myArray = Adresse von Feld
Dann wäre die Schreibweise viel intuitiver:

myArray.Delete 5
- ohne Parameterübergabe (die Delete-Methode muss ich natürlich umschreiben...)
Meine Frage: Gelingt es irgendwie, ein vereinbartes und im Speicher stehendes Array als Objekt via >> Set myArray = irgendwas zu definieren,
so dass ein Objekt-Verweis auf das Array entsteht?
Ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt.
Danke und Grüße
Joachim

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Klassenprogrammierung
27.09.2005 08:47:30
Nepumuk
Hi,
ein Array ist kein Objekt sondern eine Variable. Du könntest es aber so machen:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private objArray As clsArray

Public Sub test()
    Dim intIndex As Integer
    Set objArray = New clsArray
    For intIndex = 1 To 10
        objArray.fillArray(intIndex) = intIndex
    Next
    For intIndex = 1 To 10
        MsgBox objArray.showArray(intIndex)
    Next
    objArray.deleteArray = 5
    For intIndex = 1 To 9
        MsgBox objArray.showArray(intIndex)
    Next
End Sub

' **********************************************************************
' Modul: clsArray Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private vntArray() As Variant

Friend Property Let fillArray(ByRef intIndex As Integer, ByRef vntValue As Variant)
    Redim Preserve vntArray(1 To intIndex)
    vntArray(intIndex) = vntValue
End Property

Friend Property Let deleteArray(ByRef intIndex As Integer)
    Redim vntTempArray(LBound(vntArray) To UBound(vntArray) - 1) As Variant
    Dim intTempIndex As Integer
    For intTempIndex = LBound(vntArray) To intIndex - 1
        vntTempArray(intTempIndex) = vntArray(intTempIndex)
    Next
    For intTempIndex = intIndex + 1 To UBound(vntArray)
        vntTempArray(intTempIndex - 1) = vntArray(intTempIndex)
    Next
    vntArray = vntTempArray
End Property

Friend Property Get showArray(ByRef intIndex As Integer) As Variant
    showArray = vntArray(intIndex)
End Property

Gruß
Nepumuk

Anzeige
AW: Klassenprogrammierung
27.09.2005 08:57:46
Rolf
Hallo Nepumuk,
warst mal wieder schneller und besser.
Ich hoffe, du bist "durch" und wieder fit?!
Herzliche Grüße
Rolf
AW: Klassenprogrammierung
27.09.2005 09:01:55
Nepumuk
Hi Rolf,
wenn ich ganz fit wäre, hätte ich am Ende der Testroutine nicht vergessen, die Klassen mit:
Set objArray = Nothing
zu entladen.
Gruß
Nepumuk

AW: Klassenprogrammierung
zink
Hi Nepumuk,
ganz herzlichen Dank für Deine sofortige Hilfe. Das ging ja super-fix.
Ich mach mich gleich daran, Deine Ideen umzusetzen.
Nochmals - Danke
und Grüße
Joachim
AW: Klassenprogrammierung
27.09.2005 08:52:52
Rolf
Hallo Joachim,
du kannst ein Array an ein Collection-Objekt übergeben.
fG
Rolf
Option Explicit
Option Base 1

Sub collection_aus_array()
Dim colnames As Collection
Dim i%
Dim e, A
A = Array("Paul", "Fritz", "Walter", "Karl")
Set colnames = New Collection
'einlesen
For i = 1 To UBound(A)
colnames.Add A(i)
Next
'ausgeben
For Each e In colnames
Debug.Print e
Next
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige