Office: Do While mit zwei Bedingungen

Helfe beim Thema Do While mit zwei Bedingungen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, wie muss folgender Code geändert werden, damit er bei der zweiten Bedingung nur Werte zulässt, die ein Nein in der jeweiligen Zelle haben? Do... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von olerostock, 21. Juli 2014.

  1. Do While mit zwei Bedingungen


    Hallo, wie muss folgender Code geändert werden, damit er bei der zweiten Bedingung nur Werte zulässt, die ein Nein in der jeweiligen Zelle haben?

    Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) ""And Trim(CStr(Tabelle1.Cells(lZeile, 39).Value)) = "Nein" ""

    Wenn ich total verkehrt liege, dann immer raus mit der Sprache.

    Danke
    Olerostock

    :)
     
    olerostock, 21. Juli 2014
    #1
  2. Hallo,

    ich vermute, dass nur der letzte Teil "" zu viel ist:
    Code:
    Geht es so?

    VG
     
    Mc Santa, 23. Juli 2014
    #2
  3. Hallo Mc Santa,

    nein. So funktioniert es nicht. Jetzt zeigt er keine Werte an. Die Schleife besagt doch, dass er überprüfen soll, ob in Tabelle1 die Werte aus den Zeilen holen soll, wo in Spalte 2 etwas steht. Nun wollte ich als Zusatzbedingung die Spalte 39 nehmen, wo ein Nein stehen muss.

    Gruß Olerostock
     
    olerostock, 23. Juli 2014
    #3
  4. Do While mit zwei Bedingungen

    Hallo,

    ich sehe den Fehler auf anhieb nicht, hast du eine kleine Beispieltabelle?

    VG
     
    Mc Santa, 23. Juli 2014
    #4
  5. Hallo,

    da man nur einen Teil des Schleifen-Codes sieht, kann man nur spekulieren, zB
    - du startest mit einem Wert x in iZeile, den du dann in der Schleife veränderst
    - ist beim ersten Wert die Bedingung jedoch nicht erfüllt, ist die Schleife zu Ende

    Gruß
    Aloys
     
    aloys78, 23. Juli 2014
    #5
  6. Hallo,

    hier ist die Schleife mal eingearbeitet.

    Private Sub CommandButton1_Click()
    Dim lZeile As Long


    lZeile = 2

    Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) "" And Trim(CStr(Tabelle1.Cells(lZeile, 39).Value)) = "Nein"
    lZeile = lZeile + 1 'Naechste Zeile bearbeiten
    Loop


    Tabelle1.Cells(lZeile, 2) = CStr("Neuer Eintrag Zeile " & lZeile)
    Tabelle1.Cells(lZeile, 6) = Tabelle3.Cells(21, 1)
    Tabelle1.Cells(lZeile, 7) = Tabelle3.Cells(20, 1)
    Tabelle1.Cells(lZeile, 43) = Tabelle3.Cells(21, 1)
    Tabelle1.Cells(lZeile, 44) = Tabelle3.Cells(20, 1)

    ListBox1.AddItem CStr("Neuer Eintrag Zeile " & lZeile)

    ListBox1.ListIndex = ListBox1.ListCount - 1

    End Sub
     
    olerostock, 23. Juli 2014
    #6
  7. Hallo,

    bitte beschreiben einmal, was eigentlich passieren sollte.

    Der Code macht folgendes.
    Er startet in Zeile 2. Solange in Spalte 2 etwas steht Und in Spalte 39 ein "Nein" steht, verschiebt sich die Zeile eins nach unten.
    Steht irgendwann mal nichts in Spalte 2 oder es steht nicht "Nein" in Spalte 39 (im Zeifel also schon in Zeile 2), dann werden eine Reihe von Werten aus Tabelle 3 in Tabelle1 kopiert. (Anmerkung: vermutlich soll das umgekehrt geschehen??)
    Und die Listbox wird um einen Eintrag ergänzt.

    VG
     
    Mc Santa, 23. Juli 2014
    #7
  8. Do While mit zwei Bedingungen

    Hallo Mc Santa,

    er soll starten in Zeile 2 und dort suchen, bis er in Spalte 2 einen Eintrag findet. Dann soll er noch weiter suchen in Spalte 39 ob dort ein Nein steht. Wenn beide Bedingungen erfüllt sind, soll er die Werte aus Spalte 2 in eine ListBox schreiben.

    Wenn ich folgende Bedingung nehme:
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) "" And Trim(CStr(Tabelle1.Cells(lZeile, 39).Value)) = ""

    Dann gibt er mir auch bloß die Werte wieder, wo in beiden Zellen etwas steht.
    Wir können ja auch dass Nein weglassen und die Bedingung für Spalte 39 auf ist Leer setzen. Doch da weis ich nicht, was ich hinter
    And Trim(CStr(Tabelle1.Cells(lZeile, 39).Value)) eintragen soll.

    Danke schon mal.

    Gruß Olerostock
     
    olerostock, 23. Juli 2014
    #8
  9. Hallo,

    ich denke die Bedingung müsste dann so lauten?
    Code:
     
    Mc Santa, 23. Juli 2014
    #9
  10. Hallo Mc Santa,
    funktioniert leider nicht.

    Hier mal der gesammte Code:

    Option Explicit


    Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(TextBox6) Then
    TextBox6 = ""
    Cancel = True
    End If
    End Sub

    Private Sub TextBox6_AfterUpdate()
    If IsDate(TextBox6) Then TextBox6 = Format(TextBox6, "TT.MM.JJJJ")
    End Sub


    Private Sub CommandButton1_Click()
    Dim lZeile As Long


    lZeile = 2

    Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) ""
    lZeile = lZeile + 1
    Loop

    'Nach Durchlauf dieser Schleife steht lZeile in der ersten leeren Zeile von Tabelle1
    'Neuen Eintrag in die Tabelle1 schreiben, Ort - Spalte muss gefuellt sein, damit
    'unsere Routinen die Zeile wiederfinden!
    Tabelle1.Cells(lZeile, 2) = CStr("Neuer Eintrag Zeile " & lZeile)
    Tabelle1.Cells(lZeile, 6) = Tabelle3.Cells(21, 1)
    Tabelle1.Cells(lZeile, 7) = Tabelle3.Cells(20, 1)
    Tabelle1.Cells(lZeile, 43) = Tabelle3.Cells(21, 1)
    Tabelle1.Cells(lZeile, 44) = Tabelle3.Cells(20, 1)

    'Und neuen Eintrag in die UserForm eintragen
    ListBox1.AddItem CStr("Neuer Eintrag Zeile " & lZeile)

    'Den neuen Eintrag markieren mit Hilfe des ListIndexes
    ListBox1.ListIndex = ListBox1.ListCount - 1
    'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen

    End Sub


    'Speichern Schaltflaeche Ereignisroutine
    Private Sub CommandButton2_Click()
    Dim lZeile As Long

    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
    If ListBox1.ListIndex = -1 Then Exit Sub

    'Wir muessen pruefen, ob die Spalte Ort auch gefuellt ist!!
    If Trim(CStr(TextBox2.Text)) = "" Then
    'Meldung ausgeben
    MsgBox "Sie muessen mindestens einen Ort eingeben!", vbCritical + vbOKOnly, "FEHLER!"
    'Abbrechen der Speicherroutine
    Exit Sub
    End If
    'Ausbauoption: Pruefen, ob der Ort in Tabelle1 Spalte 2 schon vorhanden ist!

    'Zum Speichern benoetigen wir die Zeilennummer des ausgewaehlten Datensatzes
    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Ueberschriften
    'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) ""

    'Datensatz Spalte Ort mit selektiertem Eintrag der ListBox vergleichen
    If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) Then

    'Eintrag gefunden, TextBoxen in die Zellen schreiben
    Tabelle1.Cells(lZeile, 1).Value = Trim(CStr(TextBox1.Text))
    Tabelle1.Cells(lZeile, 2).Value = TextBox2.Text
    Tabelle1.Cells(lZeile, 3).Value = TextBox3.Text
    Tabelle1.Cells(lZeile, 4).Value = TextBox4.Text
    Tabelle1.Cells(lZeile, 5).Value = TextBox5.Text
    Tabelle1.Cells(lZeile, 6).Value = TextBox6.Value
    Tabelle1.Cells(lZeile, 7).Value = TextBox7.Text
    Tabelle1.Cells(lZeile, 8).Value = TextBox8.Text
    Tabelle1.Cells(lZeile, 9).Value = TextBox9.Text
    Tabelle1.Cells(lZeile, 10).Value = TextBox10.Text
    Tabelle1.Cells(lZeile, 11).Value = TextBox11.Text
    Tabelle1.Cells(lZeile, 12).Value = TextBox12.Text
    Tabelle1.Cells(lZeile, 13).Value = TextBox13.Text
    Tabelle1.Cells(lZeile, 14).Value = TextBox14.Text
    Tabelle1.Cells(lZeile, 15).Value = TextBox15.Text
    Tabelle1.Cells(lZeile, 16).Value = TextBox16.Text
    Tabelle1.Cells(lZeile, 17).Value = TextBox17.Text
    Tabelle1.Cells(lZeile, 18).Value = TextBox18.Text
    Tabelle1.Cells(lZeile, 19).Value = TextBox19.Text
    Tabelle1.Cells(lZeile, 20).Value = TextBox20.Text
    Tabelle1.Cells(lZeile, 21).Value = TextBox21.Text
    Tabelle1.Cells(lZeile, 22).Value = TextBox22.Text
    Tabelle1.Cells(lZeile, 23).Value = TextBox23.Text
    Tabelle1.Cells(lZeile, 24).Value = TextBox24.Text
    Tabelle1.Cells(lZeile, 25).Value = TextBox25.Text
    Tabelle1.Cells(lZeile, 26).Value = TextBox26.Text
    Tabelle1.Cells(lZeile, 27).Value = TextBox27.Text
    Tabelle1.Cells(lZeile, 28).Value = TextBox28.Text
    Tabelle1.Cells(lZeile, 29).Value = TextBox29.Text
    Tabelle1.Cells(lZeile, 30).Value = TextBox30.Text
    Tabelle1.Cells(lZeile, 31).Value = TextBox31.Text
    Tabelle1.Cells(lZeile, 32).Value = TextBox32.Text
    Tabelle1.Cells(lZeile, 33).Value = TextBox33.Text
    Tabelle1.Cells(lZeile, 34).Value = TextBox34.Text
    Tabelle1.Cells(lZeile, 35).Value = TextBox35.Text
    Tabelle1.Cells(lZeile, 36).Value = TextBox36.Text
    Tabelle1.Cells(lZeile, 37).Value = TextBox37.Text
    Tabelle1.Cells(lZeile, 38).Value = TextBox38.Text
    Tabelle1.Cells(lZeile, 39).Value = TextBox39.Text
    Tabelle1.Cells(lZeile, 40).Value = TextBox40.Text
    Tabelle1.Cells(lZeile, 41).Value = TextBox41.Text
    Tabelle1.Cells(lZeile, 42).Value = TextBox45.Text
    Tabelle1.Cells(lZeile, 43).Value = TextBox43.Text
    Tabelle1.Cells(lZeile, 44).Value = TextBox44.Text

    'Die ListBox muss nun neu geladen werden
    'allerdings nur, wenn sich der Ort geaendert hat
    If ListBox1.Text Trim(CStr(TextBox2.Text)) Then
    Call UserForm_Initialize
    If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
    End If

    Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist

    End If

    lZeile = lZeile + 1 'Naechste Zeile bearbeiten
    Loop

    End Sub


    Private Sub CommandButton3_Click()
    Unload Me
    End Sub


    Private Sub Label3_Click()

    End Sub

    'Klick auf die ListBox Ereignisroutine
    Private Sub ListBox1_Click()
    Dim lZeile As Long
    'Wenn der Benutzer einen Ort anklickt, suchen wir
    'diese in der Tabelle1 heraus und tragen die Daten
    'in die TextBoxen ein.

    'Wir loeschen standardmaessig alle bisherigen TextBoxen-Inhalte
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    TextBox7 = ""
    TextBox8 = ""
    TextBox9 = ""
    TextBox10 = ""
    TextBox11 = ""
    TextBox12 = ""
    TextBox13 = ""
    TextBox14 = ""
    TextBox15 = ""
    TextBox16 = ""
    TextBox17 = ""
    TextBox18 = ""
    TextBox19 = ""
    TextBox20 = ""
    TextBox21 = ""
    TextBox22 = ""
    TextBox23 = ""
    TextBox24 = ""
    TextBox25 = ""
    TextBox26 = ""
    TextBox27 = ""
    TextBox28 = ""
    TextBox29 = ""
    TextBox30 = ""
    TextBox31 = ""
    TextBox32 = ""
    TextBox33 = ""
    TextBox34 = ""
    TextBox35 = ""
    TextBox36 = ""
    TextBox37 = ""
    TextBox38 = ""
    TextBox39 = ""
    TextBox40 = ""
    TextBox41 = ""
    TextBox45 = ""

    'Nur wenn ein Eintrag selektiert/markiert ist
    If ListBox1.ListIndex >= 0 Then

    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Ueberschriften
    'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) ""

    'Wenn wir den Ort aus der ListBox1 in der Tabelle1 Spalte 2
    'gefunden haben, uebertragen wir die anderen Spalteninhalte
    'in die TextBoxen!
    If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) Then

    'TextBoxen fuellen
    TextBox1 = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
    TextBox2 = Tabelle1.Cells(lZeile, 2).Value
    TextBox3 = Tabelle1.Cells(lZeile, 3).Value
    TextBox4 = Tabelle1.Cells(lZeile, 4).Value
    TextBox5 = Tabelle1.Cells(lZeile, 5).Value
    TextBox6 = Tabelle1.Cells(lZeile, 6).Value
    TextBox7 = Tabelle1.Cells(lZeile, 7).Value
    TextBox8 = Tabelle1.Cells(lZeile, 8).Value
    TextBox9 = Tabelle1.Cells(lZeile, 9).Value
    TextBox10 = Tabelle1.Cells(lZeile, 10).Value
    TextBox11 = Tabelle1.Cells(lZeile, 11).Value
    TextBox12 = Tabelle1.Cells(lZeile, 12).Value
    TextBox13 = Tabelle1.Cells(lZeile, 13).Value
    TextBox14 = Tabelle1.Cells(lZeile, 14).Value
    TextBox15 = Tabelle1.Cells(lZeile, 15).Value
    TextBox16 = Tabelle1.Cells(lZeile, 16).Value
    TextBox17 = Tabelle1.Cells(lZeile, 17).Value
    TextBox18 = Tabelle1.Cells(lZeile, 18).Value
    TextBox19 = Tabelle1.Cells(lZeile, 19).Value
    TextBox20 = Tabelle1.Cells(lZeile, 20).Value
    TextBox21 = Tabelle1.Cells(lZeile, 21).Value
    TextBox22 = Tabelle1.Cells(lZeile, 22).Value
    TextBox23 = Tabelle1.Cells(lZeile, 23).Value
    TextBox24 = Tabelle1.Cells(lZeile, 24).Value
    TextBox25 = Tabelle1.Cells(lZeile, 25).Value
    TextBox26 = Tabelle1.Cells(lZeile, 26).Value
    TextBox27 = Tabelle1.Cells(lZeile, 27).Value
    TextBox28 = Tabelle1.Cells(lZeile, 28).Value
    TextBox29 = Tabelle1.Cells(lZeile, 29).Value
    TextBox30 = Tabelle1.Cells(lZeile, 30).Value
    TextBox31 = Tabelle1.Cells(lZeile, 31).Value
    TextBox32 = Tabelle1.Cells(lZeile, 32).Value
    TextBox33 = Tabelle1.Cells(lZeile, 33).Value
    TextBox34 = Tabelle1.Cells(lZeile, 34).Value
    TextBox35 = Tabelle1.Cells(lZeile, 35).Value
    TextBox36 = Tabelle1.Cells(lZeile, 36).Value
    TextBox37 = Tabelle1.Cells(lZeile, 37).Value
    TextBox38 = Tabelle1.Cells(lZeile, 38).Value
    TextBox39 = Tabelle1.Cells(lZeile, 39).Value
    TextBox40 = Tabelle1.Cells(lZeile, 40).Value
    TextBox41 = Tabelle1.Cells(lZeile, 41).Value
    TextBox45 = Tabelle1.Cells(lZeile, 42).Value
    TextBox43 = Tabelle3.Cells(21, 1).Value
    TextBox44 = Tabelle3.Cells(20, 1).Value


    Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist

    End If

    lZeile = lZeile + 1 'Naechste Zeile bearbeiten

    Loop

    End If

    End Sub

    Private Sub UserForm_Activate()
    'Wenn die Eingabemaske angezeigt wird, markieren wir den ersten Ort
    'jedoch nur, wenn auch Eintraege in der Liste stehen
    If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
    End Sub


    'Startroutine, wird ausgefuehrt bevor die Eingabemaske angezeigt wird
    Private Sub UserForm_Initialize()
    Dim lZeile As Long

    'Alle TextBoxen leer machen
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    TextBox7 = ""
    TextBox8 = ""
    TextBox9 = ""
    TextBox10 = ""
    TextBox11 = ""
    TextBox12 = ""
    TextBox13 = ""
    TextBox14 = ""
    TextBox15 = ""
    TextBox16 = ""
    TextBox17 = ""
    TextBox18 = ""
    TextBox19 = ""
    TextBox20 = ""
    TextBox21 = ""
    TextBox22 = ""
    TextBox23 = ""
    TextBox24 = ""
    TextBox25 = ""
    TextBox26 = ""
    TextBox27 = ""
    TextBox28 = ""
    TextBox29 = ""
    TextBox30 = ""
    TextBox31 = ""
    TextBox32 = ""
    TextBox33 = ""
    TextBox34 = ""
    TextBox35 = ""
    TextBox36 = ""
    TextBox37 = ""
    TextBox38 = ""
    TextBox39 = ""
    TextBox40 = ""
    TextBox41 = ""
    TextBox45 = ""

    'In dieser Routine laden wir alle vorhandenen
    'Eintraege in die ListBox1
    ListBox1.Clear 'Zuerst einmal die Liste leeren

    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Ueberschriften
    'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) ""

    'Aktuelle Zeile in die ListBox eintragen
    ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 2).Value))

    lZeile = lZeile + 1 'Naechste Zeile bearbeiten

    Loop

    End Sub

    Private Sub ComboBox1_Change()
    TextBox5.Text = ComboBox1.Text
    End Sub

    Private Sub ComboBox2_Change()
    TextBox8.Text = ComboBox2.Text
    End Sub

    Private Sub ComboBox3_Change()
    TextBox24.Text = ComboBox3.Text
    End Sub
     
    olerostock, 23. Juli 2014
    #10
Thema:

Do While mit zwei Bedingungen

Die Seite wird geladen...
  1. Do While mit zwei Bedingungen - Similar Threads - While Bedingungen

  2. While-Schleife wird nicht beendet

    in Microsoft Access Hilfe
    While-Schleife wird nicht beendet: Hallo Forum Ein aus einem Unterformular soll in ein Feld im Hauptformular übernommen (fix abgespeichert) werden. Das Feld wurde nachträglich im Hauptformular (+ Tabelle) eingefügt. Nun habe ich...
  3. mehrere Do While Schleifen nacheinander

    in Microsoft Excel Hilfe
    mehrere Do While Schleifen nacheinander: Hallo zusammen, versuche mehrere Do While schleifen zum laufen zu bringen so schaut es aus: Private Sub UserForm_Activate() Dim dat As Date dat = Me.Label1.Caption sp = 1 Do While...
  4. Do While Loop Schleife

    in Microsoft Access Hilfe
    Do While Loop Schleife: Hallo zusammen, ich brauche Unterstützung bei der Entwicklung einer Schleife. In Access habe ich eine Datenbank welche Trainingspläne fürs Schwimmen speichert. Nun soll automatisch ein neuer...
  5. Unterschied WHILE/UNTIL bei DO...LOOP

    in Microsoft Access Hilfe
    Unterschied WHILE/UNTIL bei DO...LOOP: Hallo Forum. Auch wenn diese Frage vielleicht ein wenig "überflüssig" (Nach dem Motto: Warum ist die Banane krumm?) ist *Smilie , beschäftigt mich dieses Thema schon eine ganze Weile. 1) Ich...
  6. DO WHILE vs FOR Schleife

    in Microsoft Excel Hilfe
    DO WHILE vs FOR Schleife: Hallo, Ich habe ein größeres Makro mit einer Laufzeit von ca 5 Stunden. Dabei wird eine Tabelle mit bis zu 250000 Einträgen durchlaufen und die erste Spalte ist immer befüllt. Deshalb habe...
  7. Endlosschleife mit Do..While ??

    in Microsoft Excel Hilfe
    Endlosschleife mit Do..While ??: Hallo, ich möchte zwei Dateien mit einer Schleife in einem Makro öffnen. Ich erzeuge mir aber leider Endlosschleifen oder es wird nur eine Datei geöffnet. Hier mein Code: Sub dotest() Dim...
  8. Unterschied zwischen "while wend" & "Do w

    in Microsoft Excel Hilfe
    Unterschied zwischen "while wend" & "Do w: In meiner bisherigen Zeit habe ich beide Möglichkeiten schon erfolgreich verwendet, teilweise sogar beide in einem VBA Makro. Dadurch ist mir aufgefallen, das ich persönlich keine Unterschied...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden