Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Hi
wenn du eine Zuweisung machst wie:
x = Range(...).Value
wird x nur dann ein Array, wenn der verwendete Zellbereich mindestens 2 Zellen umfasst.
ist der Zellbereich nur genau eine Zelle groß, dann wird x kein Array, sondern ein Einzelwert.
Einzelwerte musst du aber anders programmieren als Arrays.
du könntest jetzt nach der Zuweisung abfragen, was du bekommen hast und dann zwei unterschiedliche Programmierungen erstellen:
Eingabearray = ws.Range("I1:I" & GesamtZeilen).Value
If Vartype(EingabeArray) < vbArray then
... hier die Programmierung für Einzelwert
else
... hier die Programmierung für Array
end if
das ist aber in der Regel doppelter Aufwand, da die Arbeit ja im Prinzip in beiden Fällen die gleiche ist.
daher bevorzuge ich es, auch den Einzelwert in ein zweidimensionales Array zu stecken, damit alles einheitlich programmiert werden kann.
hierzu gibt es zwei Wege:
a) man fragt erstmal ab, wie groß der Zellbereich überhaupt ist und gestaltet dann die Zuweisung unterschiedlich.
GesamtZeilen = ws.Cells(ws.Rows.Count, "I").End(xlUp).Row
if GesamtZeilen = 1 then
Redim Eingabearray(1 to 1, 1 to 1)
Eingabearray(1, 1) = ws.Range("I1").value
else
Eingabearray = ws.Range("I1:I" & GesamtZeilen).Value
end if
damit bekommst du dann ein zweidimensionales Array mit nur einem Wert, dh der Rest deiner Programmierung sollte dann funktionieren, egal ob eine oder mehr Zellen.
b) man weist der Variablen nicht nur eine Spalte, sondern zwei Spalten zu. Damit hat man immer zwei Zellen (auch wenn es nur eine Zeile ist), und bekommt auch immer das Array.
Wenn die zweite Spalte stört oder Probleme in der weiteren Programmierung macht, kann man sie mit Redim Preserve wieder entfernen.
Eingabearray = ws.Range("I1:J" & GesamtZeilen).Value
Redim Preserve EingabeArray(1 to Ubound(Eingabearry, 1), 1 to 1)
Gruß Daniel