2014-10-06 6 views
0

2 개의 필드 (txtTR1_Unit 및 cmbTR2_Unit)가 있습니다. 함께이 두 필드는 총 UNIT를 나타냅니다. cmbTR2_Unit에는 선택시 고유 한 값 목록이 있습니다. txtTR1_Unit은 관련 값을 자동으로 가져옵니다.SetFocus가 무시 당하고 있습니다 - 이유가 무엇입니까?

Tier1from2라는 함수를 만들었습니다.이 함수는 'string'을 받아들이고 관련 Tier1 값을 반환합니다.

그래서 After_Update 이벤트에서 cmbTR2_Unit을 업데이트 할 때 자동으로 다음 필드로 이동하려고합니다. - 다른 콤보 상자. 업데이트 후 다음 필드로 자동 이동하기 때문에 포커스를 설정할 필요가 없다고 생각했습니다.

txtTR1은 내 기능에서 예상대로 업데이트되지만 그 다음에는 다음 필드로 이동하지 않습니다. 그래서 나는 업데이트 후에 다음 필드로 'SetFocus'를 시도했다.

아직 시도하지 않음. 내가 놓친 게 무엇입니까?? 나는 기능 "Tier1From2 (Me.cmbTR2_UNIT.text)"을 제거 시도 테스트로

Private Sub cmbTR2_UNIT_AfterUpdate() 
     If Len(Me.cmbTR2_UNIT.Value) <> 0 Then 
     Me.txtTR1_UNIT.Value = Tier1From2(Me.cmbTR2_UNIT.Text) 
     'cmb_CostCenter.setfocus - 'this doesn't seem necessary - but it doesn't work anyway. 

     End If 

    End Sub 

단순히 하드 txtTR1_UNIT 단어 '결과'를 코딩하고이 차질없이 작동합니다. 나는 더 간단한 함수를 작성하는 데 사용되는 알고 있지만 나는 한동안 VBA를 손도 안 -이 기능을 단순화 할 수있는 방법 :이 기능에 뭔가가 필드를 일으키는 것을

Private Function Tier1From2(strTier2 As String) As String 

    Dim qdf As DAO.QueryDef 
    Dim db As DAO.Database 
    Dim strQry As String 
    Dim rs As Recordset 

    Set db = CurrentDb 
    Set qdf = db.QueryDefs("qUNIT_HUB") 

    strQry = "SELECT Tier1_Unit, Tier2_Unit " & _ 
    " FROM LTBL_Cost_Collector " & _ 
    " GROUP BY Tier1_Unit, Tier2_Unit " & _ 
    " HAVING (((Tier2_Unit) = '" & strTier2 & "'));" 


    qdf.SQL = strQry 
    db.QueryDefs.Refresh 

    Set rs = db.OpenRecordset(strQry) 


    Tier1From2 = rs![Tier1_Unit] 

    Set db = Nothing 
    Set qdf = Nothing 
    Set Recordset = Nothing 


End Function 
+0

컨트롤이 계층 구조에서 서로 따르도록 탭 순서를 설정 했습니까? 그렇지 않은 경우, 기본 탭 순서는 작성 순서이며 예상 한 것이 아닐 수 있습니다. – Markus

+0

cmb_CostCenter가 프레임 또는 다중 페이지에 있습니까? –

+0

예, 탭 순서가 설정되었습니다. txtTR1_Unit을 "TabStop : NO"로 설정했습니다. cmb_CostCenter는 현재 같은 양식에 있습니다. 내 관심사는 cmbTR2_Unit에서 값을 선택하고 Tab 키를 누를 때 창문이 부적절 할 때 그 종소리가 들린다는 것입니다. 마치 탭을 사용할 수없는 것처럼 말입니다. 그러나 값을 선택하지 않으면 문제없이 바로 탭을 적용 할 수 있습니다. MS Access 버전은 2007입니다. – monty327

답변

0

그것은 밝혀과 느슨한 형성 초점. 아마도 db.QueryDefs.refresh? 해결책은 다음과 같이 함수를 업데이트하는 것이 었습니다.

Private Function Tier1From2(strTier2 As String) As String 
    Dim rs As DAO.Recordset 
    Dim db As DAO.Database 
    Dim strSQL As String 
    Dim strTier1 As String 

    Set db = CurrentDb 

    strSQL = "SELECT Tier1_Unit, Tier2_Unit " & _ 
    " FROM LTBL_Cost_Collector " & _ 
    " GROUP BY Tier1_Unit, Tier2_Unit " & _ 
    " HAVING (((Tier2_Unit) = '" & strTier2 & "'));" 

    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 

    strTier1 = rs!Tier1_Unit 

     Set rs = Nothing 
     Set db = Nothing 

    Tier1From2 = strTier1 
End Function 

이것은 문제없이 작동했습니다.