HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
daniel
03.08.2026 19:06:36
AW: VBA Typen unverträglich
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

Als Antwort auf diesen Beitrag
Christian
03.08.2026 18:24:27
VBA Typen unverträglich
Hallo, wahrscheinlich bin ich einfach nur blind, aber ich finde den Fehler einfach nicht,

warum bekomme ich in der Zeile If IsDate(Eingabearray(i, 1)) Then die Meldung Typen unverträglich bei Eingabe eines Datums in J1?

Danke
Christian

https://www.herber.de/bbs/user/180949.xlsm
Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.