ユーザーフォームにテキストボックスがあります。フォーム上の唯一のテキストボックスです。このテキストボックスに加えて、3つのラベルと2つのボタンがあります。基本的に、ボタンの1つがクリックされた瞬間を除いて、すべてのシナリオでこのテキストボックスにフォーカスを維持したいのですが、その後、フォーカスをテキストボックスに戻したいと思います。どちらのボタンも「TakeFocusOnClick」と「TabStop」がFalseに設定されています。フォーカスをテキストボックスに設定する際に問題が発生したため、これら2つの設定を変更しました。
これらの設定を変更すると、テキストボックスの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