2012-04-11 3 views
0

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 
+0

죄송합니다. 내가 의견을 수락해야한다는 것을 몰랐다. 나는 아무것도 무시하지 않고 있었다. 그러나 나는 되돌아 가서 이전 글들 중 일부를 받아 들였다. 머리를 가져 주셔서 감사합니다. 앞으로도이 사실을 계속 지켜 볼 것입니다. – Alex

+0

아니요. 의견을 수락하지 말고 받아 들여야하는 경우 따라야합니다. :) 지금 질문을 보면 :) –

답변

1

이 방법을 찾았습니다. 코드에서 위의 나는 _KeyPress 및 _AfterUpdate 이벤트를 데리고와 그들을 대체 :

Private Sub txtAnswer_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    Select Case KeyCode 
     Case 13: recordAnswer 
    End Select 
End Sub 

다른 방법이 작동하지 않은 이유는 확실하지, 그러나 이것은 않습니다.

왜 단순히 포커스를 직접 설정하지 않았는지 확실하지 않습니다. 나는 포커스가 설정되고 있다고 생각하지만, 그 다음으로 텍스트 상자의 초점을 바꿔 놓은 다른 것이 계속 발생했다. 그냥 추측.

도움 주셔서 감사합니다. 감사합니다.

1

당신은 어느 디자인 모드에서 0으로 텍스트 상자의 TabIndex 속성을 설정할 수 있습니다 시작하려면하거나 UserForm_Initialize()

Private Sub UserForm_Initialize() 
    TextBox1.SetFocus 
End Sub 

에있는 텍스트 상자에 포커스를 설정할 수 있습니다 마찬가지로 수행 한 작업 후에 TextBox1.SetFocus을 호출하여 텍스트 상자로 되돌립니다.

Option Explicit 

Private Sub UserForm_Initialize() 
    TextBox1.SetFocus 
End Sub 

Private Sub CommandButton1_Click() 
    MsgBox "Hello from Button 1" 
    TextBox1.SetFocus 
End Sub 

Private Sub CommandButton2_Click() 
    MsgBox "Hello from Button 2" 
    TextBox1.SetFocus 
End Sub 

원하지 않는 사항이 있으면 알려주십시오.

+0

감사합니다. 그러나 이것은 내가 말하고자하는 것입니다. 나는 그 접근법으로 시작했다. formMath.txtAnswer.SetFocus에 대한 몇 가지 참조가 몇 가지 다른 위치의 마지막 줄로 있다는 것을 알 수 있습니다. 버튼에 초점을 맞출 때 이것이 작동하지 않습니다. 마지막 줄은 텍스트 상자에 초점을 맞추기 위해 특별히 고안되었지만 단추로 설정된 포커스로이 서브 루틴에서 나옵니다. 왜 이런 일이 일어 났는지 나는 모른다. 그래서 초점을 맞출 수 없도록 버튼을 바꿔 초점 문제를 해결했지만 사건은 발생하지 않았습니다. 매우 혼란. – Alex

+0

샘플 파일을 업로드 할 수 있습니까? –