2013-11-20 4 views
5

두 개의 열 (SubTopicIDSubTopic)이 나열된 ComboBox cmbSubTopic이있는 Access 2010 양식이 있습니다. 콤보 상자는 SubTopicID을 포함하는 필드에 바인딩됩니다. 콤보 상자의 SubTopicID 열이 숨겨져 있으며 SubTopic 만 표시됩니다. 드롭 다운에서 SubTopic을 선택하면 해당 SubTopicID이 테이블에 저장됩니다. 나는 폼의로드 이벤트에 대해 VBA 코드를 작성하여 테이블에서 SubTopicID을 조회하고 해당 SubTopic이 ComboBox에서 선택되었습니다.VBA : ComboBox에서 항목을 선택하는 방법

를 입력 한 텍스트가 나는 또한이를 사용하여 시도

목록에서 항목되지 않습니다 :

Set rsST = dbs.OpenRecordset(strSqlst) 
For i = 0 To Me.cmbSubTopic.ListCount - 1 
    If Me.cmbSubTopic.Column(0, i) = rsST.Fields("SubTopicID").Value Then 
     Me.cmbSubTopic.SetFocus 
     Me.cmbSubTopic.Selected(i) = True 
     Exit For 
    End If 
Next i 

이 말하는 오류를 제공합니다 : 내 현재 코드는 다음과 같은 것입니다 :

Me.cmbSubTopic = Me.cmbSubTopic.Selected(i) 

이 옵션은 ComboBox에서 항목을 선택하지만 값 나는 안으로 원하지 않는 테이블의 ID 필드에.

+0

일반적으로 컨트롤 소스가있는 콤보 박스의 값은 underlyng 테이블 필드의 값이므로 아무 것도하지 않습니다. – jacouh

+0

양식의 OnLoad 이벤트에 대한 테이블에 데이터 삽입을 차단 한 다음 콤보 상자의 AfterUpdate 이벤트에 삽입을 허용하는 방법이 있습니까? – ksagar

답변

8

콤보의 첫 번째 열인 SubTopicID은 콤보의 "바인딩 된 열"속성이기도하므로 열의 .Value 속성으로 사용됩니다. 즉 일치하는 콤보 행을 선택하려면 .Value에 값만 지정하면됩니다.

Me.cmbSubTopic.Value = rsST.Fields("SubTopicID").Value 

이 방법은 간단하지만 사용자 환경에 적합한 솔루션인지 여부는 확실하지 않습니다. 우리는 귀하의 rsST 레코드 세트에 대해 아무것도 모릅니다. 나는 레코드 세트의 현재 행에있는 SubTopicID 필드가 콤보에서 선택한 값이라고 가정합니다. 내가 그 점을 오해 한 경우, 우리는 다른 것을 찾아야합니다.

콤보가 폼의 레코드 원본에있는 필드에 바인딩 된 경우이 제안은 저장된 값도 변경합니다. 콤보를 "바인딩 해제"하고 싶지 않으면 --- 컨트롤 소스 속성을 비워 둡니다.

관련 문제