Ich habe ein Textfeld in einem Benutzerformular. Es ist die einzige Textbox auf dem Formular. Neben diesem Textfeld gibt es drei Beschriftungen und zwei Schaltflächen. Grundsätzlich möchte ich, dass der Fokus in allen Szenarios auf diesem Textfeld bleibt, außer in dem Moment, in dem einer der Knöpfe angeklickt wird, aber dann möchte ich, dass der Fokus direkt zum Textfeld zurückkehrt. Beide Schaltflächen haben "TakeFocusOnClick" und "TabStop" auf False festgelegt. Ich hatte Probleme, den Fokus auf die Textbox zu setzen, weshalb ich diese beiden Einstellungen geändert habe.Excel Benutzerformular Textfeld Verhalten
Sobald ich diese Einstellungen geändert habe, hat die Eingabetaste in der Textbox keinen Effekt mehr. Ich habe Ereignisse für _AfterUpdate und _KeyPress für das Textfeld geschrieben, aber sie werden nicht ausgelöst. Wie Sie im Code sehen können, habe ich die Zeilen auskommentiert, um den Fokus auf dieses Textfeld zu setzen. Da es jetzt das einzige Objekt ist, das fokussiert werden kann, werden diese Linien (theoretisch) nicht benötigt. Wenn ich den anderen Objekten erlaubte, den Fokus zu bekommen, hatten diese Linien keinen Effekt (der Fokus war trotz dieser SetFocus-Linien auf die Knöpfe zu wechseln).
Hier ist der Code. Es ist sehr einfach, außer dass die Eingabetaste das Ereignis nicht auslöst. Kann jemand sehen warum? Vielen Dank.
Private Sub btnDone_Click()
Application.Calculation = xlCalculationAutomatic
formMath.Hide
'Clear statistics
Range("attempts").Value = 0
Range("correct").Value = 0
Sheet5.Range("A2:W500").ClearContents
End Sub
Private Sub btnSubmit_Click()
recordAnswer
'formMath.txtAnswer.SetFocus
End Sub
Private Sub txtAnswer_AfterUpdate()
recordAnswer
'formMath.txtAnswer.SetFocus
End Sub
Private Sub txtAnswer_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 13 Then
recordAnswer
End If
End Sub
Private Sub UserForm_Initialize()
'Initialize manual calculation
Application.Calculation = xlCalculationManual
Application.Calculate
'Initialize statistics
Range("attempts").Value = 0
Range("correct").Value = 0
Sheet5.Range("A2:W500").ClearContents
'Initialize first problem
newProblem
End Sub
Sub recordAnswer()
'Update statistics
Dim attempts, correct As Integer
attempts = Range("attempts").Value
correct = Range("correct").Value
Range("results").Offset(attempts, 0).Value = attempts + 1
Range("results").Offset(attempts, 1).Value = lblTopNum.Caption
Range("results").Offset(attempts, 2).Value = lblBotNum.Caption
Range("results").Offset(attempts, 3).Value = lblBop.Caption
Range("results").Offset(attempts, 4).Value = Range("Answer").Value
Range("results").Offset(attempts, 5).Value = txtAnswer.Text
If (Range("Answer").Value = txtAnswer.Text) Then
Range("results").Offset(attempts, 6).Value = 1
Else
Range("results").Offset(attempts, 6).Value = 0
End If
'Update attempts and success
Range("attempts").Value = attempts + 1
Range("correct").Value = correct + 1
newProblem
End Sub
Sub newProblem()
Application.Calculate
formMath.lblTopNum.Caption = Range("TopNum").Value
formMath.lblBotNum.Caption = Range("BotNum").Value
formMath.lblBop.Caption = Range("ProbType").Value
formMath.txtAnswer.Value = ""
'formMath.txtAnswer.SetFocus
End Sub
Entschuldigung. Wusste nicht, dass ich Kommentare akzeptieren sollte. Ich habe nichts ignoriert. Aber ich ging zurück und akzeptierte einige von früheren Posts. Danke für die Köpfe hoch. Ich werde das von jetzt an im Auge behalten. – Alex
Nein, du solltest keine Kommentare akzeptieren, aber folge ihnen, wenn sie Sinn machen :) Schau dir deine Frage jetzt an :) –