Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1236to1240
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 dynamisch anpassen

Array dynamisch anpassen
KLE
Hallo,
ich habe mal wieder eine Frage zu Arrays und suche nun schon seit Samstag erfolglos eine Lösung für folgendes Problem:
Ich habe ein Array mit: Dim arrAL() in Option Explicit deklariert und im Code verwende ich:
...
ReDim Preserve arrDL(AnzSpalten, 0 To LZeile - 1)
...
Habe auch schon erfolglos folgendes versucht:
...
ReDim Preserve arrDL(0 to AnzSpalten, 0 To LZeile - 1)
...
Wobei die AnzSpalten (von Warengruppen) zuvor ausgelesen und übergeben wird. Und LZeile = die Anzahl der Datensätze der Artikel.
Ändere ich nun die Warengruppen (füge ein hinzu), erhalte ich hier die Fehlermeldung: Außerhalb des Bereichs! - wenn ich die Anzahl ändere, während ich im Tool aktiv bin. (Eine Funktion im Tool, die Warengruppen anzupassen).
Jetzt habe ich gelesen, man kann nur den Hinteren Bereich mit "Preserve" neu zuweisen.
WAS kann ich WIE tun, wenn sich aber während einer aktiven Eingabephase - BEIDE Werte ändern. Sprich neue Artikel hinzukommen und auch die Anzahl der Warengruppen sich ändern?
Gibt es eine Art "Resst" für Array's ? Nur Redim arrAL() funktioniert nicht... will mehr haben...
Gruß und Danke für Eure Hilfe!!!
Kay

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array dynamisch anpassen
29.11.2011 13:57:03
Rudi
Hallo,
Nur Redim arrAL() funktioniert nicht
Sollte schon funktionieren. Nur verlierst du dann alle Werte.
Ergo:
Erst in ein anderes Array packen, neu dimensionieren, aus anderem Array wieder füllen.
Gruß
Rudi
AW: Array dynamisch anpassen
29.11.2011 13:58:58
Timo
Hallo Rudi,
wäre in solch einem Fall eine Collection eine Möglichkeit?
Gruß
Timo
AW: Array dynamisch anpassen
29.11.2011 14:18:04
Harald
Hallo Kay,
das geht ein wenig von hinten durch die kalte Küche. Erst mal ein Beispielcode:

Option Explicit
Option Base 0
Type Zeilenarray
arr_Spalten() As Long
End Type
Sub test()
Dim arr_Zeilen() As Zeilenarray
Dim Anz_Zeilen As Long
Dim Anz_Spalten As Long
Dim i As Long, k As Long
Anz_Zeilen = 10
Anz_Spalten = 5
ReDim Preserve arr_Zeilen(Anz_Zeilen)
For i = 0 To Anz_Zeilen - 1
ReDim Preserve arr_Zeilen(i).arr_Spalten(Anz_Spalten)
For k = 0 To Anz_Spalten - 1
arr_Zeilen(i).arr_Spalten(k) = i * k
Debug.Print arr_Zeilen(i).arr_Spalten(k)
Next
Next
End Sub
So geht's: Die Matrix wird nicht als solche direkt definiert, sondern als ein Array (Vektor), wobei jedes Element des Arrays wiederum ein Array ist. Dafür sorgte die TYPE Anweisung. Sie definiert einen neuen Datentyp namens Zeilenarray, der jeweils eine Spalte beinhaltet (über die Namensgebung könnte man diskutieren, will ich aber jetzt nicht).
Von diesem Typ wird mit DIM arr_zeilen() ein weiteres Array angelegt. Dieses Array kann man mit
ReDim Preserve arr_Zeilen(Anz_Zeilen)
zunächst wie gewohnt neu dimensionieren. Die Umdimensionierung der Spalten erfolgt dann innerhalb einer Schleife mittels
ReDim Preserve arr_Zeilen(i).arr_Spalten(Anz_Spalten)
In dem Beispiel schreibe ich in die Zellen erst mal Murcks (i*k). Du musst das natürlich an Deine weiteren Belange anpassen.
Ach ja, auf die einzelnen Elemente der so gebildeten Matrix greifst Du über die "Punkt-Notation" zu:
arr_Zeilen(i).arr_Spalten(k) = i * k
Gruß
Harald
Anzeige
Vielen Dank für Eure Hilfe...
29.11.2011 14:38:58
KLE
...vor allem auch für die ausführlichen Erläuterungen. So macht es Spass, was zu lernen ;o)
Werde mich nun dran machen und den Code entsprechend Euerer Anregungen anpassen.
Vielen herzlichen Dank!
Gruß
Kay

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige