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.

mit VBA nach MsgBox wieder ins Textfeld
#1
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.
Antwortento top
#2
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
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)
[-] Folgende(r) 1 Benutzer sagt Danke an RPP63 für diesen Beitrag:
  • ToXiC
Antwortento top
#3
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
Antwortento top
#4
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
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)
[-] Folgende(r) 1 Benutzer sagt Danke an RPP63 für diesen Beitrag:
  • ToXiC
Antwortento top
#5
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.
Antwortento top
#6
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
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
  • ToXiC
Antwortento top
#7
Vom Prinzip ja, aber der Cursor wechselt nicht zurück in das Textfeld.
Antwortento top
#8
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!
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)
[-] Folgende(r) 1 Benutzer sagt Danke an RPP63 für diesen Beitrag:
  • ToXiC
Antwortento top
#9
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.


Angehängte Dateien
.xlsm   Testdokument.xlsm (Größe: 88,89 KB / Downloads: 4)
Antwortento top
#10
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
[-] Folgende(r) 1 Benutzer sagt Danke an Kuwer für diesen Beitrag:
  • ToXiC
Antwortento top


Gehe zu:


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