Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1848to1852
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

Schleife - For Next ?

Schleife - For Next ?
29.09.2021 17:20:51
Dieter
Hey all,
In meinem unten stehen Code geht es darum 2 Textboxen in einer User form zu überprüfen ob leer sind.
Wenn leer, Code ausführen und danach Abfrage ob noch mehr umgewandelt werden soll habe ich, aber nach der Abfrage nix mehr umwandeln,
soll er User form schließen. Klappt nicht
bei Ja Textboxen leeren und Textbox1 aktivieren.
Hab einiges versucht und auch gesucht, aber leider nix passendes gefunden.
Bin für jede Hilfe dankbar.

Private Sub CommandButton1_Click()
If Me.TextBox1  "" Then
loStart = CLng(Me.TextBox1)
If Me.TextBox2  "" Then
loBis = CLng(Me.TextBox2)
Call umwandeln
End If
Else
loStart = 0: loBis = 0
End If
If TextBox1.Text = "" Or TextBox2.Text = "" Then
MsgBox ("Eingaben fehlen!")
End If
Da muss doch bestimmt was geändert werden ?
If MsgBox(prompt:=" Noch mehr umwandeln ? ", Buttons:=vbYesNo + vbQuestion _
) = vbYes Then TextBox1.SetFocus
TextBox1.Value = ""     ' Textbox leeren
TextBox2.Value = ""     ' Textbox leeren"
Exit Sub
'    UserForm5.Hide
End Sub
Schon mal Danke im Vorraus
Mfg.
Dieter

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife - For Next ?
29.09.2021 19:09:46
Oberschlumpf
Hi Dieter,
a) was ich nicht verstehe:
Zitat: Wenn leer, Code ausführen und danach Abfrage ob noch mehr umgewandelt werden soll habe ich, aber nach der Abfrage nix mehr umwandeln, soll er User form schließen.
Wieso bauste ne Abfrage mit Ja/Nein-Auswahl ein, wenn doch gar nix mehr umgewandelt werden soll?
Und für Userform schließen wäre der richtige Code

Unload UserForm5
Mit .Hide blendest du das Userform nur aus, es wird aber nicht geschlossen.
b) zeig bitte mal ne Bsp-Datei mit Bsp-Daten, Userform und deinem Code.
Ciao
Thorsten
Anzeige
AW: Schleife - For Next ?
29.09.2021 19:13:02
Rolf
Hallo Dieter,
vermutlich so?
If MsgBox(prompt:=" Noch mehr umwandeln ? ", Buttons:=vbYesNo + vbQuestion) = vbYes Then
textBox1.SetFocus
textBox1.Value = "" ' Textbox leeren
TextBox2.Value = "" ' Textbox leeren"
Else
UserForm5.Hide
End If
Gruß Rolf
AW: Schleife - For Next ?
29.09.2021 19:16:24
Yal
Hallo Dieter,
achte unbedingt auf das Einrücken. So vermeidest Du viele Fehler.
Ich bin mir nicht ganz sicher, dass ich erfasst habe, was Du richtig willst.
Wenn Du zuerst Me.TextBox1 = "" Or Me.TextBox2 = "" prüfst, dann brauchst Du keine zusätzliche Prüfung.

Private Sub CommandButton1_Click()
lostart = CLng(Me.TextBox1)
lobis = CLng(Me.TextBox2)
If Me.TextBox1 = "" Or Me.TextBox2 = "" Then
MsgBox ("Eingaben fehlen!")
Else
Call umwandeln
If MsgBox("Noch mehr umwandeln?", vbYesNo + vbQuestion) = vbYes Then
TextBox1.SetFocus
TextBox1.Value = ""     ' Textbox leeren
TextBox2.Value = ""     ' Textbox leeren"
End If
'       UserForm5.Hide
End If
End Sub
Ein "If ... Then ... " hat entweder eine einzige Anweisung auf dieselbe Zeile, dann ist es abgeschlossen,
oder mehreren Anweisungen oder einen "Else", dann müssen alle auf separaten Zeilen und es muss einen "End If" geben.
In deiner Ursprungsversion ist nach dem "SetFocus" Schluss mit der If-Abzweigung. Der Rest wird immer gemacht.
VG
Yal
Anzeige
Du machst schon in der 1. Zeile einen Fehler!
29.09.2021 19:24:01
Matthias
Hallo,

