Microsoft Excel

Herbers Excel/VBA-Archiv

While-Schleife mit Or-Operator


Betrifft: While-Schleife mit Or-Operator von: Falko
Geschrieben am: 16.09.2017 18:57:12

Hallo zusammen,

ich versuche gerade meine erste While-Schleife zu programmieren. Auf das wesentlichste reduziert, sieht sie so aus:

Dim intRow As Integer
intRow = 3
Do While Cells(intRow, 1).Value <> Kunde_Auftragsnummer Or intRow <> 1000
intRow = intRow + 1
Loop

Die Schleife enthält zwei Bedinungen. Die Schleife funktioniert, wenn jeweils nur eine der Bedingungen vorhanden ist. Kombiniert mit dem Or-Operator komme ich aber in den Überlauf.

Wo liegt hier der Fehler?

Danke und Gruß
Falko

PS: Eigentlich ist die zweite Bedinungen "intRow kleiner als 1000". Aber da das Eingabeformular hier den "kleiner als" Operator nicht zulässt hab ich <> geschrieben

  

Betrifft: And nicht Or ! o.T. von: Sepp
Geschrieben am: 16.09.2017 19:05:39

Gruß Sepp



  

Betrifft: AW: While-Schleife mit Or-Operator von: Daniel
Geschrieben am: 17.09.2017 19:12:32

HI

ich geh mal davon aus, dass du in der Spalte A die Kundennummer suchst, aber nicht weiter als Zeile 1000 suchen willst.

das geht auf viele Arten, und deine ist die schlechteste, denn

eine Logik-Verknüpfung mit <> bzw NICHT sind immer etwas tricky.

einfacher wirds, wenn man die Logik nicht negativ (<>) sondern postiv aufbaut (=), in dem du DO UNTIL verwendest:

Do Until Cells(intRow, 1).Value = Kunde_Auftragsnummer Or intRow = 1000
intRow = intRow + 1
Loop



Besser wäre jedoch die For-Next-Schleife mit abruch, damit ersparst du dir nämlich das Hochzählen des Schleifenzählers:
For i = 3 to 1000
    if Cells(intRow, 1).Value = Kunde_Auftragsnummer then Exit For 
Next

oder du nimmst die VBA-Funktionen .FIND bzw Worksheetfunction.Match um den Wert zu finden, dann brauchst du keine Schleife in deinem Code (die Schleife läuft dann VBA-Intern)
Dim Zelle as range
set Zelle = range("A3:A1000").find(what:=Kunde_Auftragsnummer, lookat:=xlwhole, lookin:= _
xlvalues)
If not Zelle is Nothing then i = Zelle.Row
Gruß Daniel


  

Betrifft: AW: While-Schleife mit Or-Operator von: Gerd L
Geschrieben am: 17.09.2017 20:04:55

Hallo Falko!

Dim Zeile As Long
Zeile = 3
Do While Zeile < 1000 And Cells(Zeile, 1).Value <> Kunde_Auftragsnummer
Zeile = Zeile + 1
Loop
Gruß Gerd