У меня есть текстовое поле на пользовательской форме. Это единственное текстовое поле в форме. Помимо этого текстового поля есть три ярлыка и две кнопки. В принципе, я хочу, чтобы фокус оставался в этом текстовом поле во всех сценариях, кроме момента, когда была нажата одна из кнопок, но затем я хочу, чтобы фокус вернулся в текстовое поле. Обе кнопки имеют значение «TakeFocusOnClick» и «TabStop» равны False. У меня возникли проблемы с установкой фокуса на текстовое поле, поэтому я изменил эти два параметра.Поведение текстового поля Excel Userform
Как только я изменил эти настройки, клавиша Enter в текстовом поле перестала иметь какой-либо эффект. У меня есть события, написанные для _AfterUpdate и _KeyPress для текстового поля, но они не срабатывают. Как вы можете видеть в коде, я прокомментировал строки, чтобы установить фокус на это текстовое поле. Поскольку это единственный объект, который может сфокусироваться, эти строки не нужны (теоретически). Когда я позволил другим объектам сфокусироваться, эти линии не имели никакого эффекта (фокус был переключен на кнопки, несмотря на эти линии SetFocus).
Вот код. Это очень просто, за исключением того, что клавиша Enter не запускает событие. Может ли кто-нибудь понять, почему? Благодарю.
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
Извините. Не знал, что я должен был принимать комментарии. Я ничего не игнорировал. Но я вернулся и принял некоторые из ранних сообщений. Спасибо за головы. С этого момента я буду следить за этим. – Alex
Нет, вы не должны принимать комментарии, но следите за ними, если они имеют смысл :) Глядя на ваш вопрос сейчас :) –