lostart = CLng(Me.TextBox1)
wenn dort keine GanzZahl steht, sondern Text (Textbox!) fällst Du schon auf die Nase!
Gruß Matthias
AW: Du machst schon in der 1. Zeile einen Fehler!
29.09.2021 23:49:28
Dieter
Hey all,
Erst mal danke für alle Ausführungen.
Denke mal habe mich einige missverstanden was ich meinte oder möchte.
Hier mal eine Datei.
https://www.herber.de/bbs/user/148354.xlsm
Hoffe mal mit der Datei kommt ein bisschen Klarheit.
Mfg.
Dieter
AW: Schleife - For next ?
29.09.2021 23:52:00
Dieter
Hey all,
Erst mal danke für alle Ausführungen.
Denke mal habe mich einige missverstanden was ich meinte oder möchte.
Hier mal eine Datei.
https://www.herber.de/bbs/user/148354.xlsm
Hoffe mal mit der Datei kommt ein bisschen Klarheit.
Mfg.
Dieter
Anzeige
AW: Schleife - For Next ?
30.09.2021 09:43:10
Daniel
Hi
Probiers mal so

Private Sub CommandButton1_Click()
loStart = Val(Me.TextBox1)
loBis = Val(Me.TextBox2)
If loBis > 0 And loStart > 0 then
Call umwandeln
Else
MsgBox ("Eingaben fehlen!")
End If
Select case MsgBox(prompt:=" Noch mehr umwandeln ? ", Buttons:=vbYesNo + vbQuestion)
Case vbYes
TextBox1.Value = ""     ' Textbox leeren
TextBox2.Value = ""     ' Textbox leeren
TextBox1.SetFocus
Case Else
Me.hide
End Select
End Sub

Mit dem Aufbau von If-Blöcken musst du dich noch ein bisschen beschäftigen.
Beachte: wenn du nach Then direkt weiterschreibst, musst du den gesamten Ifblock auch in dieser Zeile beenden. Das macht man nur, wenn nach dem If nur noch ein einziger Befehl folgt und es keinen Else-Teil gibt.
Gruß Daniel
Anzeige
AW: Schleife - For Next ?
30.09.2021 11:30:23
Dieter
Hey Daniel,
Danke für Deinen Versuch, aber vom Prinzip macht Dein Code das selbe wie meiner nur er ist kürzer.
Nach der Anweisung,

MsgBox ("Eingaben fehlen!")
End If
 '   Hier muss der Code von neuem starten
Select case MsgBox(prompt:=" Noch mehr umwandeln ? ", Buttons:=vbYesNo + vbQuestion)
Case vbYes
Eingaben fehlen, soll der Code von vorne starten und nicht direkt die Anweisung kommen Noch mehr umwandeln
Habe doch Beispieldatei hochgeladen, da kannst Du das auch sehen was ich meine.
Ist kein Vorwurf
Bin ja jeglicher Hilfe von dir und anderen Dankbar.
Gruß
Dieter
Anzeige
AW: Schleife - For Next ?
30.09.2021 11:36:39
Rolf
Hallo Dieter,
probiere mal

Private Sub CommandButton1_Click()
If TextBox1.Text = "" Or TextBox2.Text = "" Then
MsgBox ("Eingaben fehlen!")
TextBox1.SetFocus
Exit Sub
Else
loStart = CLng(Me.TextBox1)
loBis = CLng(Me.TextBox2)
Call umwandeln
End If
TextBox1.Value = "" ' Textbox leeren
TextBox2.Value = "" ' Textbox leeren"
If MsgBox(prompt:=" Noch mehr umwandeln ? ", Buttons:=vbYesNo + vbQuestion) = vbYes Then
TextBox1.SetFocus
Else
loStart = 0: loBis = 0
Unload UserForm1
End If
End Sub
und für das Umwandeln:

Public Sub umwandeln()
Dim rng As Range
Application.ScreenUpdating = False
For Each rng In Range("A" & loStart & ":A" & loBis)
rng = DateValue(rng.Text)
Next
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Schleife - For Next ?
30.09.2021 11:41:08
Daniel
ja, in dem Fall verschiebst du den ganzen Select Case-Block (also von Select Case bis End Select) in den Wahrteil des ersten IF-Blocks (dh du fügst das ganze nach dem Call umwandeln ein.

Private Sub CommandButton1_Click()
loStart = Val(Me.TextBox1)
loBis = Val(Me.TextBox2)
If loBis > 0 And loStart > 0 then
Call umwandeln
Select case MsgBox(prompt:=" Noch mehr umwandeln ? ", Buttons:=vbYesNo + vbQuestion)
Case vbYes
TextBox1.Value = ""     ' Textbox leeren
TextBox2.Value = ""     ' Textbox leeren
TextBox1.SetFocus
Case Else
Me.hide
End Select
Else
MsgBox ("Eingaben fehlen!")
End If
End Sub
Irgendwas "von neuem gestartet" werden brauchst du nicht.
du musst ja auf jeden Fall erstmal die neue Eingabe vom Anwender abwarten und dazu reicht es aus, in der Userform zu bleiben, dh diese nicht zu beenden(Unload Me) oder auszublenden (Me.Hide)
Gruß Daniel
Anzeige
AW: Schleife - For Next ?
30.09.2021 14:20:11
Dieter
Hey Rolf und Daniel,
Beide Codes funktionieren prima, werde sie mal in unterschiedlich Mappen einsetzen für eine genauere Durchführung.
Dafür erst mal ein ganz herzlichen Dank an euch Beiden.
Vielleicht noch eine ganze Kleinigkeit hätte ich wenn es nicht zu viel Arbeit macht,
und zwar das die TextBox direkt angesprochen wird wo die Eingabe fehlt.
Bitte nur wenn es nicht zu viel Arbeit macht für Euch.
Gruß
Dieter
AW: Schleife - For Next ?
30.09.2021 15:02:20
Daniel
Was meinst du mit "direkt angesprochen?"
Vermutlich den Text in der Messagebox.
Du kannst doch mit If abfragen, welche der beiden Variablen loStart und loBis = 0 ist und dann den entsprechenden Text ausgeben.
Wie man If-Blöcke aufbaut, hast du jetzt gesehen.
Gruß Daniel
Anzeige
AW: Schleife - For Next ?
30.09.2021 23:03:11
Dieter
Hey Daniel,
Mit dem Ansprechen meinte ich das die TextBox den Cursor erhält wo die Eingabe fehlt.
ich habe das so gemacht

loStart = Val(Me.TextBox1)
loBis = Val(Me.TextBox2)
If loBis > 0 And loStart > 0 Then
If TextBox1 = "" Then TextBox1.SetFocus   ' neu
If TextBox2 = "" Then TextBox2.SetFocus   ' neu
Call umwandeln

meinst Du das so ? das funktioniert nur leider nicht.
Gruß
Dieter
AW: Schleife - For Next ?
01.10.2021 02:10:54
Daniel
Das kann auch nicht funktionieren.
Das makro umwandeln wird ausgeführt, wenn beide Textboxen ausgefüllt sind.
Auf welche willst du dann den Focus setzten?
Das muss doch nur dann passieren, wenn nicht beide Textboxen befüllt sind und die entsprechende Messagebox ausgegeben wird.
Denk doch bitte mal ein bisschen mit!
Ist ja echt Kindergarten hier.
Anzeige
AW: Schleife - For Next ?
01.10.2021 03:01:26
Oberschlumpf
...und du bist das Alpha-Männchen?....im Kindergarten?...oder wie?!^^
Daniel, ich weiß, du schaffst das! - auch du kannst n bisschn freundlicher antworten....Daumen hoch!
AW: Schleife - For Next ?
01.10.2021 08:19:33
Daniel
Können schon, wollen nein, wenn der Fragesteller plötzlich Sachen falsch macht, die er, nachdem was er schon gezeigt hat, eigentlich können müsste, oder wenn es um Sachen geht, die weniger mit Wissen sondern mehr mit einfachem Nachdenken zu tun haben.
Gruß Daniel
AW: Schleife - For Next ?
01.10.2021 03:07:50
Oberschlumpf
Hi Dieter,
Daniel hat zwar recht (aber das geht auch freundlicher)...also...
die Zeile
If loBis > 0 And loStart > 0 Then
ist nur WAHR, wenn loBis UND! loStart einen Wert größer 0 enthalten.
Da ist es dann unnötig, mit...
If TextBox1 = "" Then TextBox1.SetFocus ' neu
If TextBox2 = "" Then TextBox2.SetFocus ' neu
...weiterzumachen, weil doch loBis UND auch loStart schon einen Wert größer 0 erhalten haben.
Änder deinen Code mal so um:

loStart = Val(Me.TextBox1)
loBis = Val(Me.TextBox2)
If loBis > 0 And loStart > 0 Then
Call umwandeln
Else
If TextBox1 = "" Then TextBox1.SetFocus   ' neu
If TextBox2 = "" Then TextBox2.SetFocus   ' neu
Exit Sub 'ob du Exit Sub brauchst, musst du selbst entscheiden
End If
Hilfts?
Ciao
Thorsten
AW: Schleife - For Next ?
01.10.2021 10:06:17
Yal
Moin zusammen,
Ja zu den Vorschlag von Thorsten. Ich hatte es bereit erwähnt:
"Wenn Du zuerst Me.TextBox1 = "" Or Me.TextBox2 = "" prüfst, dann brauchst Du keine zusätzliche Prüfung."
(Beachten, dass hier ein Oder auf die Gleicheit steht, was das gleich ist, wie ein Und auf die Ungleichheit bedeutet)
@Dieter:
Ein "nochmal machen" geht nicht: der Anwender muss Daten erneut eingeben und dann selber Command1 betätigen. Bei deinem Vorschalg läuft das Makro in endlose Schleife: es gibt die Hand nicht mehr ab und eine Eingabe ist nicht möglich.
Das einzige, was hier erreicht werden kann, ist Formular schliessen oder nicht. Dass dies eine Unterbrechung mit "Wollen Sie weitermachen" begründet, muss Du selber beurteilen. Dein Formular müsste auf alle Fälle ein Knopf "Abbrechen" bereitstellen.
@Alle:
Egal wie gut der Fragesteller sich in Excel/VBA einstuft, Frage stellen ist auch eine Aufgabe, die Erfahrung verlangt. Also im Zweifeln im Sinne der Fragenden.
VG
Yal
AW: Schleife - For Next ? erledigt !!!
01.10.2021 11:12:40
Dieter
Hey an Alle die sich hier mit beschäftigt haben.
Es tut mir leid wenn ich jetzt eine Diskussion ausgerufen habe, war nicht meine Absicht.
Da ich grade mal Zeit habe von Arbeit her, versuche ich einige Tabellen zu verändern, Verschönern. sind bestimmt zu viele. LOL
und dabei sehe ich den Baum vor lauter Wälder nicht.
Ihr habt alle recht, wenn ich jetzt mal in Ruhe überlege.
Der Code funktioniert doch auch prima, war von mir blöde Überlegung und Fragestellung.
So jetzt bitte alle wieder runter kommen.
Werde versuchen mich zu bessern.
Trotzdem an ALLE vielen vielen lieben Dank für eurer Mithilfe und Aussagen diesbezüglich.
Lieben Gruß an alle
Dieter
Dieter, wenn erledigt, wieso...
01.10.2021 11:16:13
Oberschlumpf
...setzt du dann den Haken bei "Aktiviere das Kontrollkästchen..." ?
AW: Dieter, wenn erledigt, wieso...
01.10.2021 11:39:34
Daniel
Einfach mal 'nen Haken setzten ohne zu lesen was direkt daneben steht...
Ich hoffe du kannst jetzt etwas besser nachvollziehen, warum ich manchmal so antworte wie hier.
AW: Dieter, wenn erledigt, wieso...
01.10.2021 11:48:13
Oberschlumpf
das konnte ich auch vorher schon nachvollziehen - ich war leider selbst so arrogant...ne Zeit lang....aber dann fiel mir wieder ein, dass auch ich mit allem "klein" anfing, keine Ahnung hatte...auch nich von dem, was für die "Besseren" klar wie Kloßbrühe war - und ich bin sicher: auch du warst mal "ganz klein"
AW: Dieter, wenn erledigt, wieso...
01.10.2021 12:20:53
Daniel
Naja, mit "klein anfangen" hab ich normalerweise kein Problem.
Mich nervt es eher, wenn der Fragesteller an Aufgaben scheitert, die er, nachdem was er selbst schon an können gezeigt hat (unabhängig von seiner Einstufung), eigentlich beherrschen müsste, oder wenn es Fragen sind, bei denen es weniger um erlerntes Können, sondern einfach um den gesunden Menschenverstand geht.
Immer dann, wenn ich das Gefühl habe, dass der Fragesteller zu faul ist, selber zu denken, gibts ne klare Ansage.
Dass man da mit seiner Einschätzung auch mal daneben liegen kann oder je nach persönlicher Tagesform auch mal unterschiedlich reagiert, ist doch menschlich.
Lernen im Forum ist die harte Tour und kein Ponyschlecken oder Zuckerhof.
Gruß Daniel
AW: Dieter, wenn erledigt, wieso...
01.10.2021 17:40:49
Dieter
Hey All.
Ist doch gut jetzt. warum weshalb usw.
Thema erledigt. jeder hat was dazu gelernt und jetzt jeder wieder runter kommen.
Haken im Eifer des Gefechtes gesetzt. Man Man dafür noch schreiben, kann schon irre sein hier.
Nochmals Danke an alle, und kein Haken gesetzt. LOL
Gruß Dieter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige