我有一个包含两个子表单的导航表单,如下所示:
单击子窗体A中的按钮时,我想调用子窗体B中的方法。方法定义如下:
Public Sub MyMethod()
Debug.Print "MyMethod called"
End Sub
我尝试使用Forms!SubformB.MyMethod
,但收到错误Database cannot find the referenced form 'SubformB'
。在参考this页面时,我也尝试了Forms!NavigationForm!SubformB.MyMethod
,但后来我得到Database cannot find the referenced form 'NavigationForm'
。有谁知道如何正确地做到这一点?
谢谢。
答案 0 :(得分:1)
Function
和Sub
过程被视为对该表单是私有的。如果您想要可以从多个不同表单调用Sub
,请将Sub
移动到“常规”VBA模块(即,从菜单中选择Insert > Module
时创建的模块VBA编辑器中的栏)并确保将其声明为Public
。
答案 1 :(得分:1)
下面是一段代码片段,它在单击主窗体上的按钮时可以获取子窗体的AllowEdits方法。很确定这就是你所追求的。
Function ToggleEditStatus_Child(WhichForm, WhichChild As String)
'Changes the AllowEdits setting of the SubForm parameter
Dim Cform As Object
Set Cform = Forms(WhichForm).Controls(WhichChild).Form
Cform.AllowEdits = Not Cform.AllowEdits
Forms(WhichForm).Refresh
Cform.Refresh
Forms(WhichForm).Controls(WhichChild).SetFocus
Set Cform = Nothing
End Function
答案 2 :(得分:0)
我确实想到了这一点,但有一个问题 - 另一种形式必须是开放的。这对我有用,所以我在这里发布解决方案。
首先,导航到表单:
DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
ObjectName:="SubformB", _
PathToSubformControl:="NavigationForm.NavigationSubform", _
DataMode:=acFormEdit
然后指向子表单:
Dim f As Form_SubformB
Set f = Forms("NavigationForm").NavigationSubform.Form
你可以自由地调用这个方法:
f.MyMethod()
注意:您很可能必须使方法Public
才能生效。