Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA bei leerer Textbox1, Eingabe in Textbox2 wieder löschen
#1
Hallo Gemeinde,
ich bräuchte bitte wieder einmal euer Hilfe.

Ich habe eine UserForm mit der ich Berechnungen durchführe.
Das funktioniert soweit.
 
In TextBox1 (w5) und Textbox2 (x5) und eine Textbox3 (ab5)  für das Ergebnis.
 
 
Nun will ich mit einer MsgBox den "Debuggen Fehler" verhindern, falls die Textbox1 leer ist bzw. übersprungen wurde und nur in Textbox2 ein Wert geschrieben wurde.
 
 
ich dachte mir, dass der Eintrag in Textbox2  gelöscht wird und der Focus auf Textbox1 zur Eingabe geht.
 
und dann  erst wenn in beiden Boxen was drin steht, es mit der Rechnerei weiter geht.
 
so wäre einer meiner zig versuche die leider nicht funktionieren

Code:
Private Sub x5_Change()

If Range("w5").Text = "" Then
MsgBox "Eingabe fehlt? hier muss was eingegeben werden!"
ElseIf Range("x5").Text = "" Then
Range("x5").Text = ""  'ClearContents

With Me.w5
    .SetFocus
    .SelStart = 0
    .SelLength = Len("0")
End With
End If



If IsNumeric(x5.Text) Then
ab5.Text = Format((CDec(w5.Text) * CDec(x5.Text)), "0.00")


End If
Call rechne

End Sub

 leider finde ich nicht die passende Lösung und kann auch den Code nicht entsprechend umschreiben  Huh

Wäre schön, wenn mir jemand bei meinem Vorhaben helfen könnte ? 

Vielen Dank schon mal im voraus
Antworten Top
#2
Hallo,

warum sollen wir zum Testen eine Datei nachbauen, die du schon hast?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hallöchen,

warum prüfst Du das nicht einfach? Du kannst doch schon

If IsNumeric(x5.Text) Then

da solltest Du doch auch

If w2.Text = "" Then

beherrschen?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
Hallo,

wenn ich es wüsste wie es geht, würde ich nicht eure Zeit verschwenden.  Undecided

Danke  15
Antworten Top
#5
Moin!
Du solltest mal die Datei mit dem Userform hochladen.
Schließlich sind da so einige "Unklarheiten".

• Sicher, dass das _Change das richtige Ereignis ist? Schließlich reagiert es bei jedem Tastaturanschlag.
• Einerseits Range("W5"), andererseits Me.w5 … Beabsichtigt?
• If Range("w5").Text = "" Then … kann man machen, ich prüfe auf IsEmpty(Range("W5"))
• ElseIf Range("x5").Text = "" Then Range("x5").Text = "" … wenn leer dann leer?  21

Erster Lösungsvorschlag:
Nimm das _Exit(ByVal Cancel As MSForms.ReturnBoolean)-Event.
Prüfe die Bedingungen und setze Cancel = True, wenn sie nicht erfüllt sind.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
Servus Ralf,

Danke für deinen Tipp,
hab's leider nicht umsetzen können.

Ich hätte eine abgespeckte Datei beigefügt und hab meine Versuche wieder rausgelöscht, wäre super, wenn du dir
das mal kurz anschauen könntest
69

Meine Anweisung sollte quasi:
wenn in die erste TextBox (w5) übersprungen wurde und nur in die Box rechts daneben (x5) was rein kommt,
das es eben nicht zum "Debbuger" kommt sondern eine MsgBox "Eingabe fehlt"
und der Focus entweder auf die Zelle W5 fällt oder eben in Zelle (x5) auch leer wird, so das es eben nicht zur Fehlermeldung kommt.


sein:     



Vielen Dank


Angehängte Dateien
.xlsm   Test für If Meldung.xlsm (Größe: 23,9 KB / Downloads: 7)
Antworten Top
#7
moin,

hier mal für die Box w5

Code:
Private Sub w5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If IsNumeric(w5.Value) Then
        z5.Value = Format(CDbl(w5.Value) / CDbl(6), "0.00")
        Call rechne1
    Else
        MsgBox "Eingabe fehlt"
        Cancel = True
    End If
End Sub

mfg Tom
Antworten Top
#8
Servus Tom  ,

funktioniert nur teilweise aber trotzdem Danke.

es klappt soweit, das der "Debbuger" Fehler ausbleibt und der Hinweis der MsgBox.

Wenn ich die 1. Reihe eingegeben habe und die Userformmaske schließen will, kommt ebenfalls die Msg Box mit dem Hinweis,
dass in der TBox (w6) ebenfalls die Eingabe fehlt.



Private Sub w5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(w5.Value) Then
z5.Value = Format(CDbl(w5.Value) / CDbl(6), "0.00")
Call rechne1
Else
MsgBox "Eingabe fehlt"
Cancel = True
End If
End Sub


Private Sub w6_Exit(ByVal Cancel As MSForms.ReturnBoolean)

'Private Sub w6_Change()
If IsNumeric(w6.Text) Then
z6.Text = Format((CDec(w6.Text) / CDec(6)), "0.00")
Else
MsgBox "Eingabe fehlt"
Cancel = True

Call rechne1
End If

End Sub
Antworten Top
#9
Hi,

statt dem Exit Ereignis der Eingabefelder würde ich das Enter Ereignis des Ergebnisfeldes (im Beispiel txtResult) verwenden und darin die Gültigkeit der entsprechenden Felder prüfen:
Bsp.:

Code:
Private Sub txtResult_Enter()
Dim blnOK As Boolean
'entweder so, also alle gemeinsam prüfen
'blnOK = IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) And IsNumeric(TextBox3.Text)
'    If blnOK Then
'    txtResult = CDbl(TextBox1.Text) + CDbl(TextBox2.Text) + CDbl(TextBox3.Text)
'    Else
'        MsgBox "Angaben falsch oder unvollständig"
'    End If
   
'oder jede Box einzeln (empfohlen):
Dim ok1 As Boolean, ok2 As Boolean, ok3 As Boolean, objBox As Object

ok1 = IsNumeric(TextBox1.Text)
ok2 = IsNumeric(TextBox2.Text)
ok3 = IsNumeric(TextBox3.Text)
blnOK = ok1 And ok2 And ok3
    If blnOK Then
    txtResult = CDbl(TextBox1.Text) + CDbl(TextBox2.Text) + CDbl(TextBox3.Text)
    Else
        If Not ok1 Then
            Set objBox = Me.TextBox1
        ElseIf Not ok2 Then
            Set objBox = Me.TextBox2
        ElseIf Not ok3 Then
            Set objBox = Me.TextBox3
        End If
       
        MsgBox "Angaben in " & objBox.Name & " falsch oder unvollständig"
        objBox.SetFocus
        objBox.Text = ""
    End If
    Set objBox = Nothing
End Sub
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#10
Hallo Ralf

ähhhh wo ist die nächste Haltestelle ?  Huh

hab mal probiert, mit meinem unwissen das umzustellen auf meine Boxen.

siehe Bild
das wird nix.

Ich verstehe nicht wo ich was, wie einsetzen soll - geschweige den umschreiben auf meine Bedürfnisse.


Wie nennt man jemanden der mindestens 2 Stufen vom Anfänger entfernt ist ? Anwesender ? 20


Trotzdem vielen Dank


Angehängte Dateien Thumbnail(s)
   
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste