Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Array in einem Klassenmodul bearbeiten

Forumthread: Array in einem Klassenmodul bearbeiten

Array in einem Klassenmodul bearbeiten
29.07.2024 09:22:48
Florian
Hallo

wie kann man am Besten einen Eintrag in einem Array in einem Klassenmodul bearbeiten?
Direkt geht es bei mir leider nicht. Deshalb muss ich das array herausholen, ändern und wieder zurückstellen.

Hier mein Beispiel, ich hoffe es ist verständlich dargestellt:
Das ist das Klassenmodul
'Klassenmodul mit dem Namen "clsKlasse1"

Option Explicit
Public Matrix



Das ist das Makro
Sub ArrayInKlasse()

Dim Auto As New clsKlasse1
With Auto
.Matrix = Range("a1:c3").value

'geht nicht
.Matrix(1, 1) = 24 'Array direkt bearbeiten
Debug.Print .Matrix(1, 1) 'soll 24 liefern, tut es aber nicht

'geht
Dim teMP
teMP = .Matrix 'Array herauskopieren
teMP(1, 1) = 24 'Array bearbeiten
.Matrix = teMP 'Array wieder zurückstellen
Debug.Print .Matrix(1, 1) 'liefert 24
End With
End Sub


Geht das anders vielleicht auch?

LG, Flo
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 10:02:06
Ulf
Hi Florian,
geht doch


Option Explicit
Public Matrix As Variant




Option Explicit

Sub ArrayInKlasse()
Dim Auto As New clsKlasse1
With Auto
Set .Matrix = ThisWorkbook.Worksheets(1).Range("a1:c3")
'geht nicht
.Matrix(1, 1) = 24 'Array direkt bearbeiten
Debug.Print .Matrix(1, 1) 'soll 24 liefern, tut es aber nicht
'geht
Dim teMP
teMP = .Matrix 'Array herauskopieren
teMP(1, 1) = 24 'Array bearbeiten
.Matrix = teMP 'Array wieder zurückstellen
Debug.Print .Matrix(1, 1) 'liefert 24
End With
End Sub

hth
Ulf
Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 12:22:30
Onur
Wozu ein Klassenmodul, wenn du nur einen eigenen Datentyp brauchst?
DAS in ein Standardmodul:
Type MyType

Matrix As Variant
End Type


Und dann das ins Blattmodul:
Sub ArrayInKlasse()

Dim Auto As MyType
With Auto
.Matrix = Range("a1:c3").Value
.Matrix(1, 1) = 24 'Array direkt bearbeiten
Debug.Print .Matrix(1, 1) 'soll 24 liefern, tut es aber nicht

'geht
Dim teMP
teMP = .Matrix 'Array herauskopieren
teMP(1, 1) = 24 'Array bearbeiten
.Matrix = teMP 'Array wieder zurückstellen
Debug.Print .Matrix(1, 1) 'liefert 24
End With
End Sub


Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 16:26:07
Florian
Hi Ulf,

Ich nutze Klassen mit mehreren Arrays und ich habe kein Problem damit. Man kann auch ein Dictionary in einer Klasse direkt ändern, ohne es herausholen zu müssen. Nur mit Arrays geht das eben nicht so.
Was meinst du mit "Datenfelder und Klassen tztztz: "? Ist das etwa nicht gut? Ich sehe da keine Nachteile.

Ja, "Property Let" ist eine gute Lösung. Werde ich wohl anlegen müssen, falls ich das öfters bauche.

Hi Onur
"Wozu ein Klassenmodul, wenn du nur einen eigenen Datentyp brauchst? "
Nein, ich brauche keinen Datentyp. Das Klassenmodul und das Array sind Ausgangssituation, an der ich mein Problem zeige. Dennoch danke.

LG, Flo
Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 17:40:58
Onur
Und WARUM GENAU muss ein ein Klassenmodul sein und kein Datentyp?
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 18:07:53
Florian
Ich weiss jetzt nicht, was das mit dem Problem zu tun hat, aber vielleicht kommt noch was Nützliches raus. Also:

