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

Forumthread: Public Array definieren mit variabler Anzahl

Public Array definieren mit variabler Anzahl
18.11.2018 01:53:57
Jonathan
Hallo zusammen,
ich habe ein Problem:
ein als public definiertes Array besitzt eine von einer Tabelle abhängige Anzahl von Einträgen. Nun kann ich eine Variable mit der Anzahl der Zeilen nur in einer Sub erstellen, nicht aber "ganz oben" im Code (wie heißt der Bereich eigentlich?).
Lese ich das Array neu ein und versuche, es vorher mit

ArrZeilen = Sheets("Bestellungen").Range("bestellungen").Rows.Count
ReDim Preserve Arr(ArrZeilen, 47)

neu zu dimensionieren, erhalte ich die Fehlermeldung, dass das Array bereits dimensioniert wurde...
Wie kann ich die Anzahl der Einträge nun variabel gestalten?
Danke an Euch
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Public Array definieren mit variabler Anzahl
18.11.2018 03:50:52
Gerd
Moin :-)
Mit Redim Preserve kann man nur die letzte(rechte) Dimension eines Array ändern.
Deklariere dieses auf der Modulebene z.B. Public Arr As Variant
Die erste Dimensionierung erfolgt in einer Prozedur bspw. mit
Redim Arr(0 To 47, 0 To 9)
Gruß Gerd
AW: Public Array definieren mit variabler Anzahl
18.11.2018 18:13:30
Jonathan
Hi Gerd, danke für deine Hilfe - leider erhalte ich auf diesem Wege beim ersten Einlesen des Arrays eine Fehlermeldung "Index außerhalb des gültigen Bereichs"...
Public Arr as Variant
Sub einlesen
Dim iCounter, iRows, i As Integer
Dim rng As Range
Dim strFirst As String
Set Bereich = Sheets("Bestellungen").Range("bestellungen")
iRows = Bereich.Rows.Count
Erase Arr
For iCounter = 2 To iRows + 1
With Sheets("Bestellungen")
For i = 1 To 16
Arr(iCounter - 1, i) = .Cells(iCounter, i).Value
Next i
End With
next iCounter
End Sub

Anzeige
AW: Public Array definieren mit variabler Anzahl
19.11.2018 09:21:57
Daniel
Hi
du musst das Variant-Array arr schon noch dimensioneren, bevor du es verwendest:
Public Arr as Variant
Sub einlesen
Dim iCounter, iRows, i As Integer
Dim rng As Range
Dim strFirst As String
Set Bereich = Sheets("Bestellungen").Range("bestellungen")
iRows = Bereich.Rows.Count
Redim Arr(1 to iRows, 1 to 16)
For iCounter = 2 To iRows + 1
With Sheets("Bestellungen")
For i = 1 To 16
Arr(iCounter - 1, i) = .Cells(iCounter, i).Value
Next i
End With
next iCounter
End Sub
wobei in deinem Fall sowohl die Redimensionerung als auch die Schleife unnötig sind, da man in VBA einen Zellbereich direkt einer Variantvariable zuweisen kann und VBA dann automatisch die Dimensionierung als 2-D-Array mit der Basis 1 (erster Index = 1) vornimmt:
Public arr as Variant
Sub einlesen
Dim iCounter, iRows, i As Integer
Set Bereich = Sheets("Bestellungen").Range("bestellungen")
iRows = Bereich.Rows.Count
Arr = Sheets("Bestellungen").Cells(2, 1).resize(iRows, 16).Value
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Public Array definieren mit variabler Anzahl


Schritt-für-Schritt-Anleitung

Um ein public Array in Excel VBA zu definieren, das eine variable Anzahl von Einträgen hat, gehe wie folgt vor:

  1. Deklaration des Arrays: Definiere das Array auf Modulebene als Public und als Variant. Beispiel:

    Public Arr As Variant
  2. Dimensionierung des Arrays: In einer Sub-Prozedur kannst du das Array mit Redim dimensionieren. Zum Beispiel:

    Dim iRows As Integer
    iRows = Sheets("Bestellungen").Range("bestellungen").Rows.Count
    ReDim Arr(1 To iRows, 1 To 16)
  3. Daten einlesen: Fülle dein Array mit Werten aus dem Arbeitsblatt:

    Dim iCounter As Integer
    For iCounter = 2 To iRows + 1
       Arr(iCounter - 1, i) = Sheets("Bestellungen").Cells(iCounter, i).Value
    Next iCounter
  4. Zusätzliche Dimensionierung: Wenn du das Array später erneut dimensionieren möchtest, benutze ReDim Preserve nur für die letzte Dimension:

    ReDim Preserve Arr(1 To iRows, 1 To 16)

Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs": Dieser Fehler tritt auf, wenn du auf ein Element des Arrays zugreifst, das nicht existiert. Stelle sicher, dass das Array korrekt dimensioniert ist, bevor du darauf zugreifst.

  • Fehler: "Array bereits dimensioniert": Wenn du versuchst, das Array mit ReDim erneut zu dimensionieren, ohne es vorher mit Erase zu leeren, bekommst du diese Fehlermeldung. Verwende Erase Arr, um das Array zu leeren, bevor du es neu dimensionierst.


Alternative Methoden

Eine alternative Methode zur Verwendung eines public Array ist die direkte Zuordnung eines Zellbereichs zu einer Variant-Variable. Hier ist ein Beispiel, wie du dies tun kannst:

Public Arr As Variant
Sub einlesen()
    Dim Bereich As Range
    Set Bereich = Sheets("Bestellungen").Range("bestellungen")
    Arr = Bereich.Value  ' Automatische Dimensionierung
End Sub

Diese Methode erspart dir die Notwendigkeit, das Array manuell zu dimensionieren und ist oft einfacher.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das die oben genannten Schritte zusammenfasst und ein public Array in einer Excel VBA-Anwendung verwendet:

Public Arr As Variant

Sub einlesen()
    Dim iRows As Integer
    Dim iCounter As Integer
    Set Bereich = Sheets("Bestellungen").Range("bestellungen")
    iRows = Bereich.Rows.Count
    ReDim Arr(1 To iRows, 1 To 16)

    For iCounter = 2 To iRows + 1
        For i = 1 To 16
            Arr(iCounter - 1, i) = Sheets("Bestellungen").Cells(iCounter, i).Value
        Next i
    Next iCounter
End Sub

Tipps für Profis

  • Verwende Option Base 1 am Anfang deines Moduls, um die Standardbasis für Arrays auf 1 zu setzen. Dies erleichtert die Arbeit mit Arrays, insbesondere wenn du häufig auf Zellen zugreifst.

  • Nutze VBA Resize Array, um die Größe deines Arrays zur Laufzeit dynamisch anzupassen, wenn sich die Daten ändern.

  • Halte dein Array klein, um die Performance zu optimieren. Große Arrays können die Ausführungsgeschwindigkeit deiner VBA-Anwendungen verlangsamen.


FAQ: Häufige Fragen

1. Wie definiere ich ein Array in VBA?
Du kannst ein Array in VBA mit Dim oder Public definieren. Beispiel: Dim Arr() As Variant.

2. Was ist der Unterschied zwischen ReDim und ReDim Preserve?
ReDim wird verwendet, um die Größe eines Arrays zu ändern, während ReDim Preserve die bestehenden Werte im Array beibehält, jedoch nur für die letzte Dimension.

3. Kann ich ein Array in VBA initialisieren?
Ja, du kannst ein Array initialisieren, indem du die Werte direkt zuweist, nachdem du es dimensioniert hast.

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