beim Füllen von einem Array wird zusätzliche Zeile erzeugt
#1
Big Grin 
Hallo Zusammen,

ich habe ein kleines Problem, bei dem ich gerade auf dem Schlauch stehe. und zwar möchte ich eine Array mit werten füllen, was soweit auch ohne Probleme funktioniert. Jedoch wird in meiner schleife eine extra Zeile in dem Array erzeugt, welche leer ist.
Ich habe mal folgenden Beispielcode aufgesetzt. ein 1-D Array mit 10 Werten. Wenn ich dieses Array jetzt an eine ListBox übergebe, dann habe ich in der Listbox 11 Zeilen. Die letzte davon ist leer.
Ich habe die ListBox auch mal manuel gefüllt, also über AddItem, da ich dachte, dass die ListBox die Zeile vlt einfügt. Hier ist das aber nicht der Fall.

Ich arbeite nicht zum erstem mal mit Arrays, aber irgendwie ist mir dieser Fehler noch nicht aufgefallen.
Code:
Sub test()

Dim arr(10)

For i = 0 To 9
   arr(i) = i
Next i

UserForm1.ListBox1.List = arr
UserForm1.Show

End Sub
Top
#2
Hallo,

das Array ist nullbasiert, das heißt hier

Code:
Dim arr(10)

dimensionierst Du ein Array mit 11 Elementen.

Hier

Code:
For i = 0 To 9

geht die Schleife aber nur über 10 Elemente.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • darthkali
Top
#3
Ok ich habe den Schlauch gefunden.

Es muss:
Code:
Dim arr(9)
heißen und nicht


Code:
Dim arr(10)

Ich dachte immer, das man dort die reine Anzahl angibt :)

Alles klar problem gebannt.
Top
#4
Hallo,

das mit dem "einfach die Zahl hinschreiben" funktioniert auch
  :05:
Das kostet dann aber eine Codezeile mehr

Zitat:Option Base-Anweisung
        
Wird auf Modulebene verwendet, um die voreingestellte Untergrenze für Indizes von Datenfeldern zu deklarieren.
Syntax
Option Base {1}
Bemerkungen
Da die Indizes standardmäßig mit 0 beginnen, wird die Option Base-Anweisung niemals wirklich benötigt. Wenn sie dennoch verwendet wird, muß die Anweisung in einem Modul vor allen Prozeduren auftreten. Option Base kann nur einmal pro Modul auftreten und muß vor allen Deklarationen von Datenfeldern stehen, die Dimensionen enthalten.
Anmerkung   Mit dem To-Abschnitt in den Anweisungen DimPrivate PublicReDim oder Static können Sie den Bereich von Datenfeldindizes flexibler steuern. Wenn Sie jedoch die untere Grenze nicht explizit mit einem To-Abschnitt festlegen, können Sie die Standarduntergrenze mit Option Base auf 1 ändern. Die Basis eines mit der Array-Funktion oder dem Schlüsselwort ParamArray erstellten Datenfeldes ist Null; Option Base hat keinen Einfluß auf Array oder ParamArray.
Die Option Base-Anweisung wirkt sich nur auf die Untergrenze von Datenfeldern aus, die sich in dem Modul befinden, das die Anweisung umgibt.

Das stammt zwar aus der VBA-Hilfe im Excel.
Besser hätte ich das aber auch nicht beschreiben können   :05:
Top
#5
Doch Peter, dir traue ich es dennoch zu ...
DENN: Du hättest gewiss auch den Fall beschrieben, dass Mensch ja einen Bereich markiert und dann einem Array zuweist. Selbstverständlich ist solch ein Array dann (automatisch immer) 1-basiert (und auch bei 1 Spalte mehrdimensional). Insofern wäre dann das von gewissen (natürlich männlichen) IT-lern als "Frauen-Schalter" verschriene Option Base 1 für eine durchgängige Logik gut ...  Exclamation
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#6
Hallo Günther,

nun muß ich aber erst mal ernsthaft drüber nachdenken, ob das nun ein Klopfer auf die Schulter
oder eher der Tritt in den Allerwertesten war  :05: :15: :05:
Top
#7
Moin Peter,
ganz klar ein Klopfen auf die Schulter!
Der Tritt hätte in Richtung MS gehen können, die den Text imho in dem Fall ziemlich Scheuklappen-ausgestattet niedergeschrieben haben.
Du hingegen zeichnest dich doch durchgängig dadurch aus, dass du (versuchst), alle Aspekte zu beleuchten. (Ohne jegliche Ironie).
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Top
#8
Hallo Zusammen,

man kann sich auch angewöhnen, die Untergrenze eines Arrays und für jedes Array eventuell auch verschieden direkt festzulegen. Wink
Also z.B.
Dim arr(1 To 10)
oder auch
Dim arr(-2 To 10)
Option Base kann nur 0 oder 1 und greift nur, wenn die Untergrenze bei der Dimensionierung eines Arrays nicht angegeben wird.

Gruß Uwe
Top
#9
Hallo Günther,

uiiiiii, ich freue mich

Zitat:Du hingegen zeichnest dich doch durchgängig dadurch aus, dass du (versuchst), alle Aspekte zu beleuchten. (Ohne jegliche Ironie).

Endlich habe ich mal einen Forennutzer gefunden, der meine Beiträge auch liest  :05:

Leider verstärkt sich bei mir von Jahr zu Jahr ständig das Gefühl, daß mein Stil
der Herangehensweise immer weniger angenommen wird. Der Sinn eines Forums
geht dabei leider auch mehr und mehr den Bach runter.

Ey, ... meinst Du das etwa so ... kommt leider wesentlich besser an, als jede fundierte Lösung.
Spaß macht mir persönlich das Helfen in dieser Form überhaupt nicht mehr. Es ist für mich
keine Herausforderung, etwas mit heißer Nadel zusammenzustricken und den TE dann mit
einem "nach mir die Sintflut" abziehen zu lassen.

Wie hieß es schon in der Feuerzangenbowle: "traurig, ... traurig, ... traurig"
Top
#10
Hallo Uwe,

Deine Lösung ist auch nicht schlecht. Die gefällt mir sogar Prima bis Oberprima.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste