Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: redim preserve fehler

redim preserve fehler
03.08.2016 11:43:29
Kevin
Hallo zusammen
ich möchte gerne ein mehrdimensionales Array entsprechend des Beispiel Codes mit Redim Preserve ändern, bekomme aber immer die Fehlermeldung, dass das Datenfeld bereits dimensioniert wäre. Kann mir jemand bitte helfen und findet wo mein Fehler liegt?
Sub test()
Dim redimArr(1, 1000) as Variant
arr1 = Array(101, 102, 103, 104, 105, 106, 107, 108, 109, 110)
arr2 = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
i = 0
Do While arr2(i)  ""
On Error Resume Next
redimArr(0, i) = arr1(i)
redimArr(1, i) = arr2(i)
i = i + 1
Loop
ReDim Preserve redimArr(1, i)
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: redim preserve fehler
03.08.2016 11:56:24
Daniel
Hi
wenn du ein Array schon bei DIM auf eine bestimmte Größe festlegst, dann ist diese nicht mehr nächträglich änderbar.
wenn du im Deklarationsteil "DIMst", dann lass die Größe des Arrays offen und sie erst später fest:
Dim redimArr as variant
ReDim redimArr(1, 1000)
oder lass das Dim ganz weg und schreibe nur:
Redim redimArr(1, 1000) as Variant

das versteht VBA auch und damit bleibt die Grösse der letzten Dimension flexibel.
gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit dem Fehler "Redim Preserve" in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Fehler beim Einsatz von Redim Preserve in Excel VBA zu beheben, folge diesen Schritten:

  1. Array deklarieren: Anstatt das Array mit einer festen Größe zu dimensionieren, lasse die Dimension offen oder verwende ReDim, um die Größe später festzulegen.

    Dim redimArr As Variant
  2. Array mit ReDim dimensionieren: Nachdem du das Array deklariert hast, kannst du die Größe mit ReDim festlegen.

    ReDim redimArr(1, 1000)
  3. Daten einfügen: Verwende eine Schleife, um Werte in dein mehrdimensionales Array zu speichern.

    Dim i As Integer
    i = 0
    Do While arr2(i) <> ""
       On Error Resume Next
       redimArr(0, i) = arr1(i)
       redimArr(1, i) = arr2(i)
       i = i + 1
    Loop
  4. Array mit ReDim Preserve anpassen: Nach dem Einfügen der Werte kannst du die Größe des Arrays anpassen, ohne die bestehenden Daten zu verlieren.

    ReDim Preserve redimArr(1, i)

Häufige Fehler und Lösungen

  • Fehler: "Das Datenfeld ist bereits dimensioniert"

    • Lösung: Stelle sicher, dass du das Array ohne feste Dimensionen deklarierst. Nutze ReDim anstelle von Dim für die erste Dimension, um die Flexibilität zu gewährleisten.
  • Fehler: Daten gehen verloren

    • Lösung: Achte darauf, ReDim Preserve zu verwenden, wenn du die Größe eines bereits dimensionierten Arrays ändern möchtest. Dies bewahrt die bestehenden Daten.

Alternative Methoden

Wenn du mit Redim Preserve Schwierigkeiten hast, gibt es alternative Ansätze:

  • Verwendung von Collections: Anstatt ein Array zu nutzen, kannst du Collections verwenden, die dynamisch sind und keine feste Größe benötigen.

  • Dictionary-Objekte: Diese sind besonders nützlich, wenn du Schlüssel-Wert-Paare speichern möchtest, und bieten eine flexible Handhabung der Daten.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du Redim Preserve effektiv nutzen kannst:

Sub BeispielRedimPreserve()
    Dim redimArr As Variant
    Dim i As Integer

    ReDim redimArr(1, 0)  ' Beginne mit einer Dimension

    For i = 0 To 5
        ReDim Preserve redimArr(1, i)  ' Erweitere das Array mit Preserve
        redimArr(0, i) = i * 10  ' Beispielwerte
        redimArr(1, i) = i
    Next i

    ' Ausgabe der Werte
    For i = 0 To UBound(redimArr, 2)
        Debug.Print redimArr(0, i), redimArr(1, i)
    Next i
End Sub

Tipps für Profis

  • Vermeide unnötiges ReDim Preserve: Wenn möglich, plane die Größe des Arrays im Voraus, um die Leistung zu verbessern.

  • Nutze mehrdimensionale Arrays effizient: Bei komplexen Datenstrukturen kann ein mehrdimensionales Array nützlich sein, dennoch solltest du sicherstellen, dass die Dimensionen nicht unnötig groß sind.

  • Überwache die Leistung: Bei großen Arrays kann die Verwendung von ReDim Preserve die Leistung beeinträchtigen. Teste, ob eine andere Datenstruktur besser geeignet ist.


FAQ: Häufige Fragen

1. Was ist der Hauptunterschied zwischen Dim und ReDim? Dim wird verwendet, um ein Array mit einer festen Größe zu deklarieren, während ReDim die Größe eines bereits existierenden Arrays ändern kann.

2. Kann ich ReDim Preserve für mehrdimensionale Arrays verwenden? Ja, allerdings kannst du nur die letzte Dimension eines mehrdimensionalen Arrays mit Preserve anpassen. Die anderen Dimensionen bleiben unverändert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige