2017-10-19 15 views
0

Je crée une fonction pour faire défiler tous les contrôles d'un formulaire et appliquer un événement s'il s'agit d'une zone de texte/combobox/listbox, la fonction vérifie également si le contrôle est un sous-formulaire contrôles de sous-formulaire. Le problème que j'ai est s'il y a un autre sous-formulaire dans le sous-formulaire, je ne peux pas passer en revue les contrôles.Contrôle de sous-formulaire dans le sous-formulaire

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 

Si j'essayez ce qui suit cela fonctionne:

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

Mais cela n'a pas, pourquoi?

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

Ou est-il peut-être pas une façon de le faire:

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

Au lieu de 'FRM (ctl.Name) .Form', essayez' ctl.Form'. – Andre

+0

Toujours ne fonctionne pas –

+0

Eh bien, puisque le sous-formulaire n'est pas vraiment un formulaire et la fonction s'attend à ce qu'un objet de formulaire pour faire défiler ses contrôles, ne fonctionnera pas. – June7

Répondre

0

Jetez un oeil à ce lien.

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

Non, cela ne fonctionnera pas, j'ai besoin d'une boucle qui peut s'exécuter sur le sous-formulaire 2 à partir du formulaire de courrier. Mon application a des sous-formulaires avec des sous-formulaires Quelque chose comme ceci: 'Forms (MainFormName) .Form (Sub1Name) .Forms (Sub2Name) .Controls' –