Anzeige
Archiv - Navigation
1848to1852
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

Array von Klassenobjekten

Array von Klassenobjekten
01.10.2021 16:56:12
Klassenobjekten
Habe ein Klassenmodul MyModul implementiert.
Möchte davon mehrere Objekte in einem Array ablegen, z.B.
Dim M (5) As New MyModul
Dieses Array möchte ich mit byRef an eine Funktion übergeben und dort mit Werten belegen.
Das funktioniert nur, wenn ich vorher schonmal Werte dem Objekt übergeben habe.
Warum?
Im späteren Verlauf möchte ich das Array redimensionieren, z.B. mit
ReDim preserve M(3)
Das wird nicht zugelassen mit Fehlermeldung "Datenfeld bereits dimensioniert".
Warum?
Vielen Dank im Voraus!

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

Betreff
Datum
Anwender
Anzeige
AW: Array von Klassenobjekten
01.10.2021 17:01:00
Klassenobjekten
Hi
Wieso kann ich auch nicht sagen, aber so scheinen Array ganz allgemein zu ticken:

Sub Geht()
ReDim M(5)
ReDim Preserve M(3)
MsgBox UBound(M)
End Sub

Sub GehtNicht()
Dim M(5)
ReDim Preserve M(3)
MsgBox UBound(M)
End Sub
cu
Chris
AW: Array von Klassenobjekten
01.10.2021 18:31:44
Klassenobjekten
ICH mache es immer so:
Dim M()
Redim M(0)
Redim Preserve M(5)

AW: Array von Klassenobjekten
01.10.2021 18:52:56
Klassenobjekten
Hallo,

Das funktioniert nur, wenn ich vorher schonmal Werte dem Objekt übergeben habe.
Das funktionert auch ohne Werteübergabe, Du mußt vorher die Objekte des Arrays setzen:
Option Explicit

Public Sub test()
Dim aobjMyClass(4) As clsMyClass
Dim ialngIndex As Long
For ialngIndex = 0 To Ubound(aobjMyClass)
    Set aobjMyClass(ialngIndex) = New clsMyClass
Next
MsgBox My_Func(aobjMyClass)
End Sub

Public Function My_Func(ByRef praobjClass() As clsMyClass) As String
Dim ialngIndex As Long
Dim strText As String
praobjClass(0).TextString = "Hallo "
praobjClass(1).TextString = "Welt"
praobjClass(2).TextString = "!"
For ialngIndex = 0 To Ubound(praobjClass())
   strText = strText & praobjClass(ialngIndex).TextString
Next
My_Func = strText
End Function
Klassenmodul clsMyClass
Option Explicit 
 
Private mstrText As String 
 
Public Property Get TextString() As String 
Let TextString = mstrText 
End Property 
 
Public Property Let TextString(ByVal pvstrText As String) 
Let mstrText = pvstrText 
End Property 


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12
Zum zweitenPkt, wenn Du Arrays dyn. redimmen willst, darfst Du die Dim. vorher nicht setzen:

Dim MyArray() As String
Gruß, Mullit
Anzeige
AW: Array von Klassenobjekten
01.10.2021 19:12:06
Klassenobjekten
Hi
wenn du bei einem Array schon bei der Erst-Dimensionierung mit DIM die Größe festlegst, ist diese nachträglich nicht mehr änderbar.
Wenn man die Größe später ändern will, muss man vorher entweder:
a) zuerst als allgemeines Variant dimdenioneren Dim X as Variant
b) als Array aber ohne Größenangabe dimensionieren, hierbei kann dann den Typ vorgebem: Dim X() as Long
in beiden Fällen muss man nachträglich nochmal mit Redim die Größe festlegen
das ist aber nicht notwendig, man kann auch
c) gleich die Erstdimensionierung mit Redim machen: ReDim X(5) as long und das DIM weglassen. Dann hat man auch gleich die erste Größe und kann später immer noch ändern.
wenn die notwendige Größe erst im späteren Programmlauf ermittelt wird, würde ich Variange a) oder b) bevorzugen, damit man die vollständige Variablendeklaration am Anfang des Codes hat.
Wenn man schon direkt eine Größe angeben kann, dann c) und dies auch am Anfang des Codes.
Gruß Daniel
Anzeige
AW: Array von Klassenobjekten
01.10.2021 19:16:47
Klassenobjekten
Vielen Dank für die schnelle und gute Hilfe, passt!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige