フォーム上のすべてのコントロールをループし、テキストボックス/コンボボックス/リストボックスの場合はイベントを適用する関数を作成します。この関数は、コントロールがサブフォームであるかどうかをテストし、サブフォームコントロール。私が持っている問題は、サブフォームに別のサブフォームがあり、コントロールをループできない場合です。サブフォーム内のサブフォームコントロール
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")
、' ctl.Form'を試してみてください。 – Andre
まだ動作しません –
サブフォームは実際にはフォームではなく、関数はフォームオブジェクトがコントロールを循環させることを期待しているため動作しません。 – June7