Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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.
Antworten 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:
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten 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!
Antworten 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:
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten 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!
Antworten 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
Antworten 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"
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#10
Hallo Uwe,

Deine Lösung ist auch nicht schlecht. Die gefällt mir sogar Prima bis Oberprima.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top


Gehe zu:


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