Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
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 Aufruf in verschachtelte Klassen

Array Aufruf in verschachtelte Klassen
19.03.2020 11:44:13
Jimmy
Hallo
ich stehe vor dem Problem, dass ich Arrays nicht von aussen auslesen kann. Am besten ich poste _ mal den Code. Das Beispiel ist nur ein Ausschnitt mit nur einer Verschachtelung. Auslesen von nicht-Arrays funktioniert einwandfrei.

Sub Test()
Dim outerObj As Aussen
Set outerObj = New Aussen
outerObj.init
End Sub


Option Explicit
Dim i As Integer
Dim j As Integer
Dim innerObj() As Innen
Sub init()
ReDim innerObj(2)
For i = 1 To 2
Set innerObj(i) = New Innen
innerObj(i).init Me
Next
For i = 1 To 2
MsgBox innerObj(i).nArr         'Output funkt, nicht Array funkt einwandfrei
For j = 1 To 3
MsgBox innerObj(i).Arr(j)   'Output schlägt fehl, diese Zeile möchte ich haben...
Next
Next
End Sub


Option Explicit
Private intnArr  As Integer
Private intArr()   As Integer
Dim i              As Integer
Dim outerObj       As Aussen
Sub init(outer As Aussen)
Set outerObj = outer
nArr = 10
ReDim Arr(5)
For i = 1 To 3
Arr(i) = i * 2
Next
MsgBox nArr             'Output
For i = 1 To 3
MsgBox Arr(i)       'Output in der Klasse selbst funktioniert
Next
End Sub
Property Get nArr() As Integer
nArr = intnArr
End Property
Property Let nArr(ByVal mynArr As Integer)
intnArr = mynArr
End Property
Property Get Arr(ByVal i As Integer) As Integer
Arr = intArr(i)
End Property
Property Let Arr(ByVal i As Integer, ByVal myArr As Integer)
intArr(i) = myArr
End Property

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

Betreff
Datum
Anwender
Anzeige
AW: Array Aufruf in verschachtelte Klassen
19.03.2020 12:24:36
Jimmy
Danke, aber der Artikel behandelt nicht Arrays in Klassen / über Property-Methode.
Ich habe im Erstpost gar nicht den Fehlercode gepostet:
LaufzeitFehler 9
"Index außerhalb des gültigen Bereichs."
Scheint ein Verständnisproblem des scopes zu sein...
Aber mit einem nicht-Array funktioniert es, den ich auf dieselbe Art und Weise aufgesetzt habe :(
AW: Array Aufruf in verschachtelte Klassen
19.03.2020 14:44:18
Nepumuk
Hallo Jimmy,
es ist nicht so ganz klar worauf das hinauslaufen soll. Was soll das sein? Was hast du vor?
Normalerweise läuft Get / Let mit Arrays so ab:
Option Explicit

Private intArray(1 To 5) As Integer

Public Property Get prpArray(ByVal intIndex As Integer) As Integer
    prpArray = intArray(intIndex)
End Property

Public Property Let prpArray(ByVal intIndex As Integer, ByVal intValue As Integer)
    intArray(intIndex) = intValue
End Property

Gruß
Nepumuk
Anzeige
AW: Array Aufruf in verschachtelte Klassen
19.03.2020 15:04:13
Jimmy
Hallo Nepumuk,
an und für sich hab ich Arrays in Klassen genau so wie du eben angeführt, aufgesetzt. Sieht man in meinem MinimalBeispiel ganz unten.
Ich habe mehrere Klassen verschachtelt und will jetzt von einer der äußeren Klassen auf die Array-Werte der inneren zugreifen / auslesen. (Zwecks Einfachheit hat mein Beispiel nur 2 Klassen)
Ich hätte die Codes vielleicht etwas besser beschriften sollen. Hier ein Nachtrag:
Im oberen Code wird eine Prozedur abgelaufen, wo die Objekte dann in Klassen festgelegt werden und Werte annehmen.
Im mittleren Code ist die äußerste Klasse in der eine innere Klasse initiiert wird.
Der untere Abschnitt ist somit die innereste Klasse, die eben wie angeführt, bestimme Werte in Arrays zuordnet.
Diese zugeordneten Werte will ich dann in den äußeren Klassen bzw. auch wenn möglich in anderen Prozeduren aufrufen können.
Hoffe ich hab das einigermaßen formulieren können, worauf ich hinaus wollte.
Danke
Beste Grüße
Jimmy
Anzeige
AW: Array Aufruf in verschachtelte Klassen
19.03.2020 16:00:34
Nepumuk
Hallo Jimmy,
so wie jetzt, kannst du das nicht machen, da weist du dem Array nur einen Wert zu. Halte dich an die "Norm" sonst wird das nichts.
Gruß
Nepumuk
AW: Array Aufruf in verschachtelte Klassen
19.03.2020 17:02:10
Jimmy
Hallo Nepumuk,
ja ich weise dem Array Werte zu und will sie von aussen aufrufen können. Mit Variablen geht es auch. Im MinimalBeispiel hab ich ja beides angeführt, "normale" Variablen und eben ein Array.
Die MsgBox'en sollen den Aufruf verdeutlichen.
Was meinst du mit "Norm" ?
Beste Grüße
Jimmy
AW: Array Aufruf in verschachtelte Klassen
20.03.2020 10:33:41
Nepumuk
Hallo Jimmy,
ich kann weder deinen Ausführungen noch der "Logik" deines Programms folgen.
Ich lass die Frage offen.
Gruß
Nepumuk
Anzeige
vielleicht helfen könnte...
20.03.2020 11:56:40
Oberschlumpf
...eine Bsp-Datei per Upload.
Hi Jimmy,
in der Datei sollten Bsp-Daten enthalten sein, die du auslesen willst - in der Ursprungsform sozusagen.
Dann sollten in Nachbarspalten oder einem zusätzlichen Tabellenblatt die Daten - per Hand - so von dir eingetragen/angezeigt werden, wie du sie per VBA auslesen willst.
Und zu guter letzt sollte noch eine einfache, verständliche Erklärung in der Bsp-Datei enthalten sein, anhand derer auch ein "Ahungsloser" relativ schnell versteht, was du erreichen möchtest.
Ich bin aber gleich wieder raus.
Ich schrieb diesen Beitrag nur, weil ich a) die Bsp-Datei vermisse und b) selten verstehe, wieso ein Fragender, wenn überhaupt, fast immer nur Code (noch schlimmer nur Bilder!) aber selten eben eine Bsp-Datei zeigt.
Von mehrklassigen Arrays verstehe ich zu wenig.
Ciao
Thorsten
Anzeige
AW: vielleicht helfen könnte...
20.03.2020 15:23:37
Jimmy
Hallo,
https://www.herber.de/bbs/user/135973.xlsm
sollte die hochgeladene Beispieldatei sein. Hoffe ich habe es richtig gemacht.
Bin es gewohnt MinimalBeispiele als Codes zu posten, als BeispielDateien. Sorry!
Mein BeispielCode arbeit völlig im Hintergrund ohne die Excel TabellenInputs. Der Code startet beim Modul Beispiel im Sub Test. Die Klassen werden initiiert und fiktive Werte zugewiesen. Mit dem Beispiel möchte ich nicht nur Werte zuweisen, sondern auch auf diese zugreifen / aufrufen. Die Aufrufe werden im Beispiel einfachheitshalber mithilfe MsgBox bewerkstelligt.
Ich nutze hierbei eine Array ("Arr") und eine normale Variable ("nArr"), um zu zeigen, dass es mit normalen Variablen einwandfrei funktioniert. Ich versuche die Werte einmal in der Klasse wo sie zugewiesen wurden aufzurufen und einmal extern in der äußeren Klasse. Bei Letzteren scheiterts leider beim Aufruf der Array-Werte...
Ich hab mir mittlerweile eine Zwischenlösung überlegt, indem ich nicht die Property Methode verwende sondern über "get" Funktionen auf die Werte zugreife.
Public Function getArr(intIndex As Integer) As Integer
getArr = Arr(intIndex)
End Function
Ist natürlich nicht elegant oder nicht üblich ... Aber es tut im Moment was es soll. Eine Lösung wäre natürlich von Vorteil
Die BeispielDatei ist nur ein Ausschnitt aus einem riesigen Code und zeigt nur das Problem, wovor ich im Moment stehe.
Danke nochmals,
Beste Grüße
Jimmy
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige