Excel VBA - Array liefert "Typen unverträglich"

MickH74

Lieutenant
Registriert
Apr. 2009
Beiträge
591
Hallo liebes Forum,

ich habe ein seltsames Problem mit meinem VBA-Code und wollte mal fragen, ob hier jemand eine Idee hat, woran es liegen könnte.

1. Was macht der Code
Ich lege direkt beim Öffnen der Datei ein Public Array an.
Code:
Public Array_Quelle

Dann wird die letzte Zeile einer Tabelle ermittelt (Variable LZ), damit ich das Array in ein 2-dimensionales Array mit einer vorgegebenen Anzahl an Plätzen umwandeln kann.
Code:
Redim Array_Quelle(1 to LZ, 1 to 12)

Anschließend werden die Werte aus eben dieser Tabelle in zwei verschachtelten FOR-Schleifen in das Array eingelesen.
Das mache ich, weil mit verschiedenen Buttons Aktionen und Berechnungen ausgelöst werden, die eben die Daten aus dieser Tabelle brauchen und es geht schneller, wenn ich die Werte in einem Array verfügbar mache, statt jedesmal über Zell-Aktionen zu gehen. Aber das nur am Rande.

2. Das Problem
Das Programm läuft manchmal ohne Probleme. Auch die folgende problematische Fehlerzeile, bei der eine Jahreszahl mit dem Wert einer Combobox verglichen wird, wird dabei mehrfach ohne Fehler abgearbeitet. Aber irgendwann kommt hier ein "Typen unverträglich"-Fehler in der ersten Zeile:

Code:
If Array_Quelle(i, 6) < Sheets("View").Combo_Von.Value Then
Switch_Go = 0
End If

Nun versuche ich im Debug-Fenster mit
Code:
Debug.Print (Array_Quelle(i,6))

den Wert auszulesen und es erscheint auch ein "Laufzeitfehler 13 - Typen unverträglich"-Fehler.

Auch wenn ich i oder 6 durch beliebige Zahlen im Array-Bereich ersetze, kommt immer der gleiche Fehler. Ganz so, als wäre das Array auf einmal defekt. Ich meine, wie kann die einfache Debug.Print-Ausgabe eine Typen-Unverträglichkeit haben? Der Befehl sollte doch jede Art von Variable ausgeben können, oder?
Hatte auch schon versucht eine Typenkonvertierung zu erzwingen z.B mit:
Code:
Debug.Print (Cdbl(Array_Quelle(i,6)))
Aber auch das funktioniert nicht. Gleicher Fehler.

Das Array_Quelle wird nach dem Füllen mit den Werten nicht mehr verändert (also kein Re-Dim oder das neue Daten geschrieben werden o.ä.)

Ich habe keine Idee, woran das liegen könnte. Kann mir da jemand helfen?

MfG
Mick
 
Zuletzt bearbeitet:
Hallo,

erstens zu deiner Durchführung, wenn möglich fülle das Array gleich über ein Range, ist nochmal schneller (nur als Info und wenn überhaupt möglich). Zu deinem Problem, wie sind denn die Werte bzw. das Array deklariert? Meist stimmt hier was nicht nach meiner Erfahrung. Option Base 1 is drin?

Edit: Du könntest noch versuchen den Werten im Array die Formatierung aufzuzwingen.
 
Hallo TomG87,

danke für Deinen Tipp.

Option Base 1 kannt ich gar nicht. Hab ich ausprobiert, aber das hat leider nichts geändert.

Das Array über Range zu füllen geht irre schnell und daher habe ich das Programm nun so umgeschrieben, dass es nicht einmal beim Programmstart gefüllt wird, sondern jedesmal, wenn eine Aktion ausgeführt wird, die das Array verwendet. Über Range dauert es nur den Bruchteil einer Sekunde und so hat Dein Tipp doch noch mein Problem gelöst. Vielen Dank dafür!!

Gruß,
Mick
 
Zurück
Oben