Das Klassenmodul stellt einen Artikel, einen Gegenstand dar, von denen ich viele habe.
Jeder Artikel hat charakteristische Größen: Abmessungen, Gewichte und andere Eigenschaften. Damit führe ich verschiedene Berechnungen durch, die manchmal Zahlen, aber auch Arrays sein können. Abhängig von diesen Ergebnissen werden weitere Berechnungen durchgeführt und manche Artikel beommen noch was dazu notiert.
Ein anderes Klassenmodul, das ich angelegt habe, verarbeitet Messergebnisse, um statistische Messgrößen zu erhalten.

Ist das genau genug? Oder willst du noch was Bestimmtes wissen?

LG, Flo
Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 18:31:17
Onur
Und genau für so etwas gibt es eigene Datentypen. Dafür braucht man KEINE Klassenmodule. Du hast bestimmt irgendwo gelesen, dass man mit Klassenmodulen sowas kann, aber eigene Datentypen sind sozusagen NUR ein "Nebenprodukt" von Klassenmodulen.
Keines der von dir genannten Gründe braucht explicit ein Klassenmodul statt Datentypen.
Aber das ist deine Sache.
Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 18:38:01
Onur
Ist halt so, als ob man einen SUV kauft, nur um ab und zu damit zum Zigaerettenautomaten zu fahren - kann man machen, muss man aber nicht.
AW: Array in einem Klassenmodul bearbeiten
30.07.2024 17:04:32
Florian
Habe mir das angesehen. Vielleicht hast du Recht, habe mich bisher noch nicht damit beschäftigt, da ich es nicht kannte. Ich habe die Lösung mit Klassen gewählt, weil ich darüber eine Menge gelesen habe. Als großen Vorteil bei Klassen sehe ich, dass ich im Klassenmodul die zugehörigen Subs, Functions und internen Variablen ablegen kann und damit Ordung schaffe.
Vielleicht geht das auch mit normalen Modulen und Type-Variablen, so wie du vorgeschlagen hast. Nur, die Umstellung bei mir wäre etwas aufwändig, und ich weß nicht, welche Vorteile ich damit gewinne.
In meinem nächsten Projekt kann ich es ja versuchen.
LG, Flo
Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 11:29:10
Florian
Hi Ulf,
In Deiner Antwort schreibst Du was in das OriginalRange. Das geht in meinem Fall aber nicht, weil das Range, von dem es stammt, unverändert bleiben soll. Daher habe ich ein Array daraus gezogen.

Vielleicht ein Missverständnis:
MIt dem Range habe ich hier in diesem Beispiel nur die Ausgangssituation hergestellt. Es ist nicht Teil des Problems.
Mein Problem ist: Ich will einen Wert in einem Array ändern, das in eimem Klassenmodul liegt.

LG, Flo
Anzeige
AW: Array in einem Klassenmodul bearbeiten
29.07.2024 12:49:24
Ulf
Hi Florian,
Datenfelder und Klassen tztztz:
Mit Properties geht es


Option Explicit
Public Matrix As Variant

Private Sub Class_Initialize()
ReDim Matrix(0, 0)
End Sub

Public Sub rDim(ByVal lngA As Long, ByVal lngB As Long)
ReDim Matrix(lngA, lngB)
End Sub

Public Property Get Value(ByVal lngA As Long, ByVal lngB As Long)
Value = Matrix(lngA, lngB)
End Property

Public Property Let Value(ByVal lngA As Long, ByVal lngB As Long, ByVal newValue As Variant)
Matrix(lngA, lngB) = newValue
End Property




Option Explicit

Sub ArrayInKlasse()
Dim Auto As New clsKlasse1
With Auto
'Set .Matrix = ThisWorkbook.Worksheets(1).Range("a1:c3")
'geht nicht
Call .rDim(1, 1)
.Value(1, 1) = 24 'Array direkt bearbeiten
Debug.Print .Value(1, 1) 'soll 24 liefern, tut es aber nicht
'geht
Dim teMP
teMP = .Matrix 'Array herauskopieren
teMP(1, 1) = 24 'Array bearbeiten
.Matrix = teMP 'Array wieder zurückstellen
Debug.Print .Matrix(1, 1) 'liefert 24
End With
End Sub

hth
Ulf
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige