Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1664to1668
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

For ohne Next Fehlermeldung

For ohne Next Fehlermeldung
09.01.2019 08:44:36
Rasenack
Guten Morgen, ich habe da mal eine Frage an die Profis. Unzwar möchte ich mit einer eigentlich simplen Schleife vorab die eingegebenen Werte in meiner Tabelle auf Richtigkeit untersuchen. Also wenn Eingabewert richtig, dann zähl weiter ansonsten gib Fehler aus und aktiviere die entsprechende Zelle, um die Eingabe zu korrigieren.
Nun bekomme ich die Fehlermeldung "For ohne Next". Ich verstehe nicht was an dem Konstrukt falsch sein soll bzw. bin ich wahrscheinlich nur zu blind es zu erkennen. Für jede Hilfe bin ich sehr dankbar.
For l = 7 To 32
For z = 2 To 6
If Cells(l, z).Value = 1 Or Cells(l, z).Value = 2 Or Cells(l, z).Value = 3 Then
Next z
Next l
Else: MsgBox ("Bei der Eingabe des Men?s ist ein Fehler aufgetreten!" & vbNewLine & "Bitte korrigiere die Eingabe.")
Cells(l, z).Activate
End If

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For ohne Next Fehlermeldung
09.01.2019 08:55:53
Bernd
Servus Rasenack,
deine If-Abfrage hat kein End If, daher bemängelt er den For-Next-Fehler...
Grüße, Bernd
AW: For ohne Next Fehlermeldung
09.01.2019 08:57:56
Rasenack
Das End If steht doch am Ende nach Else...
Oder wie meinst du das?
AW: For ohne Next Fehlermeldung
09.01.2019 08:57:42
Daniel
Hi
es gilt die Regel, dass sämtliche Konstrollstrukturen in VBA
(Schleifen wie For-Next, Do-Loop; Bedingungsprüfungen wie IF-Then, Select Case; WITH-Block)
immer nur ineinander geschachtelt werden können so wie Matruschkas.
dh wenn du innerhalb einer Schleife einen IF-Block beginnst, dann muss dieser IF-Block auch innerhalb dieser Schleife wieder beendet werden dh das End IF muss vor dem Next stehen.
Gruß Daniel
Anzeige
AW: For ohne Next Fehlermeldung
09.01.2019 09:00:21
Rasenack
Ah verstehe. Ich dachte immer das End If muss nach Else kommen. Aber vielen Dank für den wichtigen Hinweis :-)
Liebe Grüße André
AW: For ohne Next Fehlermeldung
09.01.2019 09:04:29
Daniel
HI
natürlich muss ein End IF immer nach Else stehen.
aber wenn das FOR vor dem IF steht, dann darf das NEXT zu diesem For erst nach dem End IF stehen.
Gruß Daniel
AW: mit Select Case?
09.01.2019 09:15:33
hary
Moin
Du koenntest es auch so loesen. Nur musst du nach der Korrektur das Makro wieder starten.
For l = 7 To 32
For z = 2 To 6
With Cells(l, z)
If .Value  "" Then
Select Case .Value
Case 1, 2, 3
'--bei 1/2/3 tu nix
Case Else
MsgBox ("Bei der Eingabe des Men?s ist ein Fehler aufgetreten!" & vbNewLine & "Bitte  _
korrigiere die Eingabe.")
.Select
Exit Sub
End Select
End If
End With
Next z
Next l

Evtl. besser mit bedingter Formatierung arbeiten
gruss hary
Anzeige
AW: For ohne Next Fehlermeldung
09.01.2019 10:19:30
Zwenn
Hallo André,
wie die anderen Dir schon erklärt haben, dürfen Strukturen mit eigenen Code-Blöcken zwar andere Strukturen mit Code-Blöcken enthalten, jedoch muss jeder Block in sich geschlossen sein. Wenn ich es richtig verstanden habe, versuchst Du die Schleife nur weiterlaufen zu lassen, wenn kein Fehler aufgetreten ist, indem Du die beiden Next-Anweisungen hinter die einleitende If-Zeile schreibst. Das ist nicht notwendig und funktioniert so auch nicht, wie Du festgestellt hast.
Der folgende Codeabschnitt läuft beide Schleifen komplett durch und markiert Dir alle Fehler in der Tabelle. Diese kannst Du anschließend alle auf einmal korrigieren. Ich wollte die fehlerhaften Zellen erst rot markieren, aber Du verwendest ja Farben schon für einen anderen Zweck. Deshalb schreibt der folgende Code einfach "falsch: " vor einen fehlerhaften Wert. Das sollte auch funktionieren.
Zum Verständnis habe ich Dir jeweils den Beginn und das Ende der verschachtelten Blöcke entsprechend kommentiert:

'Deklaration eines Zählers für Fehler
'Numerische Variablen haben 0 als
'dafault-Wert und müssen nur initialisiert
'werden, wenn der benötigte Startwert von
'0 abweicht
Dim fehlerZahl As Byte
'Beginn äußere Schleife
For l = 7 To 32
'Beginn innere Schleife
For Z = 2 To 6
'Beginn If
'Wenn Wert in aktueller Zelle kleiner 1 oder größer 3
If Cells(l, Z).Value  3 Then
'Vor den eingetragenen Wert wird 'falsch: ' geschrieben
Cells(l, Z).Value = "falsch: " & Cells(l, Z).Value
'Der Fehlerzähler wird um 1 erhöht
fehlerZahl = fehlerZahl + 1
'Ende If
End If
'Ende innere Schleife
Next Z
'Ende äußere Schleife
Next l
'Wenn Fehler aufgetreten sind
If fehleranzahl > 0 Then
'Ausgabe der Fehler-Anzah
MsgBox ("Bei der Eingabe sind " & fehleranzahl & " Fehler aufgetreten!" _
& vbNewLine & "Bitte korrigiere die Eingabe.")
'Rücksetzen des Zählers
fehleranzahl = 0
End If

Viele Grüße,
Zwenn
Anzeige
AW: For ohne Next Fehlermeldung
09.01.2019 11:37:27
Herbert
Hallo,
Daniel hat es dir schon exakt erklärt, was zu beachten ist. Und wenn du zukünftig bei deinen Programmierungen das "Einrücken" (s. Beispiel unten) beachtest, dann klappt's auch ohne Fehlermeldung!
Hier das Beispiel:
Sub test()
For l = 7 To 32
For Z = 2 To 6
If Cells(l, Z).Value = 1 Or Cells(l, Z).Value = 2 Or Cells(l, Z).Value = 3 Then
'?
Else
MsgBox ("Fehler aufgetreten!" & vbNewLine & "Bitte korrigiere die Eingabe.")
Cells(l, Z).Activate
End If
Next Z
Next l
End Sub
Servus
P.S.: Was soll er eigentlich tun, wenn die "IF"-Bedingung zutrifft?
Anzeige
AW: For ohne Next Fehlermeldung
09.01.2019 11:46:28
Zwenn
Hallo Herbert,
so wie Du es jetzt umgeschrieben hast bekommt er zwar für jeden Fehler die Meldung angezeigt und es wird dann die Zelle selektiert, aber danach laufen die Schleifen weiter, ohne dass es die Möglichkeit einer Fehlerkorrektur gibt. Am Ende ist also die letzte fehlerhafte Zelle markiert, sofern es einen Fehler gab.
Das macht so also keinen Sinn. Ich gehe davon aus, dass er die beiden Next Anweisungen ausführen wollte, sofern die If-Bedingung zu True ausgewertet wird.
Viele Grüße,
Zwenn
AW: For ohne Next Fehlermeldung
09.01.2019 11:48:52
Herbert
Hallo Zwenn,
da hast du sicher recht, doch mir ging es nicht um den Inhalt seines Codes, da haben sich ja die Anderen schon drum gekümmert, sondern nur um die Darstellung.
Servus
Anzeige
AW: For ohne Next Fehlermeldung
09.01.2019 11:56:48
Daniel
Hi
ich würde die Prüfung auf korrektheit der Daten voranstellen, so dass die Schleife nur gestartet wird, wenn alle Werte korrigiert wurden.
die Prüfung dafür könnte so aussehen, wenn in allen Zellen 1, 2, oder 3 stehen muss:
dim CheckSum as Long
dim Soll as long
dim i as Long
Soll = Range("B7:F32").Cells.count
for i = 1 to 3
CheckSum = CheckSum + Worksheetfunction.CountIf(Range("B7:F32"), i)
Next
if CheckSum = Soll then
for l = 7 to 32
for Z = 2 to 6
hier dein Code
Next
next
Else
Msgbox Soll - CheckSum & " Fehler, bitte Eingabe korrigieren"
End if
die Markierung der Zellen würde ich dann über die Bedingte Formatierung machen (dann sieht man eigentlich schon vorher, ob man das Makro starten kann oder nicht)
ich würde sogar die Prüfung mit den ZählenWenns in einer Zelle vornehmen und dort schon den Hinweistext direkt auf dem Blatt ausgeben lassen.
Gruß Daniel
Anzeige
AW: For ohne Next Fehlermeldung
09.01.2019 13:13:17
Rasenack
Hallo nochmal an alle fleißigen Helfer. Danke für die verschiedenen Anregungen. Ich muss allerdings den Code auch noch verstehen, wenn ich ihn länger nicht angesehen habe ;-) Deshalb sieht mein Code wahrscheinlich etwas verbesserungswürdig aus, aber im Prinzip macht er jetzt das was er soll. Vorher funktionierte mein Makro so, dass er einfach die Werte zugeordnet hat und die Zellen gefärbt hat. Drückte ich nun aus versehen nochmals den Button, begann er mir wieder irgendwelche Werte zu überschreiben, da ja zufälligerweise wieder ein 3 (aber in Euro) drin stehen konnte und er sie erkannt hat. Also war mein Gedanke das gesamte Makro gar nicht erst zu starten, wenn schon Farben in der Tabelle enthalten sind Punkt 1 und außerdem das Makro nicht starten soll, wenn die eingegeben Wörter falsch geschrieben sind. Die 1, 2, 3 habe ich nur beispielhaft angeführt, in Wahrheit sind es aber 10 Gerichte und diese Sind auch teilweise Wörter. Deshalb vorher die Schleife zur Überprüfung, um die Rechtschreibkorrektur durchführen zu können. Wenn sich nämlich so ein dummer Fehler eingeschlichen hat, konnte er das nicht als Case definieren und Übersprang einfach die Zelle. Folglich war die Gesamtsumme falsch. Wollte man jetzt diese Zelle ändern, kam wieder Punkt 1 ins Spiel.
Nichts desto Trotz habe ich auch ein Makro geschrieben mit dem es mir möglich ist im Nachhinein Essen zu korrigieren, weil es ja andauernd zu Abbestellungen bzw. Hinzubestellungen seitens der Kollegen gibt.(Im Übrigen auch mit Rechtschreibkorrektur ;-)). Hier mal der Code zur Verdeutlichung:
Sub Wertzuweisung()
Dim i As Integer
Dim k As Integer
Dim l As Integer
Dim z As Integer
Dim tagespreis(0 To 4) As Variant
Dim s As Integer
Dim wochenpreis As Double
With ThisWorkbook.Worksheets("Essenbestellung").Activate
End With
If Range("B7:F32").Interior.ColorIndex = 2 Then
'Spalte H in W?hrungsformat ?berf?hren
Range("H7:H32").NumberFormat = "0.00 ?"
'?berpr?ft vorab, ob die eingegebenen W?rter stimmen, um Berechnungsfehler zu vermeiden
For l = 7 To 32
For z = 2 To 6
If Cells(l, z).Value = 1 Or Cells(l, z).Value = 2 Or Cells(l, z).Value = 3 Or Cells(l,  _
z).Value = "Pasta" Or Cells(l, z).Value = "Blau" Or Cells(l, z).Value = "Silber"
Or Cells(l, z).Value = "A" Or Cells(l, z).Value = "B" Or Cells(l, z).Value = "C"
Or Cells(l, z).Value = "E" Or Cells(l, z).Value = "" Then
Else: MsgBox ("Bei der Eingabe der Men?s ist ein Fehler aufgetreten!" & vbNewLine & " _
Bitte korrigiere die Eingabe.")
Cells(l, z).Activate
Exit Sub
End If
Next z
Next l
'Weist jedem Eingabewert den jeweiligen Preis zu und bildet anschlie?end die Summe
For k = 7 To 32
For i = 2 To 6
Select Case Cells(k, i).Value
Case 1
Cells(k, i).Interior.ColorIndex = Cells(1, 2).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 2).Value
Case 2
Cells(k, i).Interior.ColorIndex = Cells(1, 3).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 3).Value
Case 3
Cells(k, i).Interior.ColorIndex = Cells(1, 4).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 4).Value
Case "Pasta"
Cells(k, i).Interior.ColorIndex = Cells(1, 5).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 5).Value
Case "Silber"
Cells(k, i).Interior.ColorIndex = Cells(1, 6).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 6).Value
Case "Blau"
Cells(k, i).Interior.ColorIndex = Cells(1, 7).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 7).Value
Case "A"
Cells(k, i).Interior.ColorIndex = Cells(1, 8).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 8).Value
Case "B"
Cells(k, i).Interior.ColorIndex = Cells(1, 9).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 9).Value
Case "C"
Cells(k, i).Interior.ColorIndex = Cells(1, 10).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 10).Value
Case "E"
Cells(k, i).Interior.ColorIndex = Cells(1, 11).Interior.ColorIndex
tagespreis(i - 2) = Cells(2, 11).Value
Case ""
tagespreis(i - 2) = 0
End Select
Next i
'Einzelwerte des Arrays zeilenweise aufsummieren und in Spalte Hk eintragen
wochenpreis = 0
For s = 0 To 4
wochenpreis = wochenpreis + tagespreis(s)
Next s
If wochenpreis > 0 Then
Cells(k, 8).Value = wochenpreis
End If
Next k
Else
Select Case MsgBox("Die Tabelle muss erst vollst?ndig gel?scht sein, bevor du die  _
Gesamtsumme erneut berechnen m?chtest!" & vbNewLine & "Soll die Tabelle jetzt gel?scht werden?", vbYesNo)
Case vbYes
Call TabelleLeeren
Case vbNo
End Select
End If
Call Tabelle_Laola
End Sub

Anzeige

158 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige