userform에 텍스트 상자가 있습니다. 양식의 유일한 텍스트 상자입니다. 이 텍스트 상자 외에 세 개의 레이블과 두 개의 단추가 있습니다. 기본적으로 모든 시나리오에서 버튼 중 하나를 클릭하는 순간을 제외하고이 텍스트 상자에 포커스를두고 싶습니다. 그런 다음 포커스를 텍스트 상자로 바로 가져 오길 원합니다. 두 단추 모두 "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
아니요. 의견을 수락하지 말고 받아 들여야하는 경우 따라야합니다. :) 지금 질문을 보면 :) –