Clever-Excel-Forum

Normale Version: mit VBA nach MsgBox wieder ins Textfeld
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo,

ich habe nun schon einige Seiten gegoogelt. Irgendwas mache ich falsch. Ich möchte lediglich, dass nach dem Bestätigen der MessageBox der Cursor zurück in das Textfeld springt. Ich weiß nicht wie.
Sendkeys möchte ich auch nicht nutzen, das macht nur Probleme.

Hier der Code:

Code:
Private Sub TextBox_Date_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If IsDate(TextBox_Date) Then
    TextBox_Date = Format(TextBox_Date, "DD.MM.YYYY")
    End If
        If Not TextBox_Date = "" Then
        If Not IsDate(TextBox_Date) Then
        TextBox_Date = ""
        MsgBox "Falsches Datumsformat eingegeben. Gültige Beispiele:" & Chr(13) & Chr(13) & "TT.MM.JJJJ | TT.MM.JJ | T.MM.JJJJ | T.M.JJ | TT-MM-JJJJ", vbOKOnly + vbExclamation, ""
        Cancel = True
        TextBox_Date.SetFocus
    End If
    End If
End Sub

Das Problem habe ich noch bei einem anderen Textfeld. Wie kann ich das denn realisieren?

PS: Cancel = True und SetFocus funktioniert beides nicht.

Dankeschön.
Moin!
Ich löse dies in einem meiner Projekte so:
(Ich nehme das Exit-Event)

Private Sub txtBeginn_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With txtBeginn
    If .Text = "" Then Exit Sub
    If IsDate(.Text) Then
        .Text = Format(.Text, "dd.mm.yyyy")
        Label2 = "Beginn:" & Chr(10) & Format(.Text, "DDDD")
    Else
        msgHilfeDatum
        .Text = ""
        Cancel = True
    End If
    If txtEnde <> "" And IsDate(txtEnde) Then
        lblTage.Caption = ABWTage(.Value, txtEnde.Value)
    End If
End With
End Sub


Wie Du siehst funktioniert dies durchaus mit Cancel = True

Gruß Ralf
Hi Ralf,
danke für die Antwort.

Mein Versuch das entsprechend umzusetzen scheitert.


Code:
Private Sub TextBox_Date_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      With TextBox_Date
      If .Text = "" Then Exit Sub
      If IsDate(.Text) Then
      .Text = Format(.Text, "dd.mm.yyyy")
      Else
      MsgBox "Falsches Datumsformat eingegeben. Gültige Beispiele:" & Chr(13) & Chr(13) & "TT.MM.JJJJ | TT.MM.JJ | T.MM.JJJJ | T.M.JJ | TT-MM-JJJJ", vbOKOnly + vbExclamation, ""
      .Text = ""
      Cancel = True
      End If
      End With
End Sub

Wüsste mit dem Label12 und dem folgenden Code-Ausschnitt nichts anzufangen. Ist das für die Funktion relevant? Mit dem geänderten Code oben ohne diese Schnipsel springt er nicht zurück auf das Textfeld....
Code:
    If txtEnde <> "" And IsDate(txtEnde) Then
        lblTage.Caption = ABWTage(.Value, txtEnde.Value)
    End If
Nun,
Ich habe der Einfachheit halber einen funktionierenden Code aus einem sehr umfangreichen Projekt kopiert und bin davon ausgegangen, dass Du ihn anpassen kannst.
Dies hast Du ja imo auch korrekt umgesetzt.
Wenn es dennoch nicht bei Dir funktioniert, wäre es an der Zeit, die Datei nebst Deinem geänderten Code hier hochzuladen.
Ich schaue dann gern genauer hin!

Gruß Ralf
Hi,

danke erstmal. Ich wusste nicht einmal, dass ich es richtig umgesetzt habe. Ich kann kein VBA und werde es auch nie lernen. Ich probiere einfach immer und füge die Schnipsel die ich finde irgendwie zusammen. Und dann google ich wenn etwas nicht geht. Nur hier kam ich nicht weiter. Hatte zuvor sendkeys verwendet und den Numlock-Bug. Nun wollte ich es anders lösen aber Cancel = True wollte dann wohl nicht.
Da meine Datei gegen jegliche VBA Standards verstößt, wie ich inzwischen weiß, möchte ich Dir diese peinliche Vorlage gerne ersparen und werde es dann eben so lassen.

Wäre nur schön, wenn der Cursor wieder in das Textfeld gesprungen wäre. Eigentlich muss ich für mich nur noch ein Problem lösen und dann habe ich auch keine Lust mehr.#

Vielleicht kannst Du da ja weiterhelfen. Ich habe nämlich keine Ahnung von Formeln in VBA. Grundsätzlich ist mein Ziel, dass ich nach dem Verlassen eines Textfeldes eine einfache Formel ausführen möchte, dessen Ergebnis in eine Zelle geschrieben wird:

Die eingegebene Zahl im Textfeld ist z.B. "2"
Die Formel ist "2"/100

und in der Zelle wird dann geschrieben: (Ergebnis)% (also 20%), jedes "2." Teil.

Also: 20%, jedes 2. Teil.
Das heißt das Ergebnis steht vorne, dahinter das % Zeichen und die 2 ist der Wert, der ja schon eingegeben wurde. Ich kann es nicht besser erklären und bin eh gerade zu müde. Ich werde aber am Wochenende mal googlen, wie das mit diesen Strings mit Formeln geht Big Grin.
Hallöchen,

im Prinzip was in der Art:

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
  If .Text = "" Then Exit Sub
  If IsDate(.Text) Then
    .Text = Format(.Text, "dd.mm.yyyy")
  Else
    MsgBox "Falsches Datumsformat eingegeben. Gültige Beispiele:" & Chr(13) & Chr(13) & "TT.MM.JJJJ | TT.MM.JJ | T.MM.JJJJ | T.M.JJ | TT-MM-JJJJ", vbOKOnly + vbExclamation, ""
    .Text = ""
    Cancel = True
  End If
  .SetFocus
End With
End Sub
Vom Prinzip ja, aber der Cursor wechselt nicht zurück in das Textfeld.
Bei mir schon.
Ansonsten hätte ich hier ja nicht geantwortet.

Außerdem brauchst Du Dich nun wirklich nicht zieren, die Datei hochzuladen.
Keine Bange, hier wirst Du nicht kritisiert, sondern hier wird Dir geholfen!
Guten Abend,

ich habe heute ein wenig mit dem Dokument gespielt. Habe eine Userform für Prüfmerkmale neu aufgebaut, dabei habe ich mir aber eine Funktion beim Anlegen eines Merkmals zerschossen.
Bzw. jetzt habe ich mir einen neuen Fehler eingebaut. Naja, macht zwar Spaß, aber ich bin so platt. Da ich so nett behandelt wurde, werde ich das Dokument trotzdem hochladen, da ja auch der Fokus-Fehler noch vorliegt.
Hallo,

es sieht so aus, dass das UserForm1 eine Macke hat. Derselbe Code in einem neuen UF in derselben Datei funktioniert wie gewünscht.

Gruß Uwe
Seiten: 1 2 3