Problem mit einer Subroutine

peppey paloma

Grünschnabel
Hallo!

Ich bin ein ziemlicher VB-Anfänger und muss demnächst eine Studienarbeit (Visual Basic Programm) abgeben. Ich hab mir einen Promillerechner überlegt und ihn auch schon programmiert. Soweit funktioniert alles einwandfrei, solange der Benutzer alle Textboxeingaben "richtig" eintippt (also keine Buchstaben, keine Textbox unausgefüllt lassen etc.). Ein Kriterium dieser Studienarbeit ist allerdings, dass solche Falscheingaben nicht zum Absturz des Programms führen sollen.

Nun zu meinem konkreten Problem:

Ich will, dass nach Betätigung des Berechnungs-CommandButtons (bei ausgelassenen Textfeldern) eine MessageBox (Text:"Bitte alle Felder ausfüllen!) erscheint, die man mit OK wieder schließen kann, um dann mit der Eingabe der Textboxfelder fortfahren zu können. Dies klappt bei mir auch noch! Allerdings funktioniert dann die Berechnung oder nur die Ausgabe oder was weiß ich nicht mehr. Selbst wenn man gleich nach dem Starten des Programms alle Textfelder ordnungsgemäß ausfüllt, erscheint im Ausgabe-Label gar nix. Ich meine es liegt am "Exit Sub".
Setze ich im Quellcode einen Kommentar-Strich vor Exit Sub (==> 'Exit Sub), dann funktioniert bei richtiger Eingabe wieder alles einwandfrei. Bei Falscheingabe kommt zwar die beschriebene MessageBox, nach dem OK-Klick kommt aber logischerweise wieder eine Fehlermeldung, weil die Subroutine nicht beendet wurde.

O Gott, hoffentlich kapiert das hier einer, ich kapiers selber nicht mehr ganz:p :confused:

Hier der verantwortliche Teil des Quellcodes:

[...]
Private Sub cmd1_Click()

If Len(txt1.Text) = 0 Or Len(txt2.Text) = 0 Or Len(txt3.Text) = 0 Or Len(txt4.Text) = 0 Or Len(txt5.Text) = 0 Or Len(txt6.Text) = 0 Or Len(txt7.Text) = 0 Or Len(txt8.Text) = 0 Then MsgBox "Sie müssen alle Felder ausfüllen!", vbOKOnly + vbInformation
Exit Sub

[...]

Nochmal kurz das Problem:

ohne "Exit Sub" geht bei richtiger Eingabe das Programm, aber eine Neueingabe nach der MessageBox ist nicht möglich, da Fehlermeldung.

mit "Exit Sub" liefert das Programm keinen Ausgabewert (keine Ahnung, ob der überhaupt was rechnet). Allerdings kann man nach der MessageBox seine Angaben ohne Fehlermeldung ändern.

mein Tag wäre gerettet, wenn mir jemand von euch helfen könnte. Schon mal DANKE an den/die Helfer!

P.S.:mit Debuggen komm ich nicht weiter, das kann ich noch nicht:rolleyes:

Edit: Durch Rumknobeln bin ich zufälligerweise auf eine Lösung des Problems gekommen!
Hab ich mir hald den Tag selber retten müssen:-)
Der Thread kann guten Gewissens gelöscht werden!

Gruß
 
Zuletzt bearbeitet:
Des Rätsels lösung: du musst die "Exit Sub" Anweisung natürlich mit in den If-Block der MessageBox hineinnehmen:
Visual Basic:
 If Irgendwas Then
  MsgBox "Ungültige Eingabe!"
  Exit Sub
End If

Zum Debuggen: Drück einfach mal in der Entwicklungsumgebung F8 . Daraufhin sollte dein Programm starten, wobei jede Codeanweisung, die als nächstes ausgeführt wird, gelb angezeigt wird. Drückst du wieder F8, so wird diese Codezeile verarbeitet und es wird zur nächsten Zeile gesprungen. Dann wieder F8 drücken usw. Das ist schon mal ein guter Einstieg um den Debugger kennenzulernen.
 
@ Shakie: Vielen Dank! Ich finds toll, dass es Leute wie dich gibt, die einem so selbstlos weiterhelfen!

Hab meinen Quellcode gleich umgeschrieben!

Meine Lösung war nicht gerade "sauber" hat aber trotzdem erstaunlicherweise funktioniert...

Ich stehe mittlerweile kurz vor der Vollendung des Programms, allerdings häng ich an einer letzten kleinen Sache fest:

Ich will in jedem Textfeld keine Buchstaben, Sonderzeichen etc, zulassen (Das klappt mit folgendem Quellcode auch). Des Weiteren will ich im selben Programmschritt den Zahlenbereich eingrenzen (Bereich: 1<x<999), um keinen Überlauf zu riskieren und um keine negativen Werte zu erhalten. Und an dieser Stelle hakt es auch.
Wenn ich etwa 1000 eingebe, kommt wie erwartet die OKOnly-MessageBox. Ich klicke auf Ok und der Curser springt zurück ins Feld mit der fehlerhaften Eingabe. Aber anscheinend bleibt der alte (falsche) Wert im Speicher, da die Fehler-MessageBox auch nach Neueingabe eines zugelassenen Wertes immer wieder kommt.

Was kann ich tun, dass der neu eingegebene Wert erkannt wird?

Hier der dazugehörige Quellcode (nur für eine Textbox):

[...]

Private Sub txt1_LostFocus()

If (Len(txt1.Text) > 0 And (Not (IsNumeric(txt1.Text)))) Or nGewicht <= 0 Or nGewicht >= 1000 Then
MsgBox "Geben Sie bitte sinnvolle Werte an!", vbOKOnly + vbInformation
txt1.SetFocus
Exit Sub
End If

End Sub

[...]


Vielleicht kommt heut noch ne Antwort:)

Gruß
 
Hallo,

an welcher Stelle lädst Du den Wert für die Variable nGewicht ?

Da könnte das Problem liegen, da nGewicht nicht direkt in der LostFocus-Sub aktualisiert wird, und dadurch evnt. einen alten Wert enthält.

Probier's doch mal so:

Code:
Private Sub txt1_LostFocus()

  If (Len(txt1.Text) > 0 And (Not (IsNumeric(txt1.Text)))) Or clng(txt1.text) <= 0 Or clng(txt1.text) >= 1000 Then
    MsgBox "Geben Sie bitte sinnvolle Werte an!", vbOKOnly + vbInformation
    txt1.SetFocus
    Exit Sub
  End If

End Sub

Damit wird der aktuell in der Textbox stehende Wert abgeprüft.
 
Danke für die Antwort! Ich werds bei Gelegenheit mal ausprobieren.

Allerdings hab ich mittlerweile wieder durch Rumprobiern eine andere Lösung gefunden.
Ich sollte nächstes mal vielleicht etwas mit meinen Problemposts warten, weil ich ja eh selber draufkomm:-)

Es wird aber kein nächstes mal geben, weil ich jetzt fertig bin und alles so läuft, wie es soll;-)

Also danke nochmal!

Gruß
 
Zurück