2017-10-19 261 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

代替'FRM(ctl.Name).Form',儘量'ctl.Form'。 – Andre

+0

仍然不起作用 –

+0

那麼,因爲子表單不是一個真正的表單,而且函數需要一個表單對象來循環它的控件,所以不起作用。 – June7

回答

0

看看這個鏈接。

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。我的應用程序已在子表單 類似這樣的: 'Forms(MainFormName).Form(Sub1Name).Forms(Sub2Name).Controls' –