2017-10-19 12 views
0

フォーム上のすべてのコントロールをループし、テキストボックス/コンボボックス/リストボックスの場合はイベントを適用する関数を作成します。この関数は、コントロールがサブフォームであるかどうかをテストし、サブフォームコントロール。私が持っている問題は、サブフォームに別のサブフォームがあり、コントロールをループできない場合です。サブフォーム内のサブフォームコントロール

Public Function FE_LoopThroughAllControlsNumLockOn(frm As Form) 
Dim ctl As control 
For Each ctl In frm 
    If ctl.ControlType = acSubform Then 
     Call FE_LoopThroughAllControlsNumLockOn(frm(ctl.Name).Form) 'Error here on subform within subform 
    ElseIf xIsControlForEventNumLock(ctl.ControlType) = True Then 
     ctl.OnGotFocus = "=FM_NUM_ON()" 
    End If 
Next ctl 
Set ctl = Nothing 
End Function 

Function xIsControlForEventNumLock(vControlType As AcControlType) As Boolean 
    Select Case vControlType 
     Case Is = acComboBox: xIsControlForEventNumLock = True 
     Case Is = acListBox: xIsControlForEventNumLock = True 
     Case Is = acTextBox: xIsControlForEventNumLock = True 
     Case Else: xIsControlForEventNumLock = False 
    End Select 
End Function 

私は次のことをしようとした場合、それは動作します:

Debug.Print Forms!frmHR_Details!frm_HRDetails2.Form!HRSubForm2.Form!sID 

しかし、これはそうではない、なぜ?

Debug.Print Forms("frmHR_Details").Form("frm_HRDetails2").Form.Form("HRSubForm2").Form.sID.Value 

それともこれを行う方法はありません。

set ctl = Eval("Forms!frmHR_Details!frm_HRDetails2.Form!HRSubForm2.Form!sID") 
+1

、' ctl.Form'を試してみてください。 – Andre

+0

まだ動作しません –

+0

サブフォームは実際にはフォームではなく、関数はフォームオブジェクトがコントロールを循環させることを期待しているため動作しません。 – June7

答えて

0

は、このリンクを見てみましょう。代わりに、 `FRM(ctl.Name).Form`の

http://access.mvps.org/access/forms/frm0031.htm

To refer to a control property, like Enabled   
On Mainform  
Me!ControlName.Enabled Me.Parent!ControlName.Enabled 
On Sub 1    Me!Subform1.Form!ControlName.Enabled Me!ControlName.Enabled 
On Sub 2    Me!Subform1.Form!Subform2.Form!ControlName.Enabled Me!Subform2.Form!ControlName.Enabled 
+0

これはうまくいきません。私はメールフォームからサブ2で実行できるループが必要です。私のアプリケーションはサブフォームを持つサブフォームを持っています このようなもの: 'フォーム(MainFormName).Form(Sub1Name).Forms(Sub2Name).Controls' –

関連する問題