vba excel 2007 / 2010 Index außerhalb des gültigen Bereichs

Liesi

Cadet 2nd Year
Registriert
Okt. 2012
Beiträge
29
Hallo
ich habe mal wieder ein Problem.
Ich habe einen VBA Code Excel 2010 der mir die Fehlermeldung "Index außerhalb des gültigen Bereichs" Fehler 9 ausgibt.

Der gekürzte Code lautet (Groß- und Kleinschreibung habe ich mal vernachlässigt):

redim c (0 to tstepend, 0 to cellstepend)
dim cellstep as long
dim cellstepend as long
dim tstep as long
dim tstepend as long
dim c0 as single
c0 = 36
cellstepend = 10

for cellstep = cellstepend-1 to 0 step -1
---> c(0,cellstep) = c0


bei der mit ---> gekennzeichneten Zeile gibt er mir den Fehler aus. Ich habe das Programm vor ein paar Wochen in Excel 2007 geschrieben, dort hat es funktioniert und nun habe ich es mit Excel 2010 geöffnet und es funktioniert nicht, wenn ich es erneut mit 2007 öffne geht es auch nicht mehr. Ich wüsste außerdem nicht, dass ich etwas am Code geändert habe.
Hat jemand eine Idee??
Liebe Grüße
Liesi
 
Aktiviere mal Option Explicit oder schreibe das in die 1. Zeile des Moduls - der Compiler wird dir dann sicher sagen, dass irgendeine Variable nicht definiert und deswegen 0 ist.

P.S:

Ein Array definiert man per Dim und nicht per ReDim - ReDim ändert nur nachträglich die letzte Dimensionsgröße.

Vor allem definiert dein Array eine Größe von 0 bis 0, da beide Variablen erst zu einem späteren Zeitpunkt einen sinnvollen Wert bekommen.
 
Zuletzt bearbeitet:
option explicit steht bei mir schon in der ersten zeile und mein tstepend sowie cellstepend varriert, von daher dachte ich, dass ich redim benutzen müsste.
aber wenn dass c Array als variant definiert ist und ich nur 36,45 hier abspeichere muss das doch eigentlich passen?
 
Ich hab das noch mal nachgelesen, wenn man Redim Preserve benutzt, kann man nur die letzte Dimension ändern - ansonsten kann mal wohl alle Dimensionen ändern, verliert aber dafür auch jeglichen Inhalt.

Im Zweifel kann man den Code debuggen (F9 setzt einen "Breakpoint") und dann das Array "c" überwachen. Im Überwachungsfenster sollte man dann auch sehen können, wie große die Werte und Dimensionen des Arrays gerade sind...
 
ich habe den einen code noch mal extrahiert und separat laufen lassen, es funktioniert aber auch nicht. ich finde den fehler einfach nicht
das ist mein kompletter code:


Option Explicit

Sub probe()

Application.ScreenUpdating = False


Dim CellStep As Long
Dim CellStepEnd As Long
Dim tStepEnd As Long
Dim c0 As Single
CellStepEnd = 10
tStepEnd = 100
c0 = 36.45
Dim c(0 To tStepEnd, 0 To CellStepEnd) As Variant



For CellStep = CellStepEnd - 1 To 0 Step -1
c(0, CellStep) = c0
Next CellStep


Application.ScreenUpdating = True

End Sub
 
Wenn ich mich recht erinnere, dann mag VBA es nicht, wenn die DIM-Anweisung Variablen enthält. Entweder Konstanten nutzen, oder es mal so versuchen:

Code:
Dim c() as Variant
ReDim c(0 To tStepEnd, 0 To CellStepEnd)
 
Zuletzt bearbeitet:
Goldilox schrieb:
Wenn ich mich recht erinnere, dann mag VBA es nicht, wenn die DIM-Anweisung Variablen enthält.

Das wird es sein!

Das Problem ist, dass bevor der Code in der Funktion ausgeführt wird, werden die Variablen deklariert. Dazu gehören auch das Array und die beiden Variablen für das Array. Das heißt zu dem Zeitpunkt, zu dem das Array deklariert wird, sind die Variablen 0. Die erste Anweisung die danach ausgeführt wird, ist:
Code:
CellStepEnd = 10
Das würde man halt auch sehen, wenn man es debuggen würde oder versuchen würde einen Breakpoint darauf zu setzen...

Also für die Zukunft immer gleich alle DIM-Anweisungen ganz oben in der Prozedur hinschreiben, damit man sich merkt, dass die VOR Ausführung der Prozedur erzeugt werden.
 
Zuletzt bearbeitet:

Ähnliche Themen

D
Antworten
5
Aufrufe
2.294
derburner23
D
Zurück
Oben