Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"Index außerhalb ..." in If-Bedingung

"Index außerhalb ..." in If-Bedingung
Tommy
Hi Leute,
Ich prüfe in einer Bedingung so etwas wie:
Sub pr()
For i = 1 to Ubound(arr)
If arr(i) = arr(i+2) then
Else
Endif
Next i
End Sub
Logischerweise bekomme ich da den Laufzeitfehler 9.
Wie kann ich das am besten lösen.
Hab es mal mit ner Goto-Anweisung versucht. Finde ich aber nicht so gut.
Und das array zu "vergrößern" möchte ich eigenlich nicht.
Ich will im Grunde, dass die if-Bedingugn nur geprüft wird, wenn (i Gibt es da noch einen anderen Weg?
Vielen Dank im voraus.
Grüße
Tommy
For i = 1 to Ubound(arr)-2
27.04.2010 16:19:15
IngoG
Hallo Tommy,
da sonst nichts in deinem Loop passiert lass ihn einfach nicht bis zum Ende laufen ;-)
Gruß Ingo
AW: "Index außerhalb ..." in If-Bedingung
27.04.2010 16:30:16
Tommy
Hallo,
nee das geht nicht. Da passiert schon noch was.
GEnauer:
Sub pr()
For i = 1 to Ubound(arr)
If arr(i) = arr(i+2) then
arr(i) = ....
Elseif  arr(i) = arr(i+1) then
arr(i) = ....
Else
arr(i) = ....
Endif
Next i
End Sub
die Schleife muss schon bis zum Ende gehen.
...und warum ergänzt du dann die Bedingung...
27.04.2010 16:42:42
Luc:-?
…nicht entsprechend, Tommy…?!
If i < UBound(arr) - 1 And arr(i) = arr(i + 2) Then bzw…
If i < UBound(arr) And arr(i) = arr(i + 1) Then
Gruß Luc :-?
Anzeige
So hatte ich es auch erst versucht.
27.04.2010 16:55:34
Tommy
Hallo Luc,
weil dann auch ne Fehlermeldung (9) kommen würde.
So wie du es geschrieben hast, würde er "arr(i) = arr(i + 2)" prüfen auch wenn "i >= UBound(arr) - 1". Und damit wäre arr(i + 2) außerhalb des gültigen Bereichs!
Ja, stimmt, wg And wird beides geprüft,...
27.04.2010 22:58:46
Luc:-?
…Tommy;
dann bleibt nur teilen…
If i < UBound(arr) - 1 Then
If arr(i) = arr(i + 2) Then
…
ElseIf  arr(i) = arr(i + 1) Then
…
Else
…
End If
ElseIf i < UBound(arr) Then
If  arr(i) = arr(i + 1) Then
…
Else
…
End If
Else
…
End If
…alternativ ggf so…
If i < UBound(arr) - 1 Then
If arr(i) = arr(i + 2) Then
…
ElseIf  arr(i) = arr(i + 1) Then
GoTo v1
Else: GoTo v2
End If
ElseIf i < UBound(arr) Then
v1: If  arr(i) = arr(i + 1) Then
…
Else: GoTo v2
End If
Else
v2: …
End If
Es gibt da sicher noch andere Möglichkeiten, bspw mit Select Case
Gruß Luc :-?
Anzeige
AW: "Index außerhalb ..." in If-Bedingung
27.04.2010 16:48:43
IngoG
Hallo Tommy
trotzdem solltest Du den Loop nur bis Ubound(arr)-2 laufen lassen
anschließend hinter dem next machst Du folgendes
if arr(Ubound(arr)-1) = arr(Ubound(arr)) then arr(Ubound(arr)-1) =...
else arr(Ubound(arr)-1)=...
und
arr(Ubound(arr))=...
die beiden letzten umläufe handlest du also manuell...
Gruß Ingo
AW: "Index außerhalb ..." in If-Bedingung
27.04.2010 17:13:32
Tommy
Hi Ingo,
ja das würde gehen. Würde in meinem Fall abre sehr viele Zeilen produzieren.
Der code ist noch etwas komplexer als ich es hier geschrieben habe. Der Vergleich bis zu i+5! Ich müsste dann extrem häufig eine Anweisung aufrufen.
Zudem komm hinzu, dass die Anweisung eine Prouedur aufruft, dem einige Parameter übergeben werden müssen.
ungefär so:
Call KonglomeriertFünf( _
adblDis, _
adblZeitGreif, _
adblZeitTotVG, _
adblZeitTotNG, _
adblZeitTotKong, _
adblZeitWeg, _
dblExAccLeer, _
dblExAccVoll, _
dblExDecLeer, _
dblExDecVoll, _
dblExVelMaxVoll, _
dblExVelMaxLeer, _
dblExZeitGreif0, _
dblExZeitGreif1, _
dblExZeitTotVG, _
dblExZeitTotNG, _
dblExZeitTotKong, _
intExPaketeMax, _
RunZeit)
Das wird dann sehr sehr unschön.
Im Moment tendiere ich dazu das Datenfeld arr einfuch um 5 weitere Plätze zu erweitern. Richtig schön ist das aber auch nicht. Muss dann aufpassen, dass ich im späteren Verlauf als Obergrenze (Ubound(arr) - 5) benutze.
Oder gibt es doch noch ne andere Lösung?
Gruß
Tommy
Anzeige
AW: "Index außerhalb ..." in If-Bedingung
27.04.2010 17:30:11
IngoG
Hallo nochmal,
dann in diesem Stil:
For i = 1 to Ubound(arr)
if (i+2<=ubound(arr))and ( arr(i) = arr(worksheetfunction.min(Ubound(arr) ,i+2))) then ...
dadurch wird der parameter nie größer als ubound(arr)
Gruß Ingo
AW: "Index außerhalb ..." in If-Bedingung
27.04.2010 18:23:20
Tommy
Danke für den Vorschlag, aber ich wüsste nicht wo ich diese Bedingung in mein eProzedur einbauen sollte.
Sub pr()
For i = 1 to Ubound(arr)
If arr(i) = arr(i+2) then
arr(i) = ....
Elseif  arr(i) = arr(i+1) then
arr(i) = ....
Else
arr(i) = ....
Endif
Next i
End Sub

AW: "Index außerhalb ..." in If-Bedingung
27.04.2010 19:57:01
IngoG
Hallo Tommy,
<pre>Sub pr()
For i = 1 to Ubound(arr)
if (i+2<=ubound(arr))and ( arr(i) = arr(worksheetfunction.min(Ubound(arr) ,i+2))) then
arr(i) = ....
Elseif (i+1<=ubound(arr))and ( arr(i) = arr(worksheetfunction.min(Ubound(arr) ,i+1)))
arr(i) = ....
Else
arr(i) = ....
Endif
Next i
End Sub</pre>
sollte funzen
Gruß Ingo
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige