2013-05-02 3 views
6

달성하려고하는 것은 콤보 상자 (Combo_sf)에서 약 10 개의 폼이있는 하위 폼 컨트롤 (sf_record)의 폼을 지정하기위한 선택이며, 해당 이름은 콤보 상자 데이터에 있습니다. 나는 VBA에 새로운 오전 내 방식이 옳다면 확실하지 않다 : 나는 콤보 상자의 갱신 후 이벤트에서이 놓여있다Subform 소스 개체에 액세스

Private Sub Combo_sf_AfterUpdate() 
    Dim strLoadTable As String 

    strLoadTable = "Form." & Me.Combo_sf.Value 
    MsgBox strLoadTable 

    Forms![frm_Mnu_Manage Configuration Settings]!sf_record.Form.SourceObject = strLoadTable 

End Sub 

하지만 난 할 때 내 선택 아무것도 형태로 발생하지 않습니다. 이 권리에 접근하고 있습니까, 아니면 다른 방법으로 더 잘 작동할까요?

답변

5

접근 방식 이어야합니다. 내 기본 폼에라는 이름의 콤보 상자 cbxSubform을 넣고 그 AfterUpdate() 이벤트 핸들러에 코드 한 줄 ...

Private Sub cbxSubform_AfterUpdate() 
Me.mySubform.SourceObject = Me.cbxSubform.Value 
End Sub 

을 추가 ... 그리고 콤보 상자에서 선택을 변경하면 즉시 하위 폼을 전환합니다. 콤보 상자의 코드 AfterUpdate()이 실제로 실행되고 있습니까? (당신은이 MsgBox 또는 Debug.Print 확인하기 위해 추가 할 수 있습니다.)

+1

감사합니다. 내 매크로가 제대로 작동하지 않는 문제가 있다고 생각합니다. 그러나이 정보는 도움의 손길에 큰 도움이되었습니다. – Bawn

4

당신에게 일인가되어이 줄 수 : 양식 객체가 무엇을

strLoadTable = "Form." & Me.Combo_sf.Value 

라고? 양식이 Form.myTableName이라면 .이 던져 질 수 있습니다. 이름에 점이없는 양식으로 설정해보십시오.

4

코드에서이 코드는 Form 개체의 SourceObject 속성을 변경하려고 시도하는 것으로 보입니다.

Forms![frm_Mnu_Manage Configuration Settings]!sf_record.Form.SourceObject = strLoadTable 

그러나 SourceObject는 하위 제어의 속성이 아닌 그 제어 내에 포함 된 형태이다. 따라서 하위 폼 컨트롤의 이름이 인 경우 sf_record이됩니다. 업데이트 후 절차는 [frm_Mnu_Manage Configuration Settings]에서 실행하는 경우

Forms![frm_Mnu_Manage Configuration Settings]!sf_record.SourceObject = strLoadTable 

또한, 당신은 양식을 참조 Me를 사용할 수 있습니다. Me.Combo_sf.Value 양식의 이름 인 경우

Me!sf_record.SourceObject = strLoadTable 

마지막으로, 당신은 로 이름을 접두사 필요가 없습니다 "양식.". 그것은 내 테스트에서 어떤 방식 으로든 작동했지만, 나는 단지 "Form"을 떠나야합니